helen's blog

ずっとおもしろいことしてたいな。

Mackerelコンテナエージェントをちょっとだけ触りました

mackerel.io

待望の機能がリリースされてたのでちょっとだけ試します

用意したもの

  • Mackerel (しかもアンバサダーだよ!!!🌸😏🌸)
  • AWS Fargate 一式
    • なにかの検証で作って放置してたのを使いまわします
  • https://hub.docker.com/r/kennethreitz/httpbin/
    • お手軽に status 200 を用意するのによく使わせてもらっているやつ

手順

mackerel.io

サイドカーでコンテナエージェントを起動するだけなのでめっちゃ簡単
APIキーはパラメータストアとかで入れたほうが良さそう

起動する

AWS

f:id:heleeen:20190219005842p:plain

起動してるタスクが1つ

Mackerel

f:id:heleeen:20190219010227p:plain

タスクIDをホスト名としてタスク単位で登録される
設定項目にも見当たらないから手で入れるしかないのかな・・?

Fargate instance info

テーブルの一番右に気になるものがありました

Cluster	arn:aws:ecs:ap-northeast-1:ACCOUNT_ID:cluster/test
Task	32b720e1-b1f2-47e7-9b72-f8ae8ab30cee
Task Family	test
Task Version	6
Task ARN	arn:aws:ecs:ap-northeast-1:ACCOUNT_ID:task/32b720e1-b1f2-47e7-9b72-f8ae8ab30cee

Containers
Name: httpbin
Docker Name: ecs-test-6-httpbin-809d8593fab9ddd29101
Docker ID: 8aab519510a34f27de12b330861c615b60277b2ae26f0f73c7cd36da249acce7

Name: ~internal~ecs~pause # なんだこれ
Docker Name: ecs-test-6-internalecspause-d8c98efc81faf4d5a501
Docker ID: cfe07bc7071f847d01c7997016c6103af2e825303aeefb7cfac976faffbf3963

Name: mackerel-container-agent
Docker Name: ecs-test-6-mackerel-container-agent-bcdab3c995fffaecc401
Docker ID: 2246210032f1f619fb81d418df2bcd38c84d01134660a8200787213d4cf3f254

Known status	RUNNING
Desired status	RUNNING

httpbin が検証用につかっているstatus 200を返してくれるコンテナ、
mackerel-container-agent がコンテナエージェント、
~internal~ecs~pause は特に何か操作したものではありません

~internal~ecs~pause とは

aws.amazon.com

ネットワークスタックとアプリケーションコンテナのコマンドが競合しないように
まずECSエージェントがコンテナ開始前にpauseコンテナをタスクごとに作成する
次にCNIプラグインを実行してpauseコンテナの名前空間を用意し、
タスク定義内のコンテナを起動してpauseコンテナのネットワークスタックを共有する
タスク定義内のすべてのコンテナがENIによるIPアドレスを指定でき、
localhostで通信することができることを表す

なるほど?

グラフ

CPU

一番Poorなスペックでこれ
コンテナエージェントが全然CPU消費してない👀

f:id:heleeen:20190219025559p:plain

Memory

メモリも同様
だけどpauseコンテナが地味に存在感を出していて侮れないなぁ

f:id:heleeen:20190219025730p:plain

Mackerelコンテナエージェントの
設定ファイルがWeb経由やS3配置で取れるのがおもしろくて
apikeyがなければGitHubに設定ファイル入れてRawで取得して使えそう🤔