亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Google 云監控 - 警報政策:狀態代碼:409 - 對項目配置的并發編輯過多

Google 云監控 - 警報政策:狀態代碼:409 - 對項目配置的并發編輯過多

Go
小怪獸愛吃肉 2022-08-15 18:56:34
我正在嘗試為Google Cloud Platform中的Kubernetes Clusters創建警報策略。下面是示例代碼。service, err := monitoring.NewService(context.Background())if err != nil {    log.Panicln(err)    return}mqlCondition := &monitoring.MonitoringQueryLanguageCondition{    Duration: "60s",    Query: `fetch k8s_pod            | metric 'kubernetes.io/pod/volume/utilization'            | filter                (resource.cluster_name == 'test'                 && resource.pod_name =~ 'server.*')                && (metric.volume_name =~ 'dat.*')            | align mean_aligner()            | window 10m            | condition value.utilization > 0.001 '10^2.%'            `,    Trigger: &monitoring.Trigger{        Count: 1,    },}condition := monitoring.Condition{    DisplayName:                      "MQL-based Condition",    ConditionMonitoringQueryLanguage: mqlCondition,}alertpolicy := &monitoring.AlertPolicy{    DisplayName:          "Prakash1",    Combiner:             "OR",    Conditions:           []*monitoring.Condition{&condition},    NotificationChannels: []string{"projects/abc-app/notificationChannels/16000000099515524778"},    }p, err := service.Projects.AlertPolicies.Create("projects/abc-app", alertpolicy).Context(context.Background()).Do()if err != nil {    log.Panicln(err)    return}當我同時創建兩個或多個警報策略時,我收到以下錯誤:"googleapi: Error 409: Too many concurrent edits to the project configuration. Please try again., aborted"你能告訴我如何解決這個錯誤嗎?
查看完整描述

1 回答

?
拉丁的傳說

TA貢獻1789條經驗 獲得超8個贊

如錯誤所述,您無法同時添加策略。我建議您并行生成創建請求并序列化實際的 API 調用。您可以通過緩沖通道和多個 go 例程來實現此目的。例如:


var(

  backlogSize = 3 //change as per your needs

  requests = make(chan *monitoring.AlertPolicy, backlogSize)

)

func createPolicies(){

  ...

  go func(){

     //init the service

     ...

     for policy := range requests {

       p, err := service.Projects.AlertPolicies.Create("projects/abc-app", policy).Context(context.Background()).Do()

       if err != nil {

         log.Println(err)

       }

     }

  }()

  go func(){

     newPolicy := &monitoring.AlertPolicy

     //fill policy

     ...

     requests <- newPolicy 

  }()

  ...

  //wait for completion and close requests channel

}


另一種解決方案是使用指數退避+抖動重試每個失敗的并發請求


查看完整回答
反對 回復 2022-08-15
  • 1 回答
  • 0 關注
  • 159 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號