MySQL slave のレプリケーション監視について
MySQL slaveの監視について上手く設定できずに嵌ってしまいました。
対処方法を御存知の方がいらっしゃいましたら、何卒ご教授頂けませんでしょうか。
使用しているzabbixのバージョンは2.0.6 zabbix-agentは2.2.11 です。
以下の2パターンを試したのですがどちらも上手く行っておりません。
1.(http://d.hatena.ne.jp/interdb/20140111/1389451898) (http://www.zabbix.jp/node/2593) を参考に設定
2.(https://blog.apar.jp/zabbix/3218/) を参考に設定
1の場合はアイテムとトリガーの設定までは行えたのですが、肝心のアイテムが取得不能になってしまい動作しませんでした。
アイテムの設定は「名前」「タイプ」「キー」の3項目のみサイトの手順通りに行い、その他は未入力(デフォルト値)のままです。
この3項目以外にも設定が必要になりますでしょうか。
トリガーはアイテムが取得できない為のエラーだと思うのですが、
設定した値は「機能」 で「最新(T秒前/T個前)の値 = N」と「N」で「2」のみで「最新の(T)」と「タイムシフト」は未入力です。
2の場合は参考にしたサイトの目次にあります 6.3 確認 で躓いております。
zabbixサーバー上で zabbix_get -s IPアドレス -k "mysql.slave.status[Slave_IO_Running]" を叩いた際、
zabbix_get [4181]:Timeout while executing operation となり値が得られておりません。
※[ ]内の数字は何度か試すたびに変わっております。 [4356]など。
(http://www.zabbix.jp/node/1474) を参考にzabbix_server.confとzabbix_agentd.confの
Timeoutの値を30に伸ばすなどしてみましたが、解消できておりません。
zabbixに限らずlinuxサーバー運用に関しても初心者の為、ご不明な点や変な設定等ございましたらご指摘頂けますと幸いです。
何卒よろしくお願いいたします。
sogaoh - 投稿数: 9
> 1の場合はアイテムとトリガーの設定までは行えたのですが、肝心のアイテムが取得不能になってしまい動作しませんでした。
これはZabbix(server側)の Web UI で設定を行った、ということかと思うのですが、
agent側で UserParameter を設定後に zabbix_agent を restart しないとアイテムが認識されないのではないでしょうか。
> zabbix_get [4181]:Timeout while executing operation となり値が得られておりません。
この結果は、zabbixのserver側(zabbix_get元)とagent側(zabbix_get先)が疎通できておらずタイムアウトした
というものではないでしょうか。
どうも、設定更新後の restart が抜けているためのように見えます。
#それは行った、というようでしたら恐縮です。
あと、zabbix_server側のOS・ミドルウェア等の情報、zabbix_agent側のOS・ミドルウェア等の情報も提供いただきたいと思います。
fripper - 投稿数: 495
このUserParameter から実行されている実際のシェル的な処理
mysql -e "SHOW MASTER STATUS\G" | grep "Slave_IO_Running" | awk '{print $2}'
に要する時間が30secを超えるならば、今のままのアイテム構成ではTimeout を回避することはできません
UserParameterからの呼び出しでは
「確認処理の呼び出しに成功した」
or
「確認処理の呼び出しに失敗した」
のいずれかを意味する値を 0 or 1 で返すようなアイテムとするような形にする意味合いで
UserParameter=mysql.master.status[*]=/opt/zabbix/mysql_check.sh $1
などのように設定する
アイテム「mysql.master.status[XXX]」については、
タイプは「Zabbixエージェント」のままで、戻り値(アイテムのデータ形式)を「数値 (整数) / 10進数」として
成功・失敗を受けるだけのアイテムとする
必要ならば、呼出失敗を示す値が戻ってきた場合のトリガーを作る
スクリプト内部では、本来やりたかった処理を、シェルの「&」を利用したバックグラウンド実行として
サブシェル化などして実行・呼び出しだけしておいて、「呼出成功」「呼出失敗」を、即時返す
サブシェル側では、本来実行したかった実際の mysql コマンドを実行して、結果値を
「mysql.master.status.trapper[XXX]」キーのアイテム値として、
zabbix_sender で投げる
別途、「mysql.master.status.trapper[XXX]」というキーの
「Zabbixトラッパー」型のアイテムを作成
こちらは、コマンドで得られる実際の値にあわせて「文字列」型のアイテムとする
異常を示す文字列が得られた場合に備えたトリガー等は
「mysql.master.status.trapper[XXX]」側のアイテムに対して条件づけして作成
こんな流れにする方法が検討できるかもしれません
※)
下スクリプトはイメージを掴んでもらいやすくするために書いてみました
実際動作するか、などのテストはしていませんので、そのままでは動かないかもしれません(汗)
特に、環境変数や、コマンドへの「PATH」が通っていないなど‥
# -- mysql_check.sh
#!/bin/sh
if [ ! -x /opt/zabbix/mysql_check_core.sh ]; then
echo 1
exit 0
fi
nohup /opt/zabbix/mysql_check_core.sh "$1" /dev/null 2>&1 &
echo 0
exit 0
# end of file
# -- mysql_check_core.sh
#!/bin/sh
HOME=/var/lib/zabbix
RETSTR=`mysql -e "SHOW MASTER STATUS\G" | grep "${1}" | awk '{print $2}'`
zabbix_sender -c /etc/zabbix/zabbix_agentd.conf -k "mysql.master.status.trapper[${1}]" -o "${RESULT}"
# end of file
FujiW - 投稿数: 4
sogaoh様
コメント頂き誠にありがとうございます。
> 設定更新後の restart
記載が漏れており大変申し訳ございません。
1と2どちらの場合も、UserParameter設定後にrestart しておりました。
>zabbixのserver側(zabbix_get元)とagent側(zabbix_get先)が疎通できておらずタイムアウト
こちらなのですが、restartを行い、Timeoutの値も伸ばしてみたのですが疎通できておりません。
Timeoutの調整はこちらを参考にしております(http://www.zabbix.jp/node/1474)
他に原因と思しきものなど御存知ありませんでしょうか。
OS等はこちらになります。
・zabbix_server: CentOS 6.4
・zabbix_agent: CentOS 6.7
・zbbix_server, zabbix_agent 共通(ミドルウェア)
PHP 5.3.3
apache 2.2.15
mysql 14.14
perl 5.10.1
※postfix, Ruby, pyson は入っておりません。
他に必要な情報等ございますでしょうか。
どうぞよろしくお願い致します。
sogaoh - 投稿数: 9
すみませんが、記述からでは、そもそも、zabbix_server と zabbix_agent とで疎通が確立できているのかがわかりません。
が、原因と考えられるところを書いてみるので確認してみてください。
1. zabbix_agentd.conf の Server・ListenIP の設定が正しいか
2. zabbix_server側・zabbix_agent側の SELinux・iptables の設定が正しいか
3. mysqlのポートが適切に解放されているか
これらの設定が正しいのであって、それでもなお期待結果にならないのであれば、
ログに何が出力されているかを見て対策を進めることになると思います。