UserParameterで実行したコマンド結果が障害となる場合の原因特定方法について

いつもお世話になっております。
タイトルの件について質問させてください。

使用環境
Zabbix Server:3.0.7 PosetgreSQL
OS :CentOS 7.2
Zabbix Agent :3.0.7
OS :CentOS 7.3

UserParameterを使用してFPGAカードの状態を監視しています。
下記コマンドを実行させ、"FPGA Core Temperature"の行にあるOKの数を返しています。
更新間隔は30秒です。

UserParameter=fpga.fct1,export HOME=/root;bwmonitor --dev=1 --read | grep "FPGA Core Temperature" | grep OK | wc -l

トリガーには0が返ってきた場合に重度の障害としてアラート検知させるよう設定しています。
このアイテムで障害が多発(1日30件ほど)しており、原因調査を行っています。

障害が発生しているアイテムとは別に以下のコマンドで"FPGA Core Temperature"を含むすべての情報を出力させているのですが、
こちらでは"FPGA Core Temperature"は常にOKであり、障害が発生しているようには見えません。
またgrepする項目を変えて別の項目情報を収集しているアイテムでは障害は発生しません。

切り分けで「 | grep OK | wc -l」を抜いた下記コマンドを実行させるアイテムを作成しましたが、
障害が発生している時間付近の情報もOKになっています。

UserParameter=fpga.fct1,export HOME=/root;bwmonitor --dev=1 --read | grep "FPGA Core Temperature"

また、障害が多発しているアイテムと同じコマンドを実行するアイテムを作成しましたが、障害が発生している時刻付近でもこちらは常に「1」を返しています。

zabbix_agentd.logのdebuglebelを4に変更してログを見ましたが、「Sending back [0]」や「Sending back [1]」と出力されているだけで、
0が返ってくるのか原因の特定はできませんでした。

★確認したいこと
①0が返ってくる原因の特定方法
②正しく値が取得できる方法
③同じコマンドを実行しているアイテムで結果が異なる原因

ご回答お願いしたします。

コメント表示オプション

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

可能性としてですが、ハードウェアから値を取得するコマンドは、
同時に複数実行できなかったりしませんか?

例えば、同時に実行できなくて、ハードウェアにアクセスできなか
ったコマンド実行側では該当する行が出力されなかったのかもしれ
ません。

ユーザー dondoc の写真

TNK様

回答ありがとうございます。
Zabbixサーバからzabbix_getで同時にコマンド実行してみたところ、
値が返ってこないことや、デバイスがビジーというメッセージが表示されることがありました。
このことからTNK様の仰る通りコマンドの同時実行でハードウェアにアクセスできていない
ことが原因のようです。

各コマンド実行が成功するよう、各アイテムの更新を意図的にずらすことは可能でしょうか?

ユーザー TNK の写真

3.0.7であれば、更新間隔カスタマイズを使用すれば、それぞれの
アイテムの時刻時刻をずらせなくはないですが、設定が面倒でしょ
う。

対処方法の1つとしては、1つのアイテムでコマンドの実行結果をフ
ァイルに出力し、あとのアイテムは、その出力されたファイルから
情報を切り出して利用する方法が考えられると思います。