zabbix_get 経由での取得値とローカルで実行して返ってきた値について
いつもお世話になっております。
zabbix1.6 centOS 5.7 にて現在、設定をしております。
エージェント側でシェルを実行して出る値とサーバ側からzabbix_get 経由で実行した結果が異なるという
現象が発生しました。
具体的にやったことは、DRBD のプロセス数を監視しようとproc.num のキーで取得しようとしましたが、
うまく取得できずプロセス数を取得するシェルを作成しました。
(作成したシェルを一番下に記載します)
そして、エージェントのagentd.conf に下記設定を追記し、エージェントを再起動しました。
設定======================================
UserParameter=drbd.procnum,/etc/zabbix/drbd_chk.sh
==========================================
エージェント側でシェルを実行した場合は、「0」が返って来るのに対し
# /etc/zabbix/drbd_chk.sh
0
zabbix_get で取得した場合、「2」や「3」が返ってきました。
# /usr/sbin/zabbix_get -s XX.XX.XX.XX -k drbd.procnum
2
zabbixのアイテム値では、zabbix_get の値を取得しており、なぜこうなるのか原因がわかりません。
何か設定等に問題ありますでしょうか。
/etc/zabbix/drbd_chk.sh
====================
#/bin/sh
PROC_NUM=`ps -ef|grep drbd|grep -v 'grep drbd'|wc -l`
if [ a = a$PROC_NUM ];then
echo "error"
else
echo $PROC_NUM
fi
====================
TNK - 投稿数: 4769
エージェントからexecで実行されている
/etc/zabbix/drbd_chk.sh
の分もカウントされてしまっていることが考えられます。
PROC_NUMを取得している行で、
grep -v 'drdb_chk.sh'
も追加してみてはいかがでしょうか?
tenma69 - 投稿数: 17
ご回答ありがとうございます。
本日、提案いただいた内容でシェルを書き換え動作を確認しましたが、状況に変化がありませんでした。
TNK - 投稿数: 4769
現時点で、恐らくPROC_NUMの行が以下のようになっていると思います。
PROC_NUM=`ps -ef|grep drbd|grep -v 'grep drbd'|grep -v 'drdb_chk.sh'|wc -l`
そこで、/etc/zabbix/drbd_chk.sh内に以下のような行を追加して、
具体的にどのような出力をwcでカウントしているかを確認してみて
ください。
ps -ef|grep drbd|grep -v 'grep drbd'|grep -v 'drdb_chk.sh' > /tmp/procnum.tmp
fripper - 投稿数: 495
wc コマンドのバージョンによるのか、環境変数によるのかは不明ですが、
私の手元の環境 RHEL3 / RHEL4 / RHEL5 / RHEL6 での wc コマンドの結果表示書式が異なります
結果の数値が3だった場合に、
" 3"
のように、前方に空白を含んだ表示となる挙動をしめす場合と、
"3"
のように、数値のみが文字列となって表示される場合です
空白を含んだ値が返ってくる挙動を示すOSでは、提示頂いているスクリプトでは正常に動作しないと思われます
私の場合は、wc -l コマンドの結果をさらに sed で処理し、空白文字を除去しています
PROCNUM=`ps -ef | grep -v 'grep drbd' | grep -v 'drbd_chk.sh' | wc -l | sed -e 's/\s//g'`
可能性は低いかもしれませんが、参考までに。
tenma69 - 投稿数: 17
確認しましたところ、以下内容の出力が確認できました。
zabbix 27507 15809 0 04:06 ? 00:00:00 sh -c /etc/zabbix/drbd_chk.sh
1件の出力でしたが、以下の通り修正したことにより正常な件数(0件)で無事返ってくるようになりました。
このたびはありがとうございました。
修正前
PROC_NUM=`ps -ef|grep drbd|grep -v 'grep drbd'|grep -v 'drdb_chk.sh'|wc -l
修正後
PROC_NUM=`ps -ef|grep drbd|grep -v 'grep drbd'|grep -v 'sh -c /etc/zabbix/drbd_chk.sh'|wc -l