「Mackerel Advent Calendar 2016」3日目の記事を書くぞー!昨日も僕が担当していて,拡張グラフパーマリンクを試した話を書いた.
もっと枠が埋まってくれると良いのになぁ!
今日は一般的なユースケースとして,Mackerel でプロセス監視を行う方法と,その設定を Chef でプロビジョニングする話を書こうと思う.初歩的な話だけど参考になればと思って.
check-procs
Mackerel でプロセス監視を行う場合,公式に提供されている Check Plugins に入ってる check-procs を使うことになる.シンタックスはシンプルで,--pattern
でプロセス名(部分一致)を指定する.実際にはオプションも多く用意されていて,--user
でプロセスの実行ユーザーを指定したり,-w
や -c
でプロセス数ごとに監視閾値を変えて設定することもできる.詳しくは README 参照で!
mackerel-agent-plugins と一緒で,check-procs もバイナリで配布されたコマンドなので,コマンドを叩いて動作確認をすることができる.以下は Fluentd のプロセス監視をする例で,プロセス起動中と停止中でチェック結果が異なっている.
ちなみに --pattern
を td-agent
など曖昧に書いてしまうと誤検知に繋がることにもなるため,絶対パスなど特定して書くのと,--user
で実行ユーザーを指定するのは Tips として覚えておくと良いと思う.
$ /usr/bin/check-procs --pattern /usr/sbin/td-agent --user td-agent Procs OK: Found 2 matching processes; cmd //usr/sbin/td-agent/; user /td-agent/ $ /usr/bin/check-procs --pattern /usr/sbin/td-agent --user td-agent Procs CRITICAL: Found 0 matching processes; cmd //usr/sbin/td-agent/; user /td-agent/
Chef で mackerel-check-plugins をインストールする
Chef で mackerel-agent と mackerel-agent-plugins をインストールする場合はコミュニティクックブック (cookbook-mackerel-agent) を Berkshelf 経由でインストールする.さらに拡張用のクックブックを cookbooks/my-mackerel
に用意して,metadata.rb
に depends 'mackerel-agent'
と書く.今回紹介するクックブックは全て cookbooks/my-mackerel
を前提とする.
残念ながら mackerel-check-plugins
はコミュニティクックブックに含まれていないため,以下のように独自に package でインストールする必要がある.コミュニティクックブックに含めても良いような気がするんだけどなぁー.どうなんだろ?
include_recipe 'mackerel-agent' include_recipe 'mackerel-agent::plugins' package 'mackerel-check-plugins' do action :install end
Chef で check-procs を設定する
言ってしまうと簡単で mackerel-agent-plugins と同じように attributes に書くことができる.以下に nginx と php-fpm と td-agent を監視する mackerel-agent-plugins と check-procs の設定を定義した.
node.default['mackerel-agent']['conf']['plugin.metrics.nginx'] = { command: '/usr/bin/mackerel-plugin-nginx -port 80' } node.default['mackerel-agent']['conf']['plugin.metrics.php-fpm'] = { command: '/usr/bin/mackerel-plugin-php-fpm -url=http://localhost/php_fpm_status?json' } node.default['mackerel-agent']['conf']['plugin.metrics.fluentd'] = { command: '/usr/bin/mackerel-plugin-fluentd' } node.default['mackerel-agent']['conf']['plugin.checks.check_nginx'] = { command: '/usr/bin/check-procs --pattern /usr/local/nginx/sbin/nginx --user nginx' } node.default['mackerel-agent']['conf']['plugin.checks.check_php-fpm'] = { command: '/usr/bin/check-procs --pattern "php-fpm: master process"' } node.default['mackerel-agent']['conf']['plugin.checks.check_td-agent'] = { command: '/usr/bin/check-procs --pattern /usr/sbin/td-agent --user td-agent' }
このまま Chef でプロビジョニングをすると /etc/mackerel/mackerel.conf
に反映される.
$ cat /etc/mackerel-agent/mackerel-agent.conf apikey = "xxx" roles = ["xxx"] [plugin.checks.check_nginx] command = "/usr/bin/check-procs --pattern /usr/local/nginx/sbin/nginx --user nginx" [plugin.checks.check_php-fpm] command = "/usr/bin/check-procs --pattern \"php-fpm: master process\" --user root" [plugin.checks.check_td-agent] command = "/usr/bin/check-procs --pattern /usr/sbin/td-agent --user td-agent" [plugin.metrics.fluentd] command = "/usr/bin/mackerel-plugin-fluentd" [plugin.metrics.nginx] command = "/usr/bin/mackerel-plugin-nginx -port 80" [plugin.metrics.php-fpm] command = "/usr/bin/mackerel-plugin-php-fpm -url=http://localhost/php_fpm_status?json"
アラート通知
実際にプロセスが止まると以下のようにアラートが通知される.
まとめると
Chef で Mackerel の設定を全て管理してプロビジョニングできるようにしておくと運用が楽になるのでオススメ!