自分メモ。
tl;dr
Datadog から届くサービスの紹介メールに記載されていた...
上記のくだりについて、これは CloudWatch で取得出来る ECS の情報も何らかの方法で取得出来るのかな...ということで、Datadog の公式ドキュメントに ECS Integration について記載されていたので、ドキュメントに沿って Terraform のテンプレートを作って試してみることにした。
ECS のコンテナを Datadog でモニタリングする方法として以下の三つの方法が取れる。
- ECS インスタンスにログインして Datadog Agent をインストールして Docker Integration を有効にする
- Datadog Agent 入りコンテナを手動で docker run する
- ECS の task として登録しておいて、インスタンス起動時に start-task させる
今回のドキュメントに紹介されている方法は三点目の方法。task 登録を行った上で rc.local に仕込まれた aws ecs start-task
でコンテナを起動させているが、更に AWS Integration を設定することで ECS の CloudWatch メトリクスも取得出来るようになったようだ。
僕が作った Terraform テンプレート
以下、僕が作った Terraform テンプレート。
terraform apply
するとモニタリングが開始する。
詳細は README にて。
そして AWS Integration で ECS メトリクスを取得する
AWS Integration の設定
ということで CloudWatch の API を叩いてメトリクスを取得する為には AWS Integration を設定する。
からの...
で。
AWS Integration で ECS 監視を有効にすることで ECS のメトリクスや ECS クラスタ名が取得出来るようになり、クラスタ毎の CPU 使用率等が取得出来るようになる。
以下は Datadog Agent で取得出来る項目。
- docker.containers.running
- docker.containers.stopped
- docker.cpu.system
- docker.cpu.user
- docker.mem.cache
- docker.mem.rss
- docker.mem.swap
そして、AWS Integration だと...
がメトリクスとして追加される。
尚...
こちらのドキュメントに従って ECS クラスタを構成した場合に IAM ロールの権限が不足している為に AWS Integration にて ECS のメトリクスが取得出来ないので注意されたし。
ドキュメント通りに IAM ロールの権限を設定することで AWS Integration にて ECS のメトリクスが取得することが可能。
$ git diff oreno_tf_ecs_iam.tf diff --git a/oreno_tf_ecs_iam.tf b/oreno_tf_ecs_iam.tf index 7c92854..3734e62 100644 --- a/oreno_tf_ecs_iam.tf +++ b/oreno_tf_ecs_iam.tf @@ -45,7 +45,8 @@ resource "aws_iam_role_policy" "ecs_iam_role" { "ecs:DiscoverPollEndpoint", "ecs:Submit*", "ecs:Poll", - "ecs:StartTask" + "ecs:StartTask", + "ecs:StartTelemetrySession" ], "Effect": "Allow", "Resource": "*"
ECS のドキュメントには...
Your Amazon ECS container instances also require ecs:StartTelemetrySession permission on the IAM role that you launch your container instances with. If you created your Amazon ECS container instance role before CloudWatch metrics were available for Amazon ECS, then you might need to add this permission. For information on checking your Amazon ECS container instance role and attaching the managed IAM policy for container instances, see To check for the ecsInstanceRole in the IAM console.
とあり、ecs:StartTelemetrySession
をロールに付ける必要がある。
仮に ecs:StartTelemetrySession
の定義が無い場合でも ECS Agent コンテナは起動するが以下のようなログが出力されて ECS のメトリクスは収集されない。
2015-08-30T13:40:54Z [ERROR] Error connecting to TCS: {"AccessDeniedException":"Forbidden"}, websocket: bad handshake module="tcs handler" 2015-08-30T13:40:54Z [INFO] Error from tcs; backing off module="tcs handler" err="{"AccessDeniedException":"Forbidden"}, websocket: bad handshake"
以下の記事が参考になる。
https://forums.aws.amazon.com/thread.jspa?messageID=673017
以上、ごちそうさまでした。