Amazon-Web-Services

當 ECS 服務無法持續成功啟動任務時創建 CloudWatch 警報

  • February 17, 2021

如果我向我的 ECS 服務發布一個帶有錯誤的新 Docker 映像,那麼該服務將嘗試啟動新任務,但如果新任務無法啟動,它將保留舊版本。

在這種情況下,它有時(並非總是)會向匯流排發出事件,例如:

服務 xxx 無法始終成功地啟動任務。有關詳細資訊,請參閱故障排除部分。

有時它只會發出大量事件,例如:

服務 xxx 在目標組 yyy 中取消註冊 1 個目標

我希望在這種情況下觸發 CloudWatch 警報。我怎樣才能做到這一點?

我看不到任何跟踪可用於觸發此警報的任何相關事件的 CloudWatch 指標。https://docs.aws.amazon.com/AmazonECS/latest/developerguide/cloudwatch-metrics.html

如果任務無法啟動,那麼我什至不會在 LB 目標組上獲得任何 UnHealthyHostCount 指標。

我想我必須創建一個 EventBridge 規則來監視上述命名事件,但我看不到讓該規則觸發警報的明顯方法。我已經設置了將“WARN”和“ERROR”事件轉發到 SNS/電子郵件的規則,但我並不總是收到這些事件。所以我經常得到一個沒有警報觸發的重啟循環。:-(

我有以下基礎設施,我認為可以滿足這一要求:

  1. 指標警報AWS/ApplicationELB/UnHealthyHostCount有時會觸發
  2. 具有以下模式的事件規則轉發到擷取失敗任務的 SNS:
{
   "source": [
       "aws.ecs"
   ],
   "detail-type": [
       "ECS Task State Change"
   ],
   "detail": {
       "group": [
           "service:${var.ecs_service_name}"
       ],
       "stoppedReason": [
           "Essential container in task exited"
       ]
   }
}
  1. 具有以下模式的事件規則轉發到 SNS,它擷取有時會觸發的“無法持續成功啟動任務”事件:
{
   "source": [
       "aws.ecs"
   ],
   "detail-type": [
       "ECS Service Action"
   ],
   "resources": [
       "${var.ecs_service_arn}"
   ],
   "detail": {
       "eventType": ["WARN", "ERROR"]
   }
}
  1. 指標上的警報AWS/Events/TriggeredRules發生 2 或 3 時觸發

這是一個相當混亂的方法,但我能找到最好的方法。我很失望 ECS 沒有發布指標來跟踪這種常見情況。

(我不訂閱上面創建的任何 SNS 主題;它們的存在只是為了使上述規則有效。如果需要,可以在 ECS 控制台中查看這些事件。)

引用自:https://serverfault.com/questions/1012603