system.runで値が取得できない時間帯がある

Zabbix2.2.9を使用しております。

system.runを使用してスクリプトの戻り値を監視しております。
300秒に1回、監視対象1サーバにつき20項目程度実施しており、通常時は問題なく値が取得できています。

ただし、特定の時間帯のみ上記の処理とは別に10秒に1回程度system.runを実行しており、
その時間帯のみ300秒に1回のsystem.runの処理がスキップされています。
※zabbix_agentd.logでもsystem.runを実行される際に出力される「Executing command…」のログが、
 スキップされている時間帯には出力されておりません。

そこで2点質問させてください。
・system.runは同時実行数に制限があるのでしょうか。
・制限がある場合、どのようにしてチューニングすることが可能でしょうか。

コメント表示オプション

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

広瀬です

外部チェックに関していえば、外部チェックを過度には使用は避けるべきとの記載が公式マニュアルに
記載があります。具体的な数値化は記載はされていないので、数値での指定はありません。
同様にsystem.runも同等の扱いだったと記憶しています。こちは明確な記述が無いので何ともいえません。
なので、制限というよりも制約(=仕様)に近い部分も場合によってはあるかもしれません。なのでチューニ
ングに属する部分もzabbix_server側の実行本体側(C言語)に依存してくるかと思います。

①Agent/Server側のTimeoutがらみというのも考えられますので、Timeout値の引き延ばし

②Agent、またはServer側にエラーログが出ていないかの調査。Debugレベル引き上げて、当該時間帯
  の出力を確認する

③実行されているスクリプトがどのような代物か解りませんが、処理に於ける時間が特定との事ですから
  何かしら実行に阻害要因がある<例えば重複実行が行えない処理をしているなど

 ⇒③の場合は、スクリプト側の実行結果も別ログファイルに吐くようにするなど少し改良を加え、
   Zabbix以外の視点から阻害要因を見つけるしかないでしょう

・・・と行ったご提示しかできませんが、特定時間帯のみ・・・それも可変が無いのであればその路線で探る
上で②、③の調査が一番最良かと思います。

ユーザー TNK の写真

1つのZabbixエージェント上で同時に処理をしなければならないアイテムの
数が多くなってくると、デフォルトの設定では、同時に処理要求を受け付け
るためのプロセス数が不足してしまう場合が考えられます。

この場合は、zabbix_agentd.confのStartAgentsの設定で数を増やすことで
対応できるかもしれません。

また、Zabbixサーバー側での負荷の問題の場合も考えられますが、その場合
は、Pollerプロセスのbusy率が上昇しているはずです。
Zabbixサーバーに、Zabbixサーバー用のテンプレートをリンクさせて、
各プロセスのbusy率を確認してみてください。
もしも、Pollerプロセスのbusy率が上昇しているのであれば、Zabbixサーバー
側のPollerプロセスの数を増やすことで対応できると思います。

この場合は、zabbix_server.conf内のStartPollersの設定値を増やしてみて
ください。

あと、1つの処理で3秒以上かかる場合は、デフォルトの設定ではタイムアウト
が発生して、そのアイテムの状態が取得不可になってしまうと思います。

この場合は、Zabbixサーバー、Zabbixエージェント両方のTimeoutの値を
伸ばしてみてください。

ユーザー kinococo の写真

確認結果の投稿が遅くなり申し訳ありません。

エージェント側のデバッグレベルを上げてログを確認しましたが、処理がスキップされている時間帯はそもそもログが出力されませんでした。
また、Server側の負荷を確認しましたが、pollerプロセスについてはsystem.runの設定前と後で変わらず70パーセント程度の負荷でした。

最初の情報に記載すべきでしたが、この環境は2サーバから同時に該当のsystem.runを実行していたため、
片系のsystem.runを無効化したところ、処理がスキップされるということがなくなりました。

そのため、zabbix_agentd.confのStartAgentsの数を増やしたところ、
処理がスキップされることがなくなりました。

広瀬様、TNK様、ご回答いただきありがとうございました。