Amazon-Web-Services
當 ECS 服務無法持續成功啟動任務時創建 CloudWatch 警報
如果我向我的 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/電子郵件的規則,但我並不總是收到這些事件。所以我經常得到一個沒有警報觸發的重啟循環。:-(
我有以下基礎設施,我認為可以滿足這一要求:
- 指標警報
AWS/ApplicationELB
/UnHealthyHostCount
有時會觸發- 具有以下模式的事件規則轉發到擷取失敗任務的 SNS:
{ "source": [ "aws.ecs" ], "detail-type": [ "ECS Task State Change" ], "detail": { "group": [ "service:${var.ecs_service_name}" ], "stoppedReason": [ "Essential container in task exited" ] } }
- 具有以下模式的事件規則轉發到 SNS,它擷取有時會觸發的“無法持續成功啟動任務”事件:
{ "source": [ "aws.ecs" ], "detail-type": [ "ECS Service Action" ], "resources": [ "${var.ecs_service_arn}" ], "detail": { "eventType": ["WARN", "ERROR"] } }
- 指標上的警報
AWS/Events
/TriggeredRules
發生 2 或 3 時觸發這是一個相當混亂的方法,但我能找到最好的方法。我很失望 ECS 沒有發布指標來跟踪這種常見情況。
(我不訂閱上面創建的任何 SNS 主題;它們的存在只是為了使上述規則有效。如果需要,可以在 ECS 控制台中查看這些事件。)