サイトアイコン IT NEWS

【必読!】Zabbixの時間にまつわる話

Zabbixで監視設定や設定後に監視データを取得している際、監視設定が反映されるまでの時間や、監視データを取得するまでの時間に、違和感を感じたことはないだろうか。
今回は、そんなZabbix時間にまつわる話で疑問を解決します!

Zabbixの時間について知っておくべき理由

Zabbix時間に関する挙動を調べるきっかけになったのが、Zabbixの管理画面(WebUI)で設定したら即時反映されると思っていたせいで、お客様に大変ご迷惑をかけてしまったからです(泣)

具体的には、試験中に障害イベントが発生しても、アクションが動作してメールを送信させないように、メンテナンスの設定を行ったのですが、設定した直後に試験を実施してしまい、大量にメールが送信されてしまいました。。

管理者

当時は知らなかったとは言え、お金を貰って仕事をしている限り、プロとして恥ずかしい…

また、Zabbix時間について知らないと、メンテナンスやアクションだけではなく、正しくアイテムやトリガーの監視設定したはずのに、思った通りに監視データが取得できなかったり、障害イベントが発生しなかったりと、不思議に思うことが多々あるはずです。
この記事を読めば、あなたの疑問は一気に解決するでしょう!

Zabbixの時間について知っていれば、何があっても焦らず対応できるはずです!

設定が反映されるまでの時間は最大60秒

Zabbixの管理画面(WebUI)で設定してから反映されるまでに、”最大60秒“かかります。
この”最大60秒“という時間は、Zabbixの管理画面から設定した時間が反映されるまでの時間ですが、その中には当然、アイテムによる監視設定も含まれています。

よって、もし仮にアイテムの監視間隔を60秒と設定していれば、監視データが取得されるまでの時間は、設定が反映されるまでの時間と合わせて、タイミングによっては最大120分かかることになります。

設定更新時間(最大60秒)+アイテムの監視間隔(最大60秒)=監視データの取得(最大120秒)

敢えて「最大」と書いているのは、設定の更新やアイテムの監視間隔は、Zabbixが処理するタイミングによって異なるからです。
逆に、タイミングさえ合えば最速2秒で監視データが取得できることもあるでしょう。

設定反映までの時間を変更(Zabbixサーバー側)

この”最大60秒“は、Zabbixサーバーの設定ファイル/etc/zabbix/zabbix_server.confの[CacheUpdateFrequency]パラメータで変更可能です。(デフォルトは60秒

CacheUpdateFrequency=60

1秒~3600秒の範囲で設定できます。
ただし、更新間隔を短くするほどZabbixサーバーも負荷が上がりますのでご注意ください。
特に変更する必要がなければ、デフォルトのまま変更しないことをおすすめします。

出典:Zabbix serverの設定 – CacheUpdateFrequency – 誰でも ZABBIX

詳しい設定方法は、Zabbixの公式サイトをご覧ください。

アクティブチェック監視の設定は最大120秒

上記の更新間隔では、”最大60秒“かかると記述しましたが、中には特殊なものもあります。
ログ監視などアイテムの[タイプ]が[Zabbixエージェント(アクティブ)]、つまりアクティブチェックによる監視の場合は、設定反映までに”最大120秒“かかることをお忘れなく。

簡単に説明するなら、パッシブチェックの場合はZabbixサーバー側で設定を反映させるだけで良いのですが、アクティブチェックの場合は、Zabbixサーバーからエージェント側に設定を渡す必要があるためです。

Zabbixのアカウントをお持ちの方は、公式のナレッジをご覧ください。

設定反映までの時間を変更(Zabbixエージェント側)

アクティブチェック監視の反映時間を変更するには、Zabbixエージェント側の設定ファイルzabbix_agentd.confを開き、[RefreshActiveChecks]のパラメータを変更します。(デフォルトは120秒)

RefreshActiveChecks=120

60秒~3600秒の範囲で設定できます。
詳しくは公式サイトをご覧ください。

取得不可アイテムの更新間隔は最大600秒

こちらもログやファイル監視などでよく起こる問題ですが、監視データが取得できなかった場合に、アイテムのステータスが「取得不可」になることがあります。
取得不可になったアイテムの監視データを再取得するまでの間隔は、デフォルトで”最大600秒“かかります。

1度、アイテムのステータスが「取得不可」になると、[Unreachable Poller]という通常とは別のプロセスで監視するようになり、デフォルトでは[Unreachable Poller]のプロセス数が少ないので、キューが溜まって監視が遅延する原因にもなります。

取得不可アイテムの更新間隔を変更

LTS版でもZabbix 5.0と6.0では以下のように「取得不可アイテムの更新間隔」が異なるので注意が必要です。

Zabbix 5.0

Zabbixの管理画面から[管理] > [一般] > [その他]に遷移し、[取得不可アイテムの更新間隔(秒)]で設定する。

Zabbix 6.0

Zabbix 6.0では取得不可アイテムの更新間隔の設定が廃止になり、アイテムで設定した監視間隔と同じ。

時間ベースのトリガー関数は30秒毎

基本的にアイテムのデータ取得間隔毎にトリガーが計算されますが、アイテムの監視間隔に関係なく、”30秒毎“に再計算されるトリガーがあります。
それが時間ベースのトリガー関数です!

時間ベースの関数は、nodata()、date()、dayofmonth()、dayofweek()、time()、now() です。
これらは、Zabbix 履歴同期プロセスによって 30 秒ごとに再計算されます。

引用:3 Trigger

時間ベースのトリガー関数とは、次に紹介する日時関数に加えてnodata()も含まれます。

時間関数

時間関数とは、トリガー日付や時間を評価する場合に利用しています。

関数説明設定例
dateYYYYMMDD 形式の現在日付例:
=> date()<20220101
dayofmonth1 から 31 の範囲の日例:
=> dayofmonth()=1
dayofweek1 から 7 の範囲の曜日 (月 – 1, 日 – 7).例:
=> dayofweek()<6
nowエポックからの秒数 (00:00:00 UTC, January 1, 1970).例:
=> now()<1640998800
timeHHMMSS 形式の現在時刻例:
=> time()>000000 and time()<060000
出典:3 日時関数

これらのトリガー関数が意外に曲者です。
例えば、上記のtime()関数の設定例の通りにトリガーの条件式を設定したとします。
トリガー条件式では、0時~6時までの間に計算するように見えますが、実はそれ以外の時間でも30秒毎に再計算されているので、「障害イベント生成モード」を「複数」にする条件式を含む場合に、障害が発生すると、アイテムの監視間隔+30秒毎に障害イベントが発生し続けてしまいます。

つまり、アイテムの監視間隔を60秒、time()関数で60秒間(0時0分~0時1分)を指定すると、同じ障害イベントが3件発生することになりますので注意が必要です。

まとめ

Zabbixの時間については、今回紹介した以下の4点を頭に入れて設定作業を行えば、挙動がおかしいと思って焦る心配がなくなります!

ぜひ、上記を踏まえて監視設定をしてみてください!

モバイルバージョンを終了