Table of Contents

12 トリガー

トリガーは論理条件式として定義され、システム状態を表します。

トリガーのステータス(条件式)は、Zabbixサーバがこの条件式で使用されている値を新しく受信するたびに再計算されます。nodata()などの時間ベースの関数が条件式で使用される場合、30秒ごとに再計算されます。条件式に使用できる値を以下に示します。

説明
障害(PROBLEM) 通常は、何かが発生したことを意味します。たとえば、プロセッサロードアベレージが非常に高い場合です。比較的古いバージョンのZabbixでは障害(TRUE)になります。
正常(OK) 通常のトリガー状態です。比較的古いバージョンのZabbixでは正常(FALSE)になります。
不明 この場合、Zabbixはトリガー条件式を評価できません。以下の原因が考えられます。
サーバから応答がない
トリガー条件式を評価できない
トリガー条件式が最近変更された

3.3トリガーの条件式

トリガーで使用する条件式は非常に細かい指定も可能であり、監視する統計情報に関して複雑な論理テストを作成できます。トリガーでは以下の演算子がサポートされています(実行プライオリティの高い順)

プライオリティ 演算子 定義
1 / 除算
2 * 乗算
3 - 減算
4 + 加算
5 < より小さい
6 > より大きい
7 # 等しくない。この演算子は以下の式で定義されています。
A=B ⇔ (A<B-0.000001) | (A>B+0.000001)
8 = 等しい。この演算子は以下の式で定義されています。
A=B ⇔ (A>B-0.000001) & (A<B+0.000001)
9 & 論理積
10 | 論理和

3.4トリガー関数

以下の関数がサポートされています。

全ての関数は数値のみを返します。たとえば、文字列との比較はサポートされません。
関数 引数 サポートされる値のタイプ 定義
abschange 無視 浮動小数、整数、文字列、テキスト、ログ 最新値と前回値の差を絶対値で返します。
文字列の場合は以下の値を返します。
0 - 値が等しい
1 - 値が異なる
avg 秒数または回数 浮動小数、整数 期間内の平均値を返します。パラメータには期間の長さ(秒単位)を指定します。
関数は2番目の省略可能なパラメータtime_shiftを使用できます。現在の平均値と、time_shift秒遡った平均値を比較する必要がある場合に便利です。たとえば、avg(3600,86400)は1日前の1時間の平均値を返します。
パラメータtime_shiftはZabbix 1.8.2以降でサポートされています。
change 無視 浮動小数、整数、文字列、テキスト、ログ 最新値と前回値の差を返します。
文字列の場合は以下の値を返します。
0 - 値が等しい
1 - 値が異なる
count 秒数または回数 浮動小数、整数、文字列、テキスト、ログ 期間内(秒単位)のヒストリ値の数またはコンディションを満たすlast(回数)値の数を返します。
関数は、2番目の省略可能なパラメータpattern、3番目のパラメータoperation、4番目のパラメータtime_shiftを利用できます。
例:
count(600,12)はヒストリに保存されている値のうち「12」の出現回数を返します。
整数アイテム: 正確に一致
浮動小数: 値が±0.00001の許容範囲内にあれば一致とみなします。
like (デフォルト)、eq、neなどの演算子がサポートされます。サポートされる演算子は以下のとおりです。
サポートされている演算子:
eq - 等しい
ne – 等しくない
gt – より大きい
ge – 以上
lt – 未満
le – 以下
like (テキスト検索のみ) - 値にパターンが含まれれば一致とみなします。
例:
count(600,12,“gt”)は直近600秒の間にヒストリに保存されている値のうち「12」よりも大きい値の正確な出現回数を返します。
別の例:
count(#10,12,“gt”,86400)は、24時間前にヒストリに保存されている直近10個の値のうち「12」よりも大きい値の正確な出現回数を返します。
任意の値をカウントする必要がある場合、たとえば24時間前の直近600秒の場合はcount(600,,,86400)を使用します。
#numのパラメータはZABBIX 1.6.1以降でサポートされています。
パラメータtime_shiftはZabbix 1.8.2以降でサポートされています。
date 無視 すべて 現在日付をYYYYMMDD形式で返します。
例: 20031025
dayofweek 無視 すべて 曜日を1(月曜日)から7(日曜日)までの範囲で返します。月曜 – 1、日曜 – 7.
delta 秒数または回数 浮動小数、整数 max()-min()と同じ値を返します。
Zabbix 1.8.2以降では、2番目の省略可能なパラメータtime_shiftがサポートされています。使用例については関数avgを参照してください。
diff 無視 浮動小数、整数、文字列、テキスト、ログ 以下の値を返します。
1 - 最新値と前回値が異なる
0 - それ以外
fuzzytime 秒数 浮動小数、整数 タイムスタンプ(アイテムの値)とZabbixサーバ時刻の差がN秒以内なら1、それ以外なら0を返します。
通常はsystem.localtimeと組み合わせて、ローカル時刻とZabbixサーバのローカル時刻が同期しているかどうかをチェックします。
iregexp 1番目 - 文字列
2番目 - 秒数または#回数
文字列、ログ、テキスト この関数はregexpに類似していますが、大文字と小文字は区別されません。
last 秒数
回数
浮動小数、整数、文字列、テキスト、ログ 最新値を返します。以下のパラメータを使用します。
秒数 - 無視
#回数 - N番目の値
例:
last(0) - 常にlast(#1)と等しい
last(#3) - 3番目に新しい値
関数は2番目の省略可能なパラメータtime_shiftを受け入れます。例:
たとえば、last(0,86400)は1日前の直近の値を返します。
ヒストリの1秒以内に2つ以上の値が存在する場合、値の正確な順序は保証されません。
回数のパラメータはZABBIX 1.6.2以降でサポートされています。
パラメータtime_shiftはZabbix 1.8.2以降でサポートされています。
logseverity 無視 log 最終ログエントリの深刻度を返します。パラメータは無視されます。
0 - デフォルトの深刻度
N - 深刻度(整数、Windowsイベントログの場合に有効)。ZABBIXはWindowsイベントログのフィールド情報からログの深刻度を取得します。
logsource 文字列 log 最終ログエントリの[ソース]がパラメータと一致するかどうかをチェックします。
0 - 一致しない
1 - 一致する
通常は、Windowsイベントログのチェックに使用します。例: logsource(“VMWare Server”)
max 秒数または回数 浮動小数、整数 期間内の最大値を返します。パラメータには期間の長さ(秒単位)を指定します。
Zabbix 1.8.2以降では、2番目の省略可能なパラメータtime_shiftがサポートされています。使用例については関数avgを参照してください。
min 秒数または回数 浮動小数、整数 期間内の最小値を返します。パラメータには期間の長さ(秒単位)を指定します。
Zabbix 1.8.2以降では、2番目の省略可能なパラメータtime_shiftがサポートされています。使用例については関数avgを参照してください。
nodata 秒数 すべて 以下の値を返します。
1 - 期間内(秒単位)にデータを1つも受信しない場合。期間として30秒以上の値を指定する必要があります。
0 - それ以外
now 無視 すべて エポック(1970年1月1日00時00分00秒UTC)を起点とした経過秒数を返します。
prev 無視 浮動小数、整数、文字列、テキスト、ログ 前回値を返します。パラメータは無視されます。
last(#2)と同じ
regexp 1番目 - 文字列
2番目 - 秒数または#回数
文字列、ログ、テキスト 最新値が正規表現と一致するかどうかをチェックします。パラメータにはPosix形式の正規表現を指定します。
省略可能な2番目のパラメータでは、分析する秒数または行数を指定します。この場合、複数の値が処理されます。
大文字と小文字は区別されます。
以下の値を返します。
1 - 見つかった
0 - それ以外
str 1番目 - 文字列
2番目 - 秒数または#回数
文字列、ログ、テキスト 最新値で文字列を検索します。パラメータには検索する文字列を指定します。大文字と小文字は区別されます。
省略可能な2番目のパラメータでは、分析する秒数または行数を指定します。この場合、複数の値が処理されます。
以下の値を返します。
1 - 見つかった
0 - それ以外
sum 秒数または回数 浮動小数、整数 期間内の値の合計値を返します。パラメータには期間の長さ(秒単位)を指定します。
Zabbix 1.8.2以降では、2番目の省略可能なパラメータtime_shiftがサポートされています。使用例については関数avgを参照してください。
time 無視 すべて 現在の時刻を返します。例: 123055
一部の関数は数値以外のパラメータには使用できません。

数値関数のほとんどは、引数として秒数を受け取ります。プリフィクス「#」を使用して、引数に別の意味を持たせることもできます。

引数 定義
sum(600) 600秒間の全ての値の合計値
sum(#5) 直近5個の値の合計値

トリガーでは以下の定数がサポートされています。

定数 定義
<number> 正の浮動小数点。
例: 0, 1, 0.15, 123.55
<number><K | M | G> K – 1024*N
M – 1024*1024*N
G – 1024*1024*1024*N
例: 2K, 4G, 0.5M

基本的な条件式の記述方法は次の形式です: {<server>:<key>.<function>(<parameter>)}<operator><const> パラメータを無視する関数にもパラメータを設定する必要があります。例: last(0)

例1

www.zabbix.comのプロセッサロードアベレージが高すぎる状態を検出する条件式

{www.zabbix.com:system.cpu.load[all,avg1].last(0)}>5 ‘www.zabbix.com:system.cpu.load[all,avg1]’は監視するパラメータの簡易名です。サーバが「www.zabbix.com」、監視するキーが「system.cpu.load[all,avg1]」であることを指定します。関数「last()」は、最新の値を参照することを意味します。「>5」は、www.zabbix.comの最新のプロセッサロードアベレージが5より大きい場合にトリガーが障害になることを意味します。

例2

www.zabbix.comが過負荷であることを検出する条件式

{www.zabbix.com:system.cpu.load[all,avg1].last(0)}>5|{www.zabbix.com:system.cpu.load[all,avg1].min(600)}>2 この条件式は、現在のプロセッサロードアベレージが5より大きいか、または直近10分間のプロセッサロードアベレージが2より大きい場合に障害になります。

例3

/etc/passwdが変更されたことを検出する条件式

Use of function diff: {www.zabbix.com:vfs.file.cksum[/etc/passwd].diff(0)}>0 この条件式は、/etc/passwdのチェックサムの前回値が最新値と異なる場合に障害になります。

同様の式を使用して、/etc/passwd、/etc/inetd.conf、/kernelなどの重要なファイルの変更を監視できます。

例4

誰かがインターネットから大きいサイズのファイルをダウンロードしていることを検出する条件式

min関数を使用します: {www.zabbix.com:net.if.in[eth0,bytes].min(300)}>100K この条件式は、直近5分間にeth0で受信したバイト数が100KBを超えた場合に障害になります。

例5

クラスタ化されたSMTPサーバのノードが2つとも停止したことを検出する条件式

2つの異なるホストを1つの条件式に使用します: {smtp1.zabbix.com:net.tcp.service[smtp].last(0)}=0&{smtp2.zabbix.com:net.tcp.service[smtp].last(0)}=0 この条件式は、smtp1.zabbix.comとsmtp2.zabbix.comの両方でSMTPサーバが停止した場合に障害になります。

例6

Zabbixエージェントをアップグレードする必要があることを検出する条件式

str()関数を使用します: {zabbix.zabbix.com:agent.version.str(beta8)}=1 この条件式は、ZABBIXエージェントのバージョンがbeta8(おそらく1.0beta8)である場合に障害になります。

例7

サーバとの疎通がなくなったことを検出する {zabbix.zabbix.com:status.last(0)}=2 <note>「status」は、指定されたホストに少なくとも1つの監視パラメータが存在する場合にのみ計算される特殊パラメータです。詳細については、「status」の説明を参照してください。

例8

直近3分間で一度もハートビートを受信しなかったことを検出する条件式

nodata()を使用します: {zabbix.zabbix.com:tick.nodata(180)}=1 「tick」のタイプには「Zabbixトラッパー」を選択します。このトリガーを使用するには、アイテム「tick」を定義する必要があります。ホストはzabbix_senderを使用して、このパラメータのデータを定期的に送信する必要があります。180秒間データを受信しないと、トリガーの値が障害になります。

例9

夜間のCPU使用率を監視する条件式

time()関数を使用します: {zabbix:system.cpu.load[all,avg1].min(300)}>2&{zabbix:system.cpu.load[all,avg1].time(0)}>000000&{zabbix:system.cpu.load[all,avg1].time(0)}<060000 このトリガーが障害になるのは、夜間(00:00~06:00)だけです。

3.5トリガーの依存関係

トリガーの依存関係を使用して、トリガー間の関係を定義できます。

トリガーの依存関係は、複数のリソースをソースとするイベントが発生した場合に送信されるメッセージの数を制限できる便利な手段です。

たとえば、ホストHostがルータRouter2の背後にあり、Router2がRouter1の背後にあるとします。Zabbix - Router1 - Router2 - Host もしRouter1が停止すると、当然HostとRouter2は応答なしになります。しかし、この場合にHost、Router1、Router2のそれぞれに関する通知を全て受信する必要はありません。トリガーの依存関係を使用するとこの問題を解決できます。

個の場合、次のようみトリガーの依存関係を設定します: トリガー「Host is down」はトリガー「Router2 is down」に依存し、トリガー「Router2 is down」はトリガー「Router1 is down」に依存します。 Zabbixはトリガー「Host is down」のステータスを変更する前に、該当するトリガーの依存関係が定義されているかどうかをチェックします。定義されている場合、依存するトリガーの少なくとも1つが障害なら、変更しようとしたトリガーのステータスは変更されず、アクションの実行や通知の送信も行われません。

Zabbixはこのチェックを再帰的に実行します。つまり、Router1またはRouter2のいずれかが応答なしの場合、Hostのトリガーは更新されません。

3.6トリガーの深刻度

トリガーの深刻度は、トリガーの重要性を定義します。サポートされているトリガーの深刻度を以下に示します。

深刻度 定義
未分類 不明な深刻度です。 灰色
情報 情報目的です。 明るい緑
警告 注意を促します。 明るい黄色
軽度の障害 軽度の障害が発生しています。 暗い赤
重度の障害 何らかの重大な障害が発生しています。
致命的な障害 致命的な障害が発生しています。財務上の損失などが考えられます。 明るい赤

深刻度には以下の用途があります。

3.7ヒストリ

トリガーの状態ごとに異なるコンディションを設定する必要がある場合があります。たとえば、サーバ室の温度が20℃を超えたときに障害になり、その後は15℃を下回るまで障害を維持するトリガーを定義する場合を考えます。

この場合、以下のトリガーを定義します。

例1

サーバ室の温度が高すぎる状態を検出する条件式

({TRIGGER.VALUE}=0&{server:temp.last(0)}>20)| ({TRIGGER.VALUE}=1&{server:temp.last(0)}>15) {TRIGGER.VALUE}の使用方法に注意してください。このマクロは現在のトリガー値を返します。