Mackerel plugin を更新してみた

RPMを更新したら、Mackerel のPHP-APCなどのプラグイン用に用意した設定が飛んだらしく表示されない。
ということで、久しぶりにMackerlの設定をいじってみる。

Mackerel 用NGINX設定の追加

/etc/nginx/conf.d に、Mackerel用の設定ファイルを追加してみた。
httpで、localhostからの接続を有効にして、phpファイルはFastCGI経由で接続するようにしてみた。
以下の設定を、/etc/nginx/conf.d/mackerel.conf として保存して、nginxをreload する。

server {
        listen 80 default_server;
        server_name _;

        charset UTF-8;
        client_max_body_size 16M;
        root  /etc/nginx/html;
        index index.php index.html index.htm;
        location /mackerel/ {
                fastcgi_split_path_info ^(.+?\.php)(/.*)$;
                if (!-f $document_root$fastcgi_script_name) {
                        return 404;
                }
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
                fastcgi_buffers 256 128k;
                fastcgi_buffer_size 128k;
                fastcgi_intercept_errors on;
                fastcgi_read_timeout 120s;

                allow 127.0.0.1;
                deny all;
        }
}

mackerel-plugin-php-apc を動作させて、うまくいくか確認してみる。いつの間にかpluginのパスが、/usr/local/binから/usr/binに移動しているのね。

#  mackerel-plugin-php-apc 
php-apc.purges.cache_full_count 0       1467322902
php-apc.purges.user_cache_full_count    0       1467322902
php-apc.stats.cache_hits        0       1467322902
php-apc.stats.cache_misses      0       1467322902
php-apc.cache_size.cached_files_size    0       1467322902
php-apc.cache_size.user_cache_vars_size 1692544 1467322902
php-apc.cache_size.total_memory 67108728        1467322902
php-apc.user_stats.user_cache_hits      11.428571       1467322902
php-apc.user_stats.user_cache_misses    0       1467322902

php-fpm プラグインの追加

なにやら、php-fpmなるプラグインが追加されたので、確認してみる。

起動失敗

おや起動するとPANICするね。

#  mackerel-plugin-php-fpm
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xb code=0x1 addr=0x0 pc=0x8049c4e]

goroutine 1 [running]:
panic(0x830d7e0, 0x18720030)
        /home/travis/.gimme/versions/go1.6.2.linux.amd64/src/runtime/panic.go:481 +0x326
main.PhpFpmPlugin.FetchMetrics(0xff8c181e, 0x15, 0x834bf20, 0x7, 0x5, 0x577592ac, 0x0, 0x0)
        /home/travis/gopath/src/github.com/mackerelio/mackerel-agent-plugins/mackerel-plugin-php-fpm/php-fpm.go:98 +0x5be
main.(*PhpFpmPlugin).FetchMetrics(0x1870ade0, 0xe, 0x0, 0x0)
        <autogenerated>:2 +0x8d
github.com/mackerelio/go-mackerel-plugin-helper.(*MackerelPlugin).OutputValues(0x18733f7c)
        /home/travis/gopath/src/github.com/mackerelio/go-mackerel-plugin-helper/mackerel-plugin.go:290 +0xb8
github.com/mackerelio/go-mackerel-plugin-helper.(*MackerelPlugin).Run(0x18733f7c)
        /home/travis/gopath/src/github.com/mackerelio/go-mackerel-plugin-helper/mackerel-plugin.go:284 +0x4f
main.main()
        /home/travis/gopath/src/github.com/mackerelio/mackerel-agent-plugins/mackerel-plugin-php-fpm/php-fpm.go:151 +0x331

これはURLをとれてない系かな?さて、ヘルプを見ると、http://localhost/status?json を見てるらしい。これなんだろう?

#  mackerel-plugin-php-fpm -h
Usage of mackerel-plugin-php-fpm:
  -metric-key-prefix string
        Metric key prefix (default "php-fpm")
  -tempfile string
        Temp file name
  -timeout uint
        Timeout (default 5)
  -url string
        Metric key prefix (default "http://localhost/status?json")

php-fpm status とは

どうやら、http://localhost/status?json は、PHP-fpmのステータスページらしい。
php-fpmの設定でできるらしいので、/etc/php7-fpm.d/www.conf の以下の部分をコメントアウトしよう。

pm.status_path = /status

このままでは、nginxで表示されないので、先ほど作成した /etc/nginx/conf.d/mackerel.conf に以下の記述を追記してみる。

        location /status {
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
                fastcgi_buffers 256 128k;
                fastcgi_buffer_size 128k;
                fastcgi_intercept_errors on;
                fastcgi_read_timeout 120s;

                allow 127.0.0.1;
                deny all;
        }

さて、ここでphp7-fpmとnginxを再起動する。最新のkusanagiコマンドに追加されたkusanagi restart を実行すると、現在有効なKUSANAGIで使用しているサービスを再起動してくれるぞ(ステマ感)。
再起動したら、もう一度 mackerel-plugin-php-fpm を実行してみよう

#  mackerel-plugin-php-fpm
php-fpm.processes.total_processes       10      1467323625
php-fpm.processes.active_processes      1       1467323625
php-fpm.processes.idle_processes        9       1467323625
php-fpm.max_active_processes.max_active_processes       2       1467323625
php-fpm.max_children_reached.max_children_reached       0       1467323625
php-fpm.queue.listen_queue      0       1467323625
php-fpm.queue.listen_queue_len  128     1467323625
php-fpm.max_listen_queue.max_listen_queue       0       1467323625
php-fpm.slow_requests.slow_requests     0       1467323625

mackerel-plugin-php-fpm の組み込み

最後に、macerel-plugin の設定に、php-fpmを追加して、再起動すればいい。

# vi /etc/mackerel-agent/mackerel-agent.conf
# tail -2 /etc/mackerel-agent/mackerel-agent.conf
[plugin.metrics.php-fpm]
command = "mackerel-plugin-php-fpm"
# systemctl restart mackerel-agent

これで、Mackerelの画面で、php-fpmがみれるね。

mackerel-php-fpm

Follow me!

コメントを残す