いまさらmackerelをインストールしてみる

· 5 min read
いまさらmackerelをインストールしてみる


新しいテクノロジーも学ぼうね、ということで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なので、設定しないと悲惨なことになります。
  • 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は考慮されません)。OKWARNINGCRITICALUNKNOWN のいずれかです。
MACKEREL_PREVIOUS_STATUS 直前のコマンドの一つ前のコマンドの実行結果(max_check_attempts は考慮されません)。エージェント起動後初回は空文字列です。空文字列, OKWARNINGCRITICALUNKNOWN のいずれかです。

まだまだ弄れる箇所がありそうですが、取り急ぎNagiosの移設をしてみました。
今後のアップデートでもっと色々な機能が使えることを期待します。