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秒)
CacheUpdateFrequency=60
1秒~3600秒の範囲で設定できます。
ただし、更新間隔を短くするほど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の管理画面から[管理] > [一般] > [その他]に遷移し、[取得不可アイテムの更新間隔(秒)]で設定する。
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秒毎
ぜひ、上記を踏まえて監視設定をしてみてください!
- Original:https://minory.org/zabbix-time.html
- Source:Minory
- Author:管理者