Seconds_Behind_Masterの監視設定

よろしくお願いします。

マスター・スレーブ環境のmysqlを監視する際に以下の値を取得するアイテムはどのように
作ればよいのでしょうか?

Seconds_Behind_Masterの値を取得

よろしくお願い致します。

コメント表示オプション

お好みのコメント表示方法を選び「設定の保存」をクリックすると変更が反映されます。
ユーザー fripper の写真

nekoruri 氏のブログ記事に、当該の監視を実現する手法が紹介されています

http://d.hatena.ne.jp/nekoruri/20130322/zabbixmysql

>>UserParameter=mysql.slave[*]

に関する部分が該当部分です

ユーザー hozumi の写真

fripper  さん ありがとうございます!

以下の内容で実施したのですが、うまくいきません。
アドバイス頂けますでしょうか?

------------------
■エージェント側の設定内容

①ホーム/var/lib/zabbixに.my.cnfを設置

[root@dev-test2 ~]# ll /var/lib/zabbix/.my.cnf
-rw-r----- 1 root zabbix 144 3月 26 17:03 2014 /var/lib/zabbix/.my.cnf

[root@dev-test2 ~]# cat /var/lib/zabbix/.my.cnf
[client]
host = localhost
user = root
password = root
port = 3307
socket = /var/foo/mysql/data/mysql.sock

②mysql監視設定ファイルの確認(/etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf)

[root@dev-test2 ~]# ll /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
-rw-r--r-- 1 root root 1517 2月 15 23:42 2014 /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf

[root@dev-test2 ~]# cat /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
ーー抜粋ーー
UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/var/lib/zabbix mysql -N | awk '{print $$2}'

ーーーーーー

■確認
[root@dev-test2 ~]# echo "show global status where Variable_name='Questions';" | HOME=/var/lib/zabbix mysql_fox -N | awk '{print $2}'
555

Variable_nameのQuestionsの数値を取得できた。

*注 mysqlをmysql_foxへ、また、awk printを$$2から$2へ変更した。

■zabbix-serverサイドからの確認

デフォルトのアイテムから適当なキーでzabbix_getをつかって確認

[root@dev-hozu-test01 ~]# zabbix_get -s 172.19.171.15 -k 'mysql.version'

[root@dev-hozu-test01 ~]# zabbix_get -s 172.19.171.15 -k 'mysql.ping'
0
[root@dev-hozu-test01 ~]#

mysqlpingが0で停止の判定。
バージョン情報も取得できない状態。。。

--------------------

ユーザー fripper の写真

通常にログインして、シェルから利用する場合には、homedir/.my.cnf が
読み込まれるはずですが、
zabbix_agentd からの子プロセス起動では、ホームディレクトリ以下の my.cnf が
うまく読み込まれておらず、正しく接続できていないのではないかと思います

#ポート番号等もデフォルトから変更されているようですし 3306 → 3307

agentd.conf に記述する mysql コマンドのコマンドライン文字列に
読み込ませたい my.cnf ファイルを示す
「–defaults-file=xxxx」
オプションを書いてみるのはいかがでしょうか?

また、同様の理由で、「--user」や「--password」等を記述すべきかもしれません

# user や password についても、my.cnf に書くことができますので、
# agentd のチェックからの呼び出し用に、関連設定を全部書いた my.cnf を用意して
# defaults-file パラメータで指定するのがスッキリするかもしれません

ユーザー hozumi の写真

fripper さん

コメントありがとうございます!

psで現在のmysqlの起動時のオプションを調べ、許す限り直接記述する形で、無事値を取得できるようになりました。

助かりました!!

ユーザー hozumi の写真

fripper さん

slaveの監視でご紹介頂いた、サイトの以下の部分をuserparameter_mysql.confに追記し、
mysqlコマンドのオプションを標準アイテムのキーで動作したものに置き換えて実施してみましたが取得されませんでした。

--追記内容--
UserParameter=mysql.slave[*],mysql <オプション複数> --defaults-extra-file=/var/lib/zabbix/.my.cnf -e "show slave status\G" | perl -ne 'print $$1 if /$1:\s*(.*)$/' | sed s/Yes/1/ | sed s/No/0/

ちなみに、デフォルトのように以下でも同じですか?

UserParameter=mysql.slave[*],echo "show slave status\G;" | HOME=/var/lib/zabbix /usr/local/bin/mysql <オプション複数> | perl -ne 'print $$1 if /$1:\s*(.*)$/' | sed s/Yes/1/ | sed s/No/0/

*どちらもダメでした。。
*perlはインストールされている環境です。

----確認----
zabbix-serverから

[root@dev-hozu-test01 ~]# zabbix_get -s 172.19.171.15 -k 'mysql.slave[Slave_IO_State]'

[root@dev-hozu-test01 ~]# zabbix_get -s 172.19.171.15 -k 'mysql.slave[Seconds_Behind_Master]'

[root@dev-hozu-test01 ~]#

---登録---
アイテムは、スレーブサーバのテンプレート(おまけ)を拝借してそのままホストに適応してみましたが、取得できていません。
mysql.slave[Last_SQL_Error]は有効の表示ですが、それ以外は取得不可の表示です。

以上、宜しくお願い致します。

ユーザー hozumi の写真

fripper さん

以下の書き方で、エージェントを再起動したら、取得できました!
お騒がせしました。ありがとうございます。

UserParameter=mysql.slave[*],echo "show slave status\G;" | HOME=/var/lib/zabbix /usr/local/bin/mysql <オプション複数> | perl -ne 'print $$1 if /$1:\s*(.*)$/' | sed s/Yes/1/ | sed s/No/0/

---確認----
[root@dev-hozu-test01 ~]# zabbix_get -s 172.19.171.15 -k 'mysql.slave[Seconds_Behind_Master]'
0
[root@dev-hozu-test01 ~]# zabbix_get -s 172.19.171.15 -k 'mysql.slave[Slave_IO_State]'
Waiting for master to send event

[root@dev-hozu-test01 ~]# zabbix_get -s 172.19.171.15 -k mysql.slave[Last_SQL_Error]

[root@dev-hozu-test01 ~]#

mysql.slave[Last_SQL_Error]のキーは取得できなかったのですが、エラーの文字列が存在しないということですか?

ユーザー redbox の写真

こんにちわ

わたしも以下のようにためしてみたのですが、Zabbixサーバー側からzabbix get コマンドを発行してもブランクの値(なにも返却されない)
状態でした。

UserParameter=mysql.slave[*],echo "show slave status\G;" | /usr/local/mysql5/bin/mysql --defaults-extra-file=/usr/local/zabbix-agent/etc/.my.cnf | perl -ne 'print $$1 if /$1:\s*(.*)$/' | sed s/Yes/1/ | sed s/No/0/

どうやらperl以降の構文がまちがっており抜き出しに失敗しているようにおもえますが、もう少し簡単にできる方法などあればどなたかアドバイス頂けると助かります。