概要
mackerel-container-agentでFargate上のnginxとphp-fpmの監視を実装するのに、公式を見ると方法が書かれているのですが、パラメータの設定やミドルウェア側の設定などまとまっている資料がなかったので、構築した内容をまとめました。
ミドルウェアの設定
まずはじめに監視対象でstatusを取得できるように設定する。
php-fpm
php-fpm設定ファイルwww.conf
に以下の設定をする。
pm.status_path = /phpfpm_status
nginx
nginx設定ファイルdefalut.conf
に以下の設定をする。
ECSのタスク内コンテナ通信は全てlocalhostで行われるため、mackerel-container-agentからのアクセス127.0.0.1
を許可すればよい。
server {
listen 80;
server_name localhost;
# nginx status setting
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1; # ECSタスク内のみアクセス許可
deny all;
}
# php-fpm status setting
location /phpfpm_status {
include fastcgi_params;
fastcgi_pass localhost:9000; # TCP通信の場合
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
access_log off;
allow 127.0.0.1; # ECSタスク内のみアクセス許可
deny all;
}
}
mackerel設定ファイルの作成、設置
ファイル作成
pluginをパラメータ付きで呼び出すのに設定ファイルからcommand指定する必要があるので作成する。
上記で設定したport
, host
, pash
などをここで指定する。
ついでにMACKEREL_APIKEY
もここで設定する。
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
ファイル設置
このファイルはmackerel-container-agentコンテナが参照できる場所(コンテナローカル, http/https, S3)に置けばいいが、ここではS3に置くことにする。
S3バケットをデフォルトの状態(パブリックアクセスをすべてブロック:オン)で作成し、ファイルを設置する。
IAMポリシー作成
ECSからS3へ内部アクセスできるようにタスクロール
に指定するIAMポリシーを作成する。
作成したポリシーをECSタスク定義に割り当てているタスクロールにアタッチする。
- ポリシーJSON
ファイルを設置したS3バケットを指定する
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::{ファイルを設置したS3バケット}/*"
}
]
}
ECSタスク定義の設定
単純にmackerel-container-agentを使用する場合、バージョンタグlatest
をタスク定義に指定すればいいが、nginxとphp-fpmも監視したいので、plgin全部入りのDockerイメージのバージョンタグplugins
を指定する。
また、上記で作成したmackerel設定ファイルをパラメータMACKEREL_AGENT_CONFIG
で指定する。
{
"taskRoleArn": "arn:aws:iam::${AWS_ACCOUNT_ID}:role/mackerel-ecs-task-role",
...
"containerDefinitions": [
{
"name": "mackerel-container-agent",
"image": "mackerel/mackerel-container-agent:plugins",
"memory": 128,
"essential": false,
"environment": [
{
"name": "MACKEREL_CONTAINER_PLATFORM",
"value": "fargate"
},
{
"name": "MACKEREL_AGENT_CONFIG",
"value": "s3://{ファイルを設置したS3バケット}/{適宜作成したディレクトリ}/mackerel_config.yaml"
}
]
},
...
]
}
監視状況確認
本設定をした上でデプロイを行うと、Mackerelコンソール画面より以下が確認できる様になる。
- 左メニュー「Hosts」 -> 該当Fargateホスト -> 「カスタムメトリック」
- 追加される項目
- nginx
- Nginx Connections
- Nginx connection status
- Nginx requests
- php-fpm
- PHP-FPM Max Active Processes
- PHP-FPM Max Children Reached
- PHP-FPM Max Listen Queue
- PHP-FPM Processes
- PHP-FPM Queue
- PHP-FPM Slow Requests