LoginSignup
2
1

More than 3 years have passed since last update.

mackerel-container-agentでFargate上のnginxとphp-fpmを監視する

Last updated at Posted at 2020-06-24

概要

mackerel-container-agentでFargate上のnginxとphp-fpmの監視を実装するのに、公式を見ると方法が書かれているのですが、パラメータの設定やミドルウェア側の設定などまとまっている資料がなかったので、構築した内容をまとめました。

ミドルウェアの設定

まずはじめに監視対象でstatusを取得できるように設定する。

php-fpm

php-fpm設定ファイルwww.confに以下の設定をする。

www.conf
pm.status_path = /phpfpm_status

nginx

nginx設定ファイルdefalut.confに以下の設定をする。
ECSのタスク内コンテナ通信は全てlocalhostで行われるため、mackerel-container-agentからのアクセス127.0.0.1を許可すればよい。

default.conf
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もここで設定する。

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

ファイル設置

このファイルは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で指定する。

task_definition.json
{
  "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
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1