NagiosでMySQLを監視する
オープンソースの監視ツール、NagiosでMySQLを監視するには。
NagiosでのMySQL監視の実装にあたってはネット上に多くの情報が存在するが、
自分の実感としては正直、分かりにくい。情報も錯綜している。
ネットは一見お手軽に情報を入手できそうでいて、ときに正解にたどり着くまでに
余計な手間と時間がかかるのが痛いところだ。
そんなわけで、いつものように自分が分かるようにまとめるのである。
いくつかのサイトを覗いた中で、MySQLの設定はないにせよ、以下の解説は親切で分かりやすかった。
↓ ↓ ↓
http://www.marsandares.jp/tools/nagios-config.html
これも。
↓ ↓ ↓
http://www.atmarkit.co.jp/fnetwork/rensai/netman06/netman01.html
上記を中心に引用させてもらいつつ、これにMySQLの監視設定をプラスしてみようと思う。
この記事内では、監視元となるサーバを「Nagiosサーバ」、監視されるサーバを
「Nagiosエージェント」として統一する。また、サーバ名をとりあえず以下のように
統一しておこう。マシンはもちろんLinuxである。
Nagiosサーバ → monitor.net
Nagiosエージェント → db_01
Nagiosサーバには/usr/local/nagiosにNagiosがインストール済みであるという前提。
また、NagiosエージェントにNagiosプラグインを導入しておく(もちろんNagiosサーバにも)。
なお、Nagiosの標準プラグインではMySQL監視用として以下の2つのプラグインが
用意されている。
check_mysql
MySQLの状態を確認する。通常のプロセス監視のようなものらしい。
check_mysql_query
監視対象であるエージェントマシンのMySQLにクエリを発行し、その結果を表示する。
標準で含まれると書いたが、Nagiosプラグインインストール時にmysql_configにパスが
通っていないと入れてもらえない。mysql_configにパスが通っていない場合は、
(おそらく標準では/usr/local/mysql/binあたりだと思うが、環境によって
変えることもあるだろう)configure時に- -with-mysql=DIRオプションを
つけて場所を教えてやる必要がある。詳しくはインストールディレクトリ内の
REQUIREMENTSを参照。
リモートホストを監視するにはNRPE(Nagios Remote Plugin Executor)も導入する必要がある。
NRPEはリモートのホストのリソースを監視するためのツールで、こんな風に処理が行われるようだ。
監視元サーバ:Nagiosがcheck_nrpeを実行し、リクエストを送信。
↓ ↓ ↓
監視対象エージェント側:NRPEが受信し、プラグインを実行。応答を送信する。
↓ ↓ ↓
監視元サーバ:Nagiosが応答を受信する。
NRPE導入方法など詳しくは以下を。
http://good-stream.com/goodstream/nagios/nrpe.html
http://anabuki.dip.jp/tips/nagios/nrpe.htm
http://cubic9.com/Nagios/NRPE/
・・・いい加減本題に入ろう。
監視用ユーザ作成
MySQL DBがNagiosサーバからモニタリングを受け付けるためのユーザを作成しておく。
mysql> GRANT USAGE,REPLICATION CLIENT ON *.* TO nagios@monitor.net IDENTIFIED BY ‘password‘;
サーバが自らを監視するということも想定されるので、サーバ/エージェント両方の
MySQLで作成しておけばよいだろう。上記はレプリケーション監視をするという前提
のため、REPLICATION CLIENT権限を付与している。
リモートホスト側で直接動作確認したいときもある。
nagios@localhostユーザも作成しておいた方がいいかもしれない。
Nagios設定ファイルについて(これ重要)
/usr/local/nagios/etc配下に以下設定ファイルがある。
/usr/local/nagios/etc/〜
nagios.cfg ←メイン設定ファイル。どの設定ファイルを読み込むかの記述もここでする。
cgi.cfg ←CGIの設定ファイル
resource.cfg ←マクロ変数の設定ファイル
さらに/usr/local/nagios/etc/objects配下に以下の設定ファイルがある。(一部のみ抜粋)
/usr/local/nagios/etc/objects/〜
commands.cfg ←チェックコマンドの定義ファイル
templates.cfg ←テンプレートの定義ファイル
localhost.cfg ←監視するホストの定義ファイル
ここから監視対象ホストの設定を行う。
対象となるエージェントの設定ファイルを作成し、適宜情報を記述する。
〜etc/objects/配下にはlocalhost.cfgがあるので、それをひな形とすればいい。
# vi /usr/local/nagios/etc/objects/db_01.cfg
define host{
use linux-server
host_name db_01
alias db_01
address 192.168.1.200
}
define hostgroup{
hostgroup_name db-servers
members db_01
}
define service{
use local-service
host_name db_01
service_description MySQL
check_command check_mysql!nagios!passxxxx
}
上記説明を加えると、define hostで監視対象のホスト情報を定義する。
1行目の”use linux-server”は、linux-serverというテンプレートを使用すると宣言している。
テンプレート情報はtemplate.cfgに記述されている。
次に、define hostgroupで監視対象のホストが所属するグループを定義する。
どのようなグループ構成にするかは運用管理の仕方による。
次のdefine serviceで監視するサービスを定義する。上記例ではデフォルトに含まれる
プラグイン、check_mysqlを記述している。
useに使用するテンプレート、host_nameにエージェントホスト名を、
service_descriptionにサービス名を記述。
check_commandにはチェックするコマンド名とその引数を記述。
上記の例だと、「!」で区切った箇所にMySQLのアカウント情報が引数として渡されている。
この部分は別のコマンド定義ファイルから参照されるのである。
コマンド定義ファイルとは、前述した/usr/local/nagios/etc/objects/commands.cfgである。
commands.cfgには以下の内容を記述する。
define command{
command_name check_mysql
command_line $USER1$/check_mysql -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$
}
command_lineについて説明。
$USER1$
resource.cfgに定義されている、ユーザ定義のマクロ(変数)。デフォルトは”/usr/local/nagios/libexec”。
$HOSTADDRESS$
監視定義ファイル(db_01.cfg)の”address”が自動的に参照される。
$ARGn$
監視定義ファイル(db_01.cfg)check_commandの引数を呼び出す。
$ARG1$は第一引数、$ARG2$は第二引数なので、いちいち書くまでもないが
ユーザ名nagios、パスワードがpassxxxxとして参照されることになる。
よって実際には以下のコマンドが実行され、Nagiosはこのコマンドの返り値を
監視するのである。
/usr/local/nagios/libexec/check_mysql -H 192.168.1.200 -u nagios -p passxxxx
自分は当初監視定義ファイル(localhost.cfg)とコマンド定義ファイル(commands.cfg)の
相関が掴めず混乱したが、こういうことだったのだ。
また、ここでは監視定義ファイルをdb_01.cfgとしているが、場合によっては特定のホスト
1台に限らず複数のホストをまとめて記述することも可能。
Nagios設定ファイルの仕様は若干クセがあり正直自分自身掴みきれていないが、
やりやすいようにカスタマイズしていけばいいのだろう。
それからメイン設定ファイルnagios.cfg にdb_01.cfgを読み込ませるための記述も行う。
# vi /usr/local/nagios/etc/nagios.cfg
以下を追記
↓ ↓ ↓
cfg_file=/usr/local/nagios/etc/objects/db_01.cfg
文法チェックは以下コマンドを実行。
# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
問題なさそうだったらスタート/リスタート。
# /etc/init.d/nagios start
MySQLレプリケーション監視についてはまた別途。
(消化しながらでないと先へ進めないので、、、)
一応参考URL
http://www.grandarbre.net/2007/11/centos50nagios2-1.html
http://centossrv.com/nagios.shtml
http://d.hatena.ne.jp/kaorumori/20080607/1212863599
http://www.fireproject.jp/feature/nms/nagios/intro.html