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から色々取れるようになった。

mackerel-php mackerel-mysql

Follow me!

Leave a Reply

Previous article

abしてみた