aws CloudWatch エージェントでPrometheus エクスポーターのメトリクスを取得する|aws CloudWatchエージェント Prometheus

Pocket

aws CloudWatch エージェントでPrometheus エクスポーターのメトリクスを取得する

AWS ECSを監視する際にCloudWatch エージェントを使うことが多いと思うが、

CloudWatch エージェントで取得できるメトリクスは限られている。

CloudWatchエージェントで取得できるメトリクスはこちら

そこで、Prometheusのエクスポーターを使ってCloudWatchにメトリクスを送ることにより、

CloudWatchエージェントでは取得できないメトリクスについて取得・監視することが可能となる。

どんなAWSサービスを使うの?

  • ECS-Fargate
  • Cloud watch

Prometheus エクスポーターを使うとどんな感じになるの?

前準備:ECS-FargateにCloudWatchエージェントとPrometheusのエクスポータを入れておく

実際の動作:CloudWatchエージェントがPrometheusのエクスポータを叩き、結果をCloudWatchへ送る

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/ContainerInsights-Prometheus-Setup-ECS.html

ここら辺の話。

試しにapache エクスポーターを使って動作を確かめてみる

ソースファイル

Dockerfile

以下のものをインストールしている

  • apache
  • CloudWatch agent
  • Supervisord
  • Prometheus exporter(apache exporter)

「RUN_IN_CONTAINER=True」を記載しないとコンテナでCloudWatchエージェントが動かない

supervisord.conf

Dockerfileでインストールしたものを起動するように使用

amazon-cloudwatch-agent.json

task_definition_list内の条件に合致するメトリクス取得対象を自動検出して「/tmp/cwagent_ecs_auto_sd.yaml」に吐き出す。

metric_declaration内の条件でCloudWatchにメトリクスを送る

prometheus.yaml

「/tmp/cwagent_ecs_auto_sd.yaml」内の情報で15秒間隔でメトリクスを取得するよってこと

Prometheus エクスポーターでCloudWatchにメトリクスを送った結果

Prometheus エクスポーターでCloudWatchにメトリクスを送った結果

複数のコンテナが立ち上がってる場合、「/tmp/cwagent_ecs_auto_sd.yaml」に複数コンテナの情報が書き込まれ、立ち上がってる分だけのコンテナの情報を収集するので、CloudWatchエージェント用のコンテナを立てるのが普通?

 

ちなみに、、自身のコンテナの情報だけをCloudWatchへ送る方法もある。この場合、CloudWatchエージェント用のコンテナは不要。やり方は↓↓↓↓↓↓↓↓↓↓↓

Prometheus エクスポーターでコンテナローカルのメトリクス 取得ver.

コンテナローカルのメトリクス 取得ver.

コンテナの自動検出機能を使わないと↓こんな感じ↓になる

amazon-cloudwatch-agent.json(コンテナローカルのメトリクス 取得ver.)

prometheus.yaml(コンテナローカルのメトリクス 取得ver.)