あるサーバでだけアイテムが取得できない

以下のアイテム設定にて各サーバでデータを取得しておりますが、サーバによってデータ取得ができない状態となっております。
具体的には、「0 byte」で取得されます。

サーバによっては、正常にデータ取得ができるので、コマンドのミスではないように感じています。
(実際にそのサーバでコマンドを打つと想定どおりの結果が返っています)

また、取得している時間も更新されているため、zabbixも動作しているように見受けられます。

こちらの原因について、心当たりがありましたら、ご教示頂けますでしょうか。

■環境
・OS:CentOs 5.5
・zabbixサーバ:1.8.4
・ZABBIX-JPのyumリポジトリを利用してインストールしました
・Zabbix_Server 1台 + Zabbix_Proxy 1台

■アイテム設定
==============================
タイプ:Zabbixエージェント(アクティブ)
キー:system.run["cat /tomcat/logs/catalina.out | grep JavaMemory | tail -1 | awk '{print $7}'| sed 's/.*=//' | sed 's/KB//' | awk '{print $1 * 1000}'"]
データ型:数値(整数)
単位:byte
更新間隔:300秒
ステータス:有効
==============================

※上記/tomcat/logs/catalina.outの出力例
2011/07/07 14:51:01.316 JavaMemory メモリ情報 : 割当量[total]=130112KB 使用量[used]=52901KB 使用可能最大[-Xmx]=504896KB メモリ使用率[10.5%]

こちらのアイテムで、「使用量[used]」の数値を取得しています。
また、キーのコマンドを「cat /tomcat/logs/catalina.out | grep JavaMemory | tail -1」と短くすると、こちらの結果は取得できます。
awkコマンドがいけないのでしょうか。。

尚、アイテムが取得できないサーバのzabbix_agentedのバージョンは以下の通り(v1.8.3)です。
しかしながら、こちらと同バージョンでも、データ取得できているサーバもあるため、zabbix_agentedのバージョンによる影響ではないと考えております。

#zabbix_agentd -V
Zabbix Agent (daemon) v1.8.3 (revision 13936) (16 August 2010)
Compilation time: Aug 17 2010 09:59:16

お忙しい中申し訳ありませんが、ご回答頂けますと幸いです。
よろしくお願い致します。

コメント表示オプション

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

まず、system.run[]を利用されるのであれば、タイプは通常の
「Zabbixエージェント」を利用するべきだと思います。

また、引数に指定されているコマンドですが、処理に3秒以上か
かったりしていませんか?
あと、Zabbixサーバなどのログに何か出力されていませんか?

処理に時間がかかりタイムアウトが発生しているのであれば、
zabbix_server.conf内のTimeoutの設定時間を延ばしてみてくだ
さい。

ユーザー Maki の写真

>>TNKさん

ご回答を頂きながら、返信が遅くなり申し訳ありません。

まず、対象アイテムのタイプは通常の「Zabbixエージェント」となっておりました。記載が誤っており申し訳ありません。
また、頂いた質問への回答は以下の通りです。

?引数に指定されているコマンドですが、処理に3秒以上かかったりしていませんか?
→即時に結果がでるようなコマンドになっております(1秒くらい)
 また、現在のタイムアウトの設定時間は20秒となっております。

?Zabbixサーバなどのログに何か出力されていませんか?
→特にエラーとなるようなログは出力されておりませんでした。
 というより、対象のアイテムのログが全く出力されておりません。
 他の取得できるサーバ(例.サーバA)ではZabbixサーバログに以下のように出力されております。

▼サーバAのzabbix_server.log
5697- "value":"1"},
5698- {
5699- "host":"サーバA",
5700: "key":"system.run[\"cat \/tomcat\/logs\/catalina.out | grep JavaMemory | tail -1 | awk '{print $7}'| sed 's\/.*=\/\/' | sed 's\/KB\/\/' | awk '{print $1 * 1000}'\"]",
5701- "clock":1310609838,
5702- "value":"129792000"},
5703- {

尚、取得できないサーバ(例.サーバB)のzabbix_agented.logには、一応以下のようなログが1行だけ出力されております。

▼サーバBのzabbix_agented.log
20639:20110714:111530.525 Executing command 'cat /tomcat/logs/catalina.out | grep JavaMemory | tail -1 | awk '{print $7}'| sed 's/.*=//' | sed 's/KB//' | awk '{print $1 * 1000}''

返信が遅くなり申し訳ありませんが、ご確認頂ければ幸いです。
よろしくお願い致します。

ユーザー TNK の写真

同様の設定を行って、system.run[]で値が取得できることが確認で
きました。
サーバによって取得できたりできなかったりとのことですので、値
の取得できないサーバのzabbix_agentd.conf内で、
<code>
EnableRemoteCommands=1
</code>
になっているかをご確認ください。

なっていなかったら変更してエージェントを再起動してください。

短いコマンドにすれば何らかの値が取得できているとのことでした
ので違うかもしれません。
あとは、awkコマンドのパスをフルパスで書いてみてはいかがでし
ょうか。

ユーザー heya の写真

こんにちは。

よくわかってないので見当違いかもしれませんが、 catalina.out に JavaMemory を含む行が存在していない、ということはありませんか?
あとは catalina.out のアクセス権(読み取り権限)も一応確認してみるといいと思います。

>(実際にそのサーバでコマンドを打つと想定どおりの結果が返っています)
「その」というのは、正常にデータ取得できるサーバーですか?失敗するサーバーで(手動で)コマンドを打っても取得できますか?
(短くすると取得できる、とのことなので大丈夫そうな気はするんですが)

ユーザー Maki の写真

>>heyaさん

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

ご質問頂いた件については以下の通りです。

▼catalina.out に JavaMemory を含む行が存在していない、ということはありませんか?
あとは catalina.out のアクセス権(読み取り権限)も一応確認してみるといいと思います。

→catalina.out に JavaMemory を含む行は存在しております。
また、権限についても「-rw-r--r--」と、読み取り権限も付与されております。

▼(実際にそのサーバでコマンドを打つと想定どおりの結果が返っています)
「その」というのは、正常にデータ取得できるサーバーですか?失敗するサーバーで(手動で)コマンドを打っても取得できますか?
→「そのサーバ」というのは、正常にデータが取得できない(失敗する)サーバになります。記載が紛らわしく申し訳ありません。。
 失敗するサーバで、手動でコマンドを打つと正常に返ってきますが、zabbixだと正常に返らないのか取得できない状態です。

ご確認頂きありがとうございます。
なかなか取得が難しいため、system.run[]内のコマンドを変更して対応しようかと考え中です。。