新しいテクノロジーも学ぼうね、ということでmackerelの導入とプラグインの設定メモ。
Mackerelが選ばれる理由
取り敢えず魅力的な部分は上のリンクに全部書いてありますが、ざっくりまとめると
- 監視サーバを立てる必要がない
- インストール、設定が簡単
- 基本的なホストの監視はエージェントをインストールしただけで取得できる入れただけで取れる
- プラグインが豊富
- Nagios、Munin、Zabbixのプラグインがそのまま使える
- ミドルウェアのメトリクスを取得できる
- UIがこなれていてグラフの見た目が良い
残念ながらOSSではないので有料です。
ただ、freeアカウントは制約があるものの、頑張れば無料でも使い続けられます。
監視エージェントをインストール
環境はCentOS7でやってます。多分CentOS6と変わらないです。
この辺は公式リファレンスに沿ってます。
・yumでインストール
まずMackerelのyumリポジトリを登録します
curl -fsSL https://mackerel.io/file/script/setup-yum.sh | sh
その後、yumコマンドを用いてインストールできます
yum install -y mackerel-agent
エージェントのアップデートもyumコマンドから行えます
yum update -y mackerel-agent
・rpmコマンドからインストール
sudo rpm -ivh https://mackerel.io/file/agent/rpm/mackerel-agent-latest.noarch.rpm
アップデートの際は、以下のコマンドを実行してください:
sudo rpm -Uvh https://mackerel.io/file/agent/rpm/mackerel-agent-latest.noarch.rpm
ちなみに
新規ホストの登録手順ページで確認することで、なんとワンライナーでエージェントを追加することができます。 これは楽ちん。

設定ファイルを編集
/etc/mackerel-agent/mackerel-agent.conf ファイルを編集して、APIキーを設定してください。
apikey = "<YOUR_API_KEY>"
APIキーはアカウントのページから確認できます。
このAPIキーは外部に漏らさないようご注意ください、とのこと。
エージェントを起動する
以下のコマンドを実行することでエージェントが起動します。
/etc/init.d/mackerel-agent start
ついでに自動起動もonにしとく。
# CentOS7
systemctl enable mackerel-agent
# CentOS6
chkconfig mackerel-agent on
エージェントのログは/var/log/mackerel-agent.logに出力されます。
エージェントが正しく動きはじめると、Mackerelにホストとして登録されます。 ダッシュボードはこんな感じ。

プラグイン設定
Linux用のプラグインとnginxのステータス確認プラグインを導入してみる。
yum install mackerel-agent-plugins
Dependencies Resolved
=============================================================================================================================================================
Package Arch Version Repository Size
=============================================================================================================================================================
Installing:
mackerel-agent-plugins noarch 0.42.0-1 mackerel 68 M
Transaction Summary
=============================================================================================================================================================
Install 1 Package
Total download size: 68 M
Installed size: 163 M
Is this ok [y/d/N]:
お、163MB…!?
プラグイン郡結構容量デカめなので、DISK容量少ないと厳しいかもですね。
Linuxプラグイン
設定ファイル(/etc/mackerel-agent/mackerel-agent.conf)に以下のような箇所があるのでコメントを外して有効にする。
# [plugin.metrics.linux]
# command = "/usr/local/bin/mackerel-plugin-linux"
で、agentを再起動。
systemctl restart mackerel-agent
これで有効になりまった。
nagios-pluginを使ったプロセス監視
冒頭でもお伝えしましたが、このMackerelの嬉しいところは
既存のNagiosのプラグインが使えるところです。
nagios-pluginのインストール
めんどいので割愛。
mackerel-agentの設定
例えばこんなnrpe.cfgの中身がこんな感じだとしましょう。
# COMMAND DEFINITIONS
command[check_load]=/usr/local/nagios/libexec/check_load -w 5,10,15 -c 10,15,20
command[check_disk_/]=/usr/local/nagios/libexec/check_disk -w 5% -c 5% -p /
command[check_disk_/boot]=/usr/local/nagios/libexec/check_disk -w 5% -c 5% -p /boot
command[check_swap]=/usr/local/nagios/libexec/check_swap -w 70% -c 70%
command[check_cpu]=/usr/local/nagios/script/check_cpu 90 90
command[check_hdd]=/usr/local/nagios/script/check_hdd.sh
command[check_mailq]=/usr/local/nagios/libexec/check_mailq -w 5 -c 10 -M postfix -t 60
command[check_ntp]=/usr/local/nagios/libexec/check_ntp_time -H time.google.com -w 60 -c 120
command[check_smtp]=/usr/local/nagios/libexec/check_smtp -H localhost
command[check_nagios]=/usr/local/nnetworks/nagios/libexec/check_nagios -e 2 -F /usr/local/nnetworks/nagios/var/status.dat -C '/usr/local/nnetworks/nagios/bin/nagios'
command[check_procs_syslogd]=/usr/local/nagios/libexec/check_procs -c 1: -a "/usr/sbin/rsyslogd -n"
command[check_procs_crond]=/usr/local/nagios/libexec/check_procs -c 1: -a "crond"
command[check_mysql]=/usr/local/nagios/libexec/check_mysql
command[check_mysql_con]=/usr/local/nagios/script/check_mysql_connections.sh -w100 -c150
command[check_snmp]=/usr/local/nagios/libexec/check_tcp -H localhost -p 199
# EOF
これをmackerel-agent.confに記載する場合、以下の様に記述します。
[plugin.(nrpeの定義名)]
command = "(チェックコマンド)"
max_check_attempts = n
check_interval = n
notification_interval = n
ちょっとした注意点
- 項目名: 設定ファイル用のキーで、”plugin.checks.” で始まっている必要があり、 含まれるドットの数はちょうど2である必要があります。2つめのドット以降は監視設定の名前として利用されます。
- 例えば check_load とかは、 plugin.checks.load とかにしないといけないわけです。
- command: エージェントが実際に実行するコマンド コマンド全体をダブルクオートで囲む必要がありますが check_procsなんかでプロセスをダブルクォートで囲むと、ダブってエラーになるので注意。(プロセスはシングルクォーツで囲む)
- notification_interval: アラートの再送間隔を分で指定します。
省略した場合、アラートは再送通知されません。- 10分未満は指定できません。
- max_check_attempts: 最大試行回数を指定します。
ここで指定した回数以上、OK以外のチェック結果が続いた場合にアラートを発報します。- たとえば3が設定されている場合、OK以外の状態が3回続いた場合にアラートとなります。
- デフォは1なので、設定しないと悲惨なことになります。
- たとえば3が設定されている場合、OK以外の状態が3回続いた場合にアラートとなります。
- check_interval: チェック監視の実行間隔を分で指定します。
デフォルト値は1分です。
設定可能な範囲は1分から60分で、1分未満の場合は1分、60分以上を指定した場合は60分間隔で監視が実行されます。- 通常は5~10分でよいかと。
- timeout_seconds: デフォルトは30秒なので、通常は設定しなくて大丈夫
これらを踏まえると、nrpe.cfgの中身はこんな感じに置き換わるので
これを/etc/mackerel-agent/mackerel-agent.confに追記するだけ。
[plugin.checks.load]
command = "/usr/local/nagios/libexec/check_load -w 5,10,15 -c 10,15,20"
max_check_attempts = 3
check_interval = 5
notification_interval = 10
[plugin.checks.disk]
command = "/usr/local/nagios/libexec/check_disk -w 5% -c 5% -p /"
max_check_attempts = 3
check_interval = 5
notification_interval = 60
[plugin.checks.diskboot]
command = "/usr/local/nagios/libexec/check_disk -w 5% -c 5% -p /boot"
max_check_attempts = 3
check_interval = 5
notification_interval = 60
[plugin.checks.swap]
command = "/usr/local/nagios/libexec/check_swap -w 70% -c 70%"
max_check_attempts = 3
check_interval = 5
notification_interval = 10
[plugin.checks.cpu]
command = "/usr/local/nagios/script/check_cpu 90 90"
max_check_attempts = 12
check_interval = 5
notification_interval = 10
[plugin.checks.hdd]
command = "/usr/local/nagios/script/check_hdd.sh"
max_check_attempts = 3
check_interval = 5
notification_interval = 10
[plugin.checks.mailq]
command = "/usr/local/nagios/libexec/check_mailq -w 5 -c 10 -M postfix -t 60"
max_check_attempts = 3
check_interval = 5
notification_interval = 10
[plugin.checks.ntp]
command = "/usr/local/nagios/libexec/check_ntp_time -H time.google.com -w 60 -c 120"
max_check_attempts = 3
check_interval = 5
notification_interval = 10
[plugin.checks.smtp]
command = "/usr/local/nagios/libexec/check_smtp -H localhost"
max_check_attempts = 3
check_interval = 5
notification_interval = 10
[plugin.checks.procssyslogd]
command = "/usr/local/nagios/libexec/check_procs -c 1: -a '/usr/sbin/rsyslogd -n'"
max_check_attempts = 3
check_interval = 5
notification_interval = 10
[plugin.checks.procscrond]
command = "/usr/local/nagios/libexec/check_procs -c 1: -a 'crond'"
max_check_attempts = 3
check_interval = 5
notification_interval = 10
[plugin.checks.mysql]
command = "/usr/local/nagios/libexec/check_mysql"
max_check_attempts = 3
check_interval = 5
notification_interval = 10
[plugin.checks.mysqlcon]
command = "/usr/local/nagios/script/check_mysql_connections.sh -w100 -c150"
max_check_attempts = 3
check_interval = 5
notification_interval = 10
[plugin.checks.snmp]
command = "/usr/local/nagios/libexec/check_tcp -H localhost -p 199"
max_check_attempts = 3
check_interval = 5
notification_interval = 10
アラートの判定ロジックはnagiosを踏襲しているので、コマンド自体はそのままでいけます。
監視状況はmackerel上でこんな感じに確認できます。

ちなみに頑張ればイベントハンドラーも動かせます。
ただしmax_check_attemptsが考慮されないので、アラート発砲と同時にイベハンを動かすためには作りこむ必要があります。
- action.command:
commandに設定したコマンド実行後に毎回実行されるアクションです。
コマンドの実行結果に応じて行いたい処理がある場合に使用します。- 前回/今回のコマンドの結果などが環境変数として渡されます。
実行結果は無視されます。
- 前回/今回のコマンドの結果などが環境変数として渡されます。
アクションで利用可能な環境変数
| 環境変数 | 説明 |
|---|---|
| MACKEREL_STATUS | 直前のコマンドの実行結果(max_check_attemptsは考慮されません)。OK, WARNING, CRITICAL, UNKNOWN のいずれかです。 |
| MACKEREL_PREVIOUS_STATUS | 直前のコマンドの一つ前のコマンドの実行結果(max_check_attempts は考慮されません)。エージェント起動後初回は空文字列です。空文字列, OK, WARNING, CRITICAL, UNKNOWN のいずれかです。 |
まだまだ弄れる箇所がありそうですが、取り急ぎNagiosの移設をしてみました。 今後のアップデートでもっと色々な機能が使えることを期待します。