Zabbixで監視設定や設定後に監視データを取得している際、監視設定が反映されるまでの時間や、監視データを取得するまでの時間に、違和感を感じたことはないだろうか。
今回は、そんなZabbixの時間にまつわる話で疑問を解決します!
Zabbixの時間について知っておくべき理由
Zabbixの時間に関する挙動を調べるきっかけになったのが、Zabbixの管理画面(WebUI)で設定したら即時反映されると思っていたせいで、お客様に大変ご迷惑をかけてしまったからです(泣)
具体的には、試験中に障害イベントが発生しても、アクションが動作してメールを送信させないように、メンテナンスの設定を行ったのですが、設定した直後に試験を実施してしまい、大量にメールが送信されてしまいました。。
当時は知らなかったとは言え、お金を貰って仕事をしている限り、プロとして恥ずかしい…
また、Zabbixの時間について知らないと、メンテナンスやアクションだけではなく、正しくアイテムやトリガーの監視設定したはずのに、思った通りに監視データが取得できなかったり、障害イベントが発生しなかったりと、不思議に思うことが多々あるはずです。
この記事を読めば、あなたの疑問は一気に解決するでしょう!
設定が反映されるまでの時間は最大60秒
Zabbixの管理画面(WebUI)で設定してから反映されるまでに、”最大60秒“かかります。
この”最大60秒“という時間は、Zabbixの管理画面から設定した時間が反映されるまでの時間ですが、その中には当然、アイテムによる監視設定も含まれています。
よって、もし仮にアイテムの監視間隔を60秒と設定していれば、設定が更新されてから監視データが取得されるまでの時間は、設定が反映されるまでの時間と合わせて、タイミングによっては最大120秒かかることになります。
設定更新時間(最大60秒)+アイテムの監視間隔(最大60秒)=監視データの取得(最大120秒)
敢えて「最大」と書いているのは、設定の更新やアイテムの監視間隔は、Zabbixが処理するタイミングによって異なるからです。
逆に、タイミングさえ合えば最速2秒で監視データが取得できることもあるでしょう。
設定反映までの時間を変更(Zabbixサーバー側)
この”最大60秒“は、Zabbixサーバーの設定ファイル/etc/zabbix/zabbix_server.conf
の[CacheUpdateFrequency]パラメータで変更可能です。(デフォルトは60秒)
1 |
CacheUpdateFrequency=60 |
1秒~3600秒の範囲で設定できます。
ただし、更新間隔を短くするほどZabbixサーバーも負荷が上がりますのでご注意ください。
特に変更する必要がなければ、デフォルトのまま変更しないことをおすすめします。
詳しい設定方法は、Zabbixの公式サイトをご覧ください。
アクティブチェック監視の設定は最大120秒
上記の更新間隔では、”最大60秒“かかると記述しましたが、中には特殊なものもあります。
ログ監視などアイテムの[タイプ]が[Zabbixエージェント(アクティブ)]、つまりアクティブチェックによる監視の場合は、設定反映までに”最大120秒“かかることをお忘れなく。
簡単に説明するなら、パッシブチェックの場合はZabbixサーバー側で設定を反映させるだけで良いのですが、アクティブチェックの場合は、Zabbixサーバーからエージェント側に設定を渡す必要があるためです。
Zabbixのアカウントをお持ちの方は、公式のナレッジをご覧ください。
設定反映までの時間を変更(Zabbixエージェント側)
アクティブチェック監視の反映時間を変更するには、Zabbixエージェント側の設定ファイルzabbix_agentd.conf
を開き、[RefreshActiveChecks]のパラメータを変更します。(デフォルトは120秒)
1 |
RefreshActiveChecks=120 |
60秒~3600秒の範囲で設定できます。
詳しくは公式サイトをご覧ください。
取得不可アイテムの更新間隔は最大600秒
こちらもログやファイル監視などでよく起こる問題ですが、監視データが取得できなかった場合に、アイテムのステータスが「取得不可」になることがあります。
取得不可になったアイテムの監視データを再取得するまでの間隔は、デフォルトで”最大600秒“かかります。
1度、アイテムのステータスが「取得不可」になると、[Unreachable Poller]という通常とは別のプロセスで監視するようになり、デフォルトでは[Unreachable Poller]のプロセス数が少ないので、キューが溜まって監視が遅延する原因にもなります。
取得不可アイテムの更新間隔を変更
LTS版でもZabbix 5.0と6.0では以下のように「取得不可アイテムの更新間隔」が異なるので注意が必要です。
Zabbixの管理画面から[管理] > [一般] > [その他]に遷移し、[取得不可アイテムの更新間隔(秒)]で設定する。
Zabbix 6.0では取得不可アイテムの更新間隔の設定が廃止になり、アイテムで設定した監視間隔と同じ。
時間ベースのトリガー関数は30秒毎
基本的にアイテムのデータ取得間隔毎にトリガーが計算されますが、アイテムの監視間隔に関係なく、”30秒毎“に再計算されるトリガーがあります。
それが時間ベースのトリガー関数です!
時間ベースの関数は、nodata()、date()、dayofmonth()、dayofweek()、time()、now() です。
引用:3 Trigger
これらは、Zabbix 履歴同期プロセスによって 30 秒ごとに再計算されます。
時間ベースのトリガー関数とは、次に紹介する日時関数に加えてnodata()
も含まれます。
時間関数
時間関数とは、トリガーで日付や時間を評価する場合に利用しています。
関数 | 説明 | 設定例 |
---|---|---|
date | YYYYMMDD 形式の現在日付 | 例: => date()<20220101 |
dayofmonth | 1 から 31 の範囲の日 | 例: => dayofmonth()=1 |
dayofweek | 1 から 7 の範囲の曜日 (月 – 1, 日 – 7). | 例: => dayofweek()<6 |
now | エポックからの秒数 (00:00:00 UTC, January 1, 1970). | 例: => now()<1640998800 |
time | HHMMSS 形式の現在時刻 | 例: => time()>000000 and time()<060000 |
これらのトリガー関数が意外に曲者です。
例えば、上記のtime()
関数の設定例の通りにトリガーの条件式を設定したとします。
トリガー条件式では、0時~6時までの間に計算するように見えますが、実はそれ以外の時間でも30秒毎に再計算されているので、「障害イベント生成モード」を「複数」にする条件式を含む場合に、障害が発生すると、アイテムの監視間隔+30秒毎に障害イベントが発生し続けてしまいます。
つまり、アイテムの監視間隔を60秒、time()
関数で60秒間(0時0分~0時1分)を指定すると、同じ障害イベントが3件発生することになりますので注意が必要です。
まとめ
Zabbixの時間については、今回紹介した以下の4点を頭に入れて設定作業を行えば、挙動がおかしいと思って焦る心配がなくなります!
- 設定が反映されるまでの時間は最大60秒
- アクティブチェック監視の設定は最大120秒
- 取得不可アイテムの更新間隔は最大600秒
- 時間ベースのトリガー関数は30秒毎
ぜひ、上記を踏まえて監視設定をしてみてください!
コメント
コメント一覧 (3件)
> タイミングによっては最大120分かかることになります。
もしかして、最大120秒ですか?
ご存知かもしれませんが、Zabbixは負荷を分散させるために、監視間隔を少しずつズラして監視しています。(監視間隔が定期設定または例外設定を除く)
ですので、例えば毎分0秒(0:00、1:00、2:00…)に監視しているとして、設定が反映される時間が毎分1秒(0:01、1:01、2:01)だとすると、設定が反映されてから次の値を取得するまで59秒かかることになります。
逆に、毎分59秒に設定が反映されるとしたら、1秒後には新しい設定でデータを取得するわけです。
設定の更新間隔も60秒(デフォルト)ですので、上記と同じようなことが言え、新しい設定でデータを取得するまでに120秒(仮にこの例だと59秒+59秒=118秒)かかるという意味です。
逆に早ければ、2秒後に新しい設定でデータが取得できる場合があります。(0:01に設定反映、0:02に値取得)
あまりこういったことはありませんが、設定が反映されなくても焦らず気長に待ってみてくださいとの意図で書かせていただきました。
「分」と「秒」の違いをご指摘いただいたのですね…
ありがとうございます!
誤字でした。申し訳ございません。