mackerel-container-agentのメトリック数を調整する


概要

mackerel-container-agentでFargate上のnginxとphp-fpmの監視を実装したら、1マイクロホストのメトリック数30を微妙にオーバーして料金が2マイクロホスト分になってしまった。

6メトリックで料金が倍になるのも癪なのでいらないもを調整する。

監視から外してもいいメトリックを検討する

ホストの画面からグラフを確認する。

サービス以外の以下のコンテナはいらなそう。

  • mackerel-container-agent
  • _internal_ecs_pause

設定方法(失敗)

目星をつけたコンテナをignoreContainerの設定でコンテナを監視対象外とする。
ignoreContainerは正規表現指定なのでOR条件で二つのコンテナ名を指定。
\A(mackerel-container-agent|_internal_ecs_pause)\z

mackerel_config.yaml
apikey: "********" # mackerelのAPIキー
plugin:
  metrics:
    nginx:
      command: mackerel-plugin-nginx -host=localhost -path=/nginx_status -port=80
    php-fpm:
      command: mackerel-plugin-php-fpm -url http://localhost/phpfpm_status?json
ignoreContainer: '\A(mackerel-container-agent|_internal_ecs_pause)\z'

設定してデプロイ
が、、、
_internal_ecs_pauseが監視対象外にならない、、、
そもそも、コレが何なのかちゃんと調べてなかった、、、
公式に出てました。

awsvpc ネットワークモードを使用してタスクが開始されると、タスク定義内のコンテナが開始される前に、各タスクに Amazon ECS コンテナエージェントによって追加の pause コンテナが作成されます。次に、amazon-ecs-cni-plugins CNI プラグインを実行して pause コンテナのネットワーク名前空間が設定されます。その後、エージェントによってタスク内の残りのコンテナが開始されます。こうすることで pause コンテナのネットワークスタックが共有されます。つまり、タスク内のすべてのコンテナは ENI の IP アドレスによってアドレス可能であり、localhost インターフェイス経由で相互に通信できます。

ではコンテナ名は何なんだろ?
なんとかpauseコンテナかなと目星をつけて正規表現で指定してみることに。

設定方法(成功)

なんとかpauseコンテナで指定する。
.*pause

mackerel_config.yaml
apikey: "********" # mackerelのAPIキー
plugin:
  metrics:
    nginx:
      command: mackerel-plugin-nginx -host=localhost -path=/nginx_status -port=80
    php-fpm:
      command: mackerel-plugin-php-fpm -url http://localhost/phpfpm_status?json
ignoreContainer: '\A(mackerel-container-agent|.*pause)\z'

コレでデプロイした結果、成功した。
mackerel-container-agent_internal_ecs_pauseの二つのコンテナが監視対象外にとなったので、結果として監視対象メトリック数が 36->28 となり、1マイクロホスト内に収まった、、、


Mackerelのメトリック数のカウントってわかりにくいと思うのは自分だけだろうか、、、?
グラフ数えてもなんか微妙に違う気がするし、カウントされてるメトリック一覧みたいの出して欲しい。