タダです.
前回の記事で Mackerel のカスタムプラグインを使った監視をやってみたんですが,EC2 の Uvicorn プロセス数の取得とプロセスの監視をしてみました.今回は前回のカスタムプラグインを使って ECS Fargate 上のプロセス監視をいれていきます.
監視のための準備
1, アプリケーション のコンテナ側での設定
FastAPI を動かすコンテナ側で Mackerel の監視設定とカスタムプラグインのスクリプトを追加していきます.ディレクトリとして mackerel
を追加してそこに設定ファイルとスクリプトを入れていきます.
. ├── app ・・・アプリケーション のコードが格納されているディレクトリ ├── mackerel ・・・Mackerel の設定及びカスタムプラグインのスクリプトが格納されているディレクトリ ├── ecs_setting・・・タスク定義が格納されているディレクトリ
まず設定ファイルとしてmackerel.yaml
を作ります.この中でカスタムプラグインのどのスクリプト がメトリックの取得をし,プロセス監視をするのかを設定していきます.
apikey: "YOUR_MACKEREL_APIKEY" plugin: metrics: uvicorn: command: sh /xxx/mackerel/uvicorn-ps-count.sh ・・・メトリック監視 checks: check_uvicorn: command: sh /xxx/mackerel/uvicorn-ps-check.sh・・・プロセス監視 ignoreContainer: '\Amackerel-container-agent\z'
次にスクリプトの配置ですが,次のスクリプト を配置し,実行権限を与えています.
uvicorn-ps-count.sh
#!/bin/sh metric_name='uvicorn.process.counts' metric=`ps aux |grep uvicorn | grep -v grep | wc -l` date=`date +%s` echo "${metric_name}\t${metric}\t${date}"
uvicorn-ps-check.sh
#!/bin/sh count=`ps aux |grep uvicorn | grep -v grep | wc -l` counts=`printf "%d\n" $count` if [ $counts -ge (正常なプロセスの数) ]; then exit 0 else exit 2 fi
最後にアプリケーションコンテナの Dockerfile とタスク定義に追加の設定を行います.Dockerfile では Mackerel のサイドカーコンテナから設定ファイルやスクリプトにアクセスできるようにVOLUME
の設定をし,タスク定義には設定ファイルのパスとマウント設定を記載していきます.
Dockerfile の該当箇所抜粋
WORKDIR /xxx/ COPY . . VOLUME /xxx/mackerel
タスク定義の該当箇所抜粋
{ "name": "mackerel-container-agent", "volumesFrom": [ { "sourceContainer": "アプリケーションコンテナ名" } ], "environment": [ { "value": "fargate", "name": "MACKEREL_CONTAINER_PLATFORM" }, { "value": "/xxx/mackerel/mackerel.yaml", "name": "MACKEREL_AGENT_CONFIG" } ], }
関連記事
2, mackerel-container-agent のカスタム設定
今回で,mackerel-container-agent
のコンテナから監視のシェルを叩いてもps: not found
が表示されていたため,ps コマンドをいれていきます.
2021/07/05 11:28:03 INFO <main> starting mackerel-container-agent (version:0.5.0, revision:e1a219c) 2021/07/05 11:28:03 INFO <agent> wait for the platform status to be running 2021/07/05 11:28:07 INFO <agent> start the agent: host id = xxxx, host name = xxxx 2021/07/05 11:28:07 INFO <metric> plugin fastapi (sh /xxx/mackerel/uvicorn-ps-count.sh): "/xxx/mackerel/uvicorn-ps-count.sh: 1: /xxx/mackerel/uvicorn-ps-count.sh: ps: not found\n"
mackerel-container-agent
では公開されているコンテナイメージを使ったカスタマイズが可能です.mackerel-container-agent
は Debian ベースのため ps コマンド実行に必要な処理を Dockerfile に記述し,ECR に格納していきます.
Dockerfile は次の定義をして ECR に格納しました.
FROM mackerel/mackerel-container-agent:plugins RUN apt update && apt install -y procps
コンテナ起動後の動作確認
コンテナを起動して意図したプロセス数の収集とプロセス監視ができているかを確認します.両方の設定が画面から確認できたのとプロセス監視はアラートが飛ぶことも確認できました.
プロセス数収集
プロセス監視
まとめ
ECS Fargate でmackerel-container-agent
にないプロセス監視をやってみました.今回の設定を確認していくにあたって Mackerel サポートの方に助けていただきました.ありがとうございました!同じように ECS Fargate 環境でのカスタムプラグインによる監視をされたい方の参考になれば嬉しいです!