Mackerel pluginを入れてみた
Mackerel plugin というのがあるらしいので入れてみた。mackerel-agent-plugins は、githubで公開されているが、CentOSベースなら、yum install だけでインストールできる。
# yum install mackerel-agent-plugins <中略> # rpm -ql mackerel-agent-plugins /usr/local/bin /usr/local/bin/mackerel-plugin-apache2 /usr/local/bin/mackerel-plugin-aws-cloudfront /usr/local/bin/mackerel-plugin-aws-ec2-cpucredit /usr/local/bin/mackerel-plugin-aws-ec2-ebs /usr/local/bin/mackerel-plugin-aws-elasticache /usr/local/bin/mackerel-plugin-aws-elasticsearch /usr/local/bin/mackerel-plugin-aws-elb /usr/local/bin/mackerel-plugin-aws-rds /usr/local/bin/mackerel-plugin-aws-ses /usr/local/bin/mackerel-plugin-conntrack /usr/local/bin/mackerel-plugin-docker /usr/local/bin/mackerel-plugin-elasticsearch /usr/local/bin/mackerel-plugin-fluentd /usr/local/bin/mackerel-plugin-gostats /usr/local/bin/mackerel-plugin-haproxy /usr/local/bin/mackerel-plugin-inode /usr/local/bin/mackerel-plugin-jmx-jolokia /usr/local/bin/mackerel-plugin-jvm /usr/local/bin/mackerel-plugin-linux /usr/local/bin/mackerel-plugin-memcached /usr/local/bin/mackerel-plugin-mongodb /usr/local/bin/mackerel-plugin-munin /usr/local/bin/mackerel-plugin-mysql /usr/local/bin/mackerel-plugin-nginx /usr/local/bin/mackerel-plugin-php-apc /usr/local/bin/mackerel-plugin-php-opcache /usr/local/bin/mackerel-plugin-plack /usr/local/bin/mackerel-plugin-postgres /usr/local/bin/mackerel-plugin-rabbitmq /usr/local/bin/mackerel-plugin-redis /usr/local/bin/mackerel-plugin-snmp /usr/local/bin/mackerel-plugin-squid /usr/local/bin/mackerel-plugin-td-table-count /usr/local/bin/mackerel-plugin-trafficserver /usr/local/bin/mackerel-plugin-unicorn /usr/local/bin/mackerel-plugin-varnish /usr/local/bin/mackerel-plugin-xentop
この内、Linux、mysql 、phpのプラグインを試してみた。
まず、Mackerel-agentの設定ファイル/etc/mackerel-agent/mackerel-agent.conf の以下の部分をコメントアウトして、mackerel-agent を再起動してみる。
[plugin.metrics.linux] command = "/usr/local/bin/mackerel-plugin-linux" [plugin.metrics.mysql] command = "/usr/local/bin/mackerel-plugin-mysql" [plugin.metrics.php-apc] command = "/usr/local/bin/mackerel-plugin-php-apc" [plugin.metrics.php-opcache] command = "/usr/local/bin/mackerel-plugin-php-opcache"
しばらく待って、Mackerelサイトから確認すると、linux pluginは動いてるが、mysql とphpのpluginは動いてない。これは面白くなってきた。
まず、mackerel プラグインを手動で動かしてみる。これはmackerel-agent.confで指定しているcommandをそのまま実行するだけ。
# /usr/local/bin/mackerel-plugin-linux linux.context_switches.context_switches 17600.000000 1456662849 linux.forks.forks 213.333333 1456662849 linux.users.users 1.000000 1456662849 linux.swap.pswpin 0.000000 1456662849 linux.swap.pswpout 0.000000 1456662849 linux.ss.ESTAB 114.000000 1456662849 linux.ss.TIME-WAIT 9.000000 1456662849 linux.ss.UNCONN 65.000000 1456662849 linux.ss.LISTEN 75.000000 1456662849 linux.disk.elapsed.iotime_vda 113.333333 1456662849 linux.disk.elapsed.iotime_weighted_vda 173.333333 1456662849 linux.disk.rwtime.tsreading_vda 20.000000 1456662849 linux.disk.rwtime.tswriting_vda 153.333333 1456662849 linux.interrupts.interrupts 11653.333333 1456662849 # /usr/local/bin/mackerel-plugin-mysql 2016/02/28 21:35:19 FetchMetrics (DB Connect): Received #1045 error from MySQL server: "Access denied for user 'root'@'localhost' (using password: NO)"
mackerel-plugin-mysql の実行で、Access denied と出ている。mackerel agentはroot user、パスワード無しで入ろうとしているらしいですね。それはアクセス出来ないね。
ググると、read only 権限付きのユーザを作るといいらしいという情報を見つけた(mackerelでmysqldを監視するための設定)。
# mysql -uroot -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 94 Server version: 10.0.24-MariaDB-wsrep MariaDB Server, wsrep_25.13.raf7f02e Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> grant PROCESS, REPLICATION CLIENT on *.* to 'monitor'@'127.0.0.1'; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> flush privileges; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> quit Bye [root@133-130-126-218 ~]# /usr/local/bin/mackerel-plugin-mysql -username=monitor -host=127.0.0.1 mysql.innodb_insert_buffer_usage.ibuf_cell_count 2.000000 1456663249 mysql.innodb_insert_buffer_usage.ibuf_used_cells 1.000000 1456663249 mysql.innodb_insert_buffer_usage.ibuf_free_cells 0.000000 1456663249 <以下略>
monitorユーザとホスト名を指定してあげて、無事情報をゲット出来た。monitorユーザはlocalhost からしか接続できない(そもそも外部へはmysqlのポート開けてない)し、権限を絞ってるので多分大丈夫。
つぎ、phpのpluginを確認すると、/mackerel/php-apc.php にアクセス出来ないというエラーがでる。そりゃ当然作ってませんから。で、githubのmackerel-agent-plugin-php-apc をみると、/mackerel/を見れるようにして、php-apc.php というファイルを置かないといけないらしい。そんなファイルRPMに含まれてないので(ここがおかしい)、githubからphp-apc.phpを落とす。で、nginxで以下のように設定し、DocumentRootにmackerelというディレクトリを作ってphpファイルを配置。kusanagiでは、php7もhhvmもfastcgi経由なので、phpの設定はこのようになる。
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; }
で、試す。まずはcurlで。あれ値が取ってこれない…
# curl http://127.0.0.1/mackerel/php-apc.php memory_segments:0 segment_size:0 total_memory:0 cached_files_count:0 cached_files_size:0 cache_hits:0 cache_misses:0 cache_full_count:0 user_cache_vars_count:0 user_cache_vars_size:0 user_cache_hits:0 user_cache_misses:0 user_cache_full_count:0
調べてみると、phpの関数 apc_cache_info()からメモリ情報やキャッシュヒット率を求めているんだけど、hhvmではここれ辺うまく取れてくれないらしい。
php7だと以下のように値が取れる。hhvm にはプラグインを考えないといけないかあ。
# curl http://127.0.0.1/mackerel/php-apc.php memory_segments:1 segment_size:67108728 total_memory:67108728 cached_files_count:0 cached_files_size:0 cache_hits:0 cache_misses:0 cache_full_count:0 user_cache_vars_count:0 user_cache_vars_size:0 user_cache_hits:0 user_cache_misses:0 user_cache_full_count:0
opcache も同様に、githubのmackerel-plugin-php-opcache からphp-opcache.phpを落とし、ファイルをphp-apc.phpと同様に配置。
# curl http://127.0.0.1/mackerel/php-opcache.php used_memory:35182752 free_memory:99034976 wasted_memory:0 current_wasted_percentage:0 num_cached_scripts:420 num_cached_keys:455 max_cached_keys:7963 hits:2847 oom_restarts:0 hash_restarts:0 manual_restarts:0 misses:420 blacklist_misses:0 blacklist_miss_ratio:0 opcache_hit_rate:87
これで、mackerelから色々取れるようになった。