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がみれるね。