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 の写真

エージェントからexecで実行されている

 /etc/zabbix/drbd_chk.sh

の分もカウントされてしまっていることが考えられます。
PROC_NUMを取得している行で、

 grep -v 'drdb_chk.sh'

も追加してみてはいかがでしょうか?

ユーザー tenma69 の写真

ご回答ありがとうございます。

本日、提案いただいた内容でシェルを書き換え動作を確認しましたが、状況に変化がありませんでした。

ユーザー TNK の写真

現時点で、恐らく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 の写真

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 の写真

確認しましたところ、以下内容の出力が確認できました。

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