4 ヒストリ関数

ここに記載されているすべての関数は、以下でサポートされています:

関数は追加情報なしでリストされています。 関数をクリックすると詳細が表示されます。

関数 説明
change 前回の値と最新の値の差分。
changecount 定義された評価期間内で隣接する値の変化回数。
count 定義された評価期間内の値の数。
countunique 定義された評価期間内のユニークな値の数。
find 定義された評価期間内で値の一致を検索。
first 定義された評価期間内の最初(最も古い)の値。
firstclock 定義された評価期間内の最初(最も古い)の値のタイムスタンプ。
fuzzytime パッシブエージェントの時刻がZabbixサーバー/プロキシの時刻とどれだけ異なるかをチェック。
last 最新の値。
lastclock 定義された評価期間内のN番目に新しい値のタイムスタンプ。
logeventid 最後のログエントリのイベントIDが正規表現に一致するかをチェック。
logseverity 最後のログエントリのログ重大度。
logsource 最後のログエントリのログソースが正規表現に一致するかをチェック。
logtimestamp N番目に新しいログアイテム値のログメッセージタイムスタンプ。
monodec 値が単調減少しているかをチェック。
monoinc 値が単調増加しているかをチェック。
nodata データが受信されていないかをチェック。
percentile 期間のPパーセンタイル(Pは3番目のパラメータで指定)。
rate 定義された期間内で単調増加カウンタの1秒あたりの平均増加率。
共通パラメータ
  • /host/keyは、ホストアイテムの履歴を参照する関数の共通必須の最初のパラメータです
  • (sec|#num)<:time shift>は、ホストアイテムの履歴を参照する関数の共通の2番目のパラメータで、以下のようになります:
    • sec - 最大評価期間(秒単位、サフィックスが使用可能)、または
    • #num - 最新の収集値の最大評価範囲(ハッシュ記号が前に付く場合)
    • time shift(オプション)は、評価ポイントを過去に移動することができます。 タイムシフトの指定方法については詳細をご覧ください。

関数の詳細

関数パラメータに関する一般的な注意事項:

  • 関数パラメータはカンマで区切ります
  • オプションの関数パラメータ(またはパラメータの一部)は< >で示します
  • 関数固有のパラメータは各関数で説明します
  • /host/keyおよび(sec|#num)<:time shift>パラメータは引用符で囲まないでください
change(/host/key)

前回の値と最新の値の差分。
サポートされる値の型: Float, Integer, String, Text, Log
文字列の場合は、0 - 値が等しい; 1 - 値が異なる。

パラメータ: 共通パラメータを参照。

コメント:

  • 数値の差分は、以下のような受信値の例で計算されます(「前回」と「最新」の値 = 差分):
    '1' と '5' = +4
    '3' と '1' = -2
    '0' と '-2.5' = -2.5
  • トリガーでは、急激なスパイク(またはドロップ)、カウンタリセット、数値状態の遷移を検出するのに便利です。
  • 比較には abs も参照してください。

例:

change(/host/system.uptime)<0 #前回の値からシステムの稼働時間がマイナスになった(再起動を示す)
change(/host/system.cpu.load[all,avg1])>2 #CPUロード(1分間)が前回の値から2以上増加した
change(/host/vfs.fs.size[/,free])<-1G #チェック間で空きディスク容量が1GB以上減少した
changecount(/host/key,(sec|#num)<:time shift>,<mode>)

定義された評価期間内で隣接する値間の変化回数。
サポートされる値の型: Float, Integer, String, Text, Log

パラメータ:

  • 共通パラメータを参照
  • mode (ダブルクォーテーションで囲む必要あり) - 指定可能な値: all - すべての変化をカウント(デフォルト); dec - 減少のみカウント; inc - 増加のみカウント

コメント:

  • 数値以外の値の型の場合、modeパラメータは無視されます。
  • トリガーでは、頻繁な状態変化(不安定さを示す)を検出するのに便利です。

例:

changecount(/host/icmpping,10m)>5 #10分間にpingの状態が5回以上変化した
changecount(/host/vfs.file.contents["/sys/class/net/eth0/operstate"],1h)>5 #eth0のoperational stateが1時間に5回以上変化した
changecount(/host/proc.num[httpd],15m)>10 #httpdプロセス数が15分間に10回以上変化した
changecount(/host/key,#10,"inc") #直近10個の値の中で値が増加した回数(隣接値と比較)
changecount(/host/key,24h,"dec") #現在までの直近24時間で値が減少した回数(隣接値と比較)
count(/host/key,(sec|#num)<:time shift>,<operator>,<pattern>)

定義された評価期間内の値の数。
サポートされている値のタイプ: Float, Integer, String, Text, Log

パラメータ:

  • 共通パラメータを参照
  • operator (ダブルクォーテーションで囲む必要あり) サポートされているoperator:
    eq - 等しい (integer, floatのデフォルト)
    ne - 等しくない
    gt - より大きい
    ge - 以上
    lt - より小さい
    le - 以下
    like (string, text, logのデフォルト) - パターンを含む場合に一致 (大文字小文字を区別)
    bitand - ビット単位のAND
    regexp - patternで指定された正規表現に大文字小文字を区別して一致
    iregexp - patternで指定された正規表現に大文字小文字を区別せずに一致
  • pattern - 必要なパターン (文字列引数はダブルクォーテーションで囲む必要あり)

コメント:

  • Floatアイテムは2.22e-16の精度で一致します。
  • likeはinteger値のoperatorとしてサポートされていません。
  • likeおよびbitandはfloat値のoperatorとしてサポートされていません。
  • string, text, log値にはeq, ne, like, regexp, iregexpのみがサポートされます。
  • operatorにbitandを指定した場合、4番目のpatternパラメータは「/」で区切った2つの数値(number_to_compare_with/mask)として指定できます。 count()は値とmaskの「ビット単位のAND」を計算し、その結果をnumber_to_compare_withと比較します。 「ビット単位のAND」の結果がnumber_to_compare_withと等しい場合、その値がカウントされます。
    number_to_compare_withmaskが等しい場合は、maskのみを指定できます(「/」なし)。
  • operatorにregexpまたはiregexpを指定した場合、4番目のpatternパラメータは通常の正規表現またはグローバル (「@」で始まる)正規表現を指定できます。 グローバル正規表現の場合、大文字小文字の区別はグローバル正規表現の設定を継承します。 regexpマッチングの目的で、float値は常に「.」の後に4桁の小数で表現されます。 また、大きな数値の場合、10進数(データベースに保存)と2進数(Zabbixサーバーで使用)の表現の違いが4桁目の小数に影響する場合があります。

例:

count(/host/icmpping,30m,,"0")>5 #30分間でpingが5回以上失敗した場合
count(/host/key,10m,"like","error") #直近10分間で「error」を含む値の数
count(/host/key,10m,,12) #直近10分間で「12」と等しい値の数
count(/host/key,10m,"gt",12) #直近10分間で「12」より大きい値の数
count(/host/key,#10,"gt",12) #直近10個の値の中で「12」より大きい値の数
count(/host/key,10m:now-1d,"gt",12) #24時間前から24時間前+10分間の間で「12」より大きい値の数
count(/host/key,10m,"bitand","6/7") #直近10分間で下位3ビットが「110」(2進数)である値の数
count(/host/key,10m:now-1d) #24時間前から24時間前+10分間の間の値の数
countunique(/host/key,(sec|#num)<:time shift>,<operator>,<pattern>)

定義された評価期間内のユニークな値の数。
サポートされている値の型: Float, Integer, String, Text, Log

パラメータ:

  • 共通パラメータを参照
  • operator (ダブルクォーテーションで囲む必要があります)。 サポートされているoperator:
    eq - 等しい (integer, floatのデフォルト)
    ne - 等しくない
    gt - より大きい
    ge - 以上
    lt - より小さい
    le - 以下
    like (string, text, logのデフォルト) - パターンが含まれていれば一致 (大文字小文字を区別)
    bitand - ビットAND
    regexp - patternで指定された正規表現に大文字小文字を区別して一致
    iregexp - patternで指定された正規表現に大文字小文字を区別せずに一致
  • pattern - 必要なパターン (文字列引数はダブルクォーテーションで囲む必要があります)

コメント:

  • Floatアイテムは2.22e-16の精度で一致します。
  • integer値のoperatorとしてlikeはサポートされていません。
  • float値のoperatorとしてlikeおよびbitandはサポートされていません。
  • string, text, log値にはeq, ne, like, regexp, iregexpのみがサポートされています。
  • operatorにbitandを指定した場合、4番目のpatternパラメータは「/」で区切った2つの数値、number_to_compare_with/maskとして指定できます。countunique()は値とmaskの「ビットAND」を計算し、その結果をnumber_to_compare_withと比較します。 「ビットAND」の結果がnumber_to_compare_withと等しい場合、その値はカウントされます。
    number_to_compare_withmaskが等しい場合は、maskのみを指定できます(「/」なし)。
  • operatorにregexpまたはiregexpを指定した場合、4番目のpatternパラメータは通常の正規表現またはグローバル(「@」で始まる)正規表現を指定できます。 グローバル正規表現の場合、大文字小文字の区別はグローバル正規表現の設定を継承します。 regexpマッチングの目的で、float値は常に「.」の後に4桁の小数で表現されます。 また、大きな数値の場合、10進数(データベースに格納)と2進数(Zabbixサーバーで使用)の表現の違いにより、小数点以下4桁目に影響が出る場合があります。

例:

countunique(/host/key,10m) #直近10分間のユニークな値の数
countunique(/host/key,10m,"like","error") #直近10分間で「error」を含むユニークな値の数
countunique(/host/key,10m,,12) #直近10分間で「12」と等しいユニークな値の数
countunique(/host/key,10m,"gt",12) #直近10分間で「12」より大きいユニークな値の数
countunique(/host/key,#10,"gt",12) #直近10個の値の中で「12」より大きいユニークな値の数
countunique(/host/key,10m:now-1d,"gt",12) #24時間前から24時間前+10分までの間で「12」より大きいユニークな値の数
countunique(/host/key,10m,"bitand","6/7") #直近10分間で下位3ビットが「110」(2進数)となるユニークな値の数
countunique(/host/key,10m:now-1d) #24時間前から24時間前+10分までの間のユニークな値の数
find(/host/key,(sec|#num)<:time shift>,<operator>,<pattern>)

定義された評価期間内で値の一致を検索します。
サポートされている値の型: Float, Integer, String, Text, Log
戻り値: 1 - 見つかった場合; 0 - それ以外の場合。

パラメータ:

  • 共通パラメータを参照
  • sec または #num (省略可能) - 指定しない場合は最新値がデフォルト
  • operator (ダブルクォートで囲む必要あり) サポートされているoperator:
    eq - 等しい (integer, floatのデフォルト)
    ne - 等しくない
    gt - より大きい
    ge - 以上
    lt - より小さい
    le - 以下
    like (string, text, logのデフォルト) - patternで指定した文字列を含む場合に一致 (大文字小文字を区別)
    bitand - ビットAND
    regexp - patternで指定した正規表現に一致 (大文字小文字を区別)
    iregexp - patternで指定した正規表現に一致 (大文字小文字を区別しない)
  • pattern - 必要なパターン (文字列引数はダブルクォートで囲む必要あり); operatorregexpまたはiregexpの場合はPerl互換正規表現 (PCRE)の正規表現

コメント:

  • 複数の値が処理される場合、少なくとも1つ一致する値があれば'1'を返します。
  • integer値ではlikeはoperatorとしてサポートされません。
  • float値ではlikeおよびbitandはoperatorとしてサポートされません。
  • string, text, log値ではeq, ne, like, regexp, iregexpのみがサポートされます。
  • operatorにregexpまたはiregexpを指定した場合、4番目のpatternパラメータには通常の正規表現またはグローバル (先頭が'@')正規表現を指定できます。 グローバル正規表現の場合、大文字小文字の区別はグローバル正規表現の設定を継承します。

例:

find(/host/key,10m,"like","error") #直近10分間に'error'を含む値があるか検索
find(/host/agent.version,,"like","beta")=1 #Zabbixエージェントがベータ版、アップグレードが必要
find(/host/log[/var/log/nginx/access.log],,"regexp"," 500 ")=1 #内部Webサーバーエラーが検出された
first(/host/key,sec<:time shift>)

定義された評価期間内の最初(最も古い)の値。
サポートされている値の型: Float, Integer, String, Text, Log

パラメータ:

last()も参照。

例:

first(/host/key,1h) #現在までの直近1時間で最も古い値を取得
firstclock(/host/key,sec<:time shift>)

定義された評価期間内の最も古い値のタイムスタンプ。
サポートされる値の型: Float, Integer, String, Text, Log

パラメータ:

指定された期間にデータが収集されていない場合、関数はエラーで失敗します。

lastclock()も参照してください。

例:

firstclock(/host/key,1h) #直近1時間の最も古い値のタイムスタンプを取得
firstclock(/host/key,1h:now-24h) #1日前の直近1時間の最も古い値のタイムスタンプを取得
fuzzytime(/host/key,sec)

パッシブエージェントの時刻がZabbixサーバー/プロキシの時刻とどれだけ異なるかをチェックします。
サポートされる値の型: Float, Integer
戻り値: 1 - パッシブアイテムの値(タイムスタンプとして)とZabbixサーバー/プロキシのタイムスタンプ(値収集時のクロック)の差がsec秒以下の場合; 0 - それ以外の場合。

パラメータ:

コメント:

  • 通常、'system.localtime'アイテムと組み合わせて、ローカル時刻がZabbixサーバーのローカル時刻と同期しているかをチェックするために使用されます。注意 'system.localtime'はZabbixエージェントでパッシブチェックとして設定する必要があります。Zabbix agent 2ではアクティブチェックとして設定することもできます。
  • vfs.file.time[/path/file,modify]キーと組み合わせて、ファイルが長期間更新されていないことをチェックすることもできます。
  • この関数は複雑なトリガー式(複数のアイテムが関与する場合)での使用は推奨されません。予期しない結果を引き起こす可能性があるためです(時刻の差は最新のメトリックで測定されます)。例: fuzzytime(/Host/system.localtime,60s)=0 or last(/Host/trap)<>0

例:

fuzzytime(/host/system.localtime,5m)=0 #クライアントのローカル時刻がZabbixサーバー/プロキシの時刻と5分以上異なる
fuzzytime(/host/system.localtime,5m)=0 and nodata(/host/system.localtime,10m)=0 #クライアントのローカル時刻がZabbixサーバー/プロキシの時刻と5分以上異なる(アイテムがデータの報告を停止していないことを確認しながら)
last(/host/key,<#num<:time shift>>)

最新の値。
サポートされている値の型: Float, Integer, String, Text, Log

パラメータ:

コメント:

  • ハッシュタグ付きの期間(#N)は、他の多くの関数とは異なる動作をすることに注意してください。 例えば: last(/host/key)は常にlast(/host/key,#1)と等しい; last(/host/key,#3)は3番目に新しい値(最新の3つの値ではない)。
  • 1秒以内に2つ以上の値が履歴に存在する場合、Zabbixは値の正確な順序を保証しません。
  • first()も参照してください。

例:

last(/host/key) #最新の値を取得
last(/host/key,#2) #1つ前の値を取得
last(/host/key,#1)<>last(/host/key,#2) #最新の2つの値が異なる
lastclock(/host/key,<#num<:time shift>>)

定義された評価期間内でN番目に新しい値のタイムスタンプ。
サポートされる値の型: Float, Integer, String, Text, Log

パラメータ:

指定された期間にデータが収集されていない場合、またはN番目の値が収集されていない場合、関数はエラーで失敗します。

firstclock()も参照してください。

例:

lastclock(/host/key) #最新値のタイムスタンプを取得
lastclock(/host/key,#2) #2番目に新しい値のタイムスタンプを取得
now()-lastclock(/host/heartbeat.item)>300 #ハートビートアイテムが更新されてから5分以上経過している
lastclock(/host/system.cpu.load[all,avg1])-lastclock(/host/system.cpu.load[all,avg1],#2)>300 #直近2つの値の更新間隔が5分を超えている
((now()-lastclock(/host/system.cpu.load[all,avg1])<120 and last(/host/system.cpu.load[all,avg1])>5)) #CPU値が高く、値が新しい(2分未満)
logeventid(/host/key,<#num<:time shift>>,<pattern>)

最後のログエントリのイベントIDが正規表現に一致するかどうかを確認します。
サポートされている値の型: ログ
戻り値: 0 - 一致しない; 1 - 一致する。

パラメータ:

  • 共通パラメータを参照
  • #num (省略可能) - 最新からN番目の値
  • pattern (省略可能) - 必要なパターンを記述する正規表現、Perl互換正規表現 (PCRE)スタイル(文字列引数はダブルクォートで囲む必要があります)

例:

logeventid(/host/eventlog[Security],,"4625")=1 #IDが"4625"(認証失敗)に一致するログエントリが見つかった
logeventid(/host/eventlog[System],,"6008|41")=1 #IDが"6008"または"41"に一致するログエントリが見つかった
logseverity(/host/key,<#num<:time shift>>)

最後のログエントリのログ重大度。
サポートされている値の型: ログ
戻り値: 0 - デフォルトの重大度; N - 重大度(整数、Windowsイベントログに便利: 1 - Information, 2 - Warning, 4 - Error, 7 - Failure Audit, 8 - Success Audit, 9 - Critical, 10 - Verbose)。

パラメータ:

ZabbixはWindowsイベントログのInformationフィールドからログ重大度を取得します。

例:

logseverity(/host/log[/var/log/syslog],10m)>3 #重大度が"3"を超えるログエントリが見つかった
logseverity(/host/eventlog[System],10m)=4 #重大度が"Error"に等しいログエントリが見つかった
logsource(/host/key,<#num<:time shift>>,<pattern>)

最後のログエントリのログソースが正規表現に一致するかどうかを確認します。
サポートされている値の型: ログ
戻り値: 0 - 一致しない; 1 - 一致する。

パラメータ:

  • 共通パラメータを参照
  • #num (省略可能) - N番目に新しい値
  • pattern (省略可能) - 必要なパターンを記述する正規表現、Perl互換正規表現 (PCRE)スタイル(文字列引数はダブルクォーテーションで囲む必要があります)

通常、Windowsイベントログで使用されます。

例:

logsource(/host/eventlog[Application],,"MSSQLSERVER")=1 #ソースが"MSSQLSERVER"に一致するログエントリが見つかった
logsource(/host/eventlog[System],,"Service Control Manager")=1 #ソースが"Service Control Manager"に一致するログエントリが見つかった
logsource(/host/eventlog[System],,"Service Control Manager")=1 and logeventid(/host/eventlog[System],,"7031")=1 #ソースが"Service Control Manager"に一致し、イベントIDが"7031"に一致するログエントリが見つかった
logtimestamp(/host/key,<#num<:time shift>>)

N番目に新しいログアイテム値のログメッセージのタイムスタンプ。
サポートされる値の型: Log

パラメータ:

コメント:

  • タイムシフトの計算は、ログメッセージのタイムスタンプではなく、アイテム値のクロックに基づいて行われます;
  • 次の場合、関数はエラーで失敗します:
    • ログタイプ以外のアイテムが受信された場合;
    • 指定された期間にデータが収集されていない場合;
    • N番目の値が収集されていない場合;
    • ログメッセージにタイムスタンプ値が含まれていない場合。

例:

logtimestamp(/host/key) #最新のログメッセージのタイムスタンプを取得
logtimestamp(/host/key,#2) #2番目に新しいログメッセージのタイムスタンプを取得
logtimestamp(/host/key,#3:now-1d) #1日前の3番目に新しいログメッセージのタイムスタンプを取得
monodec(/host/key,(sec|#num)<:time shift>,<mode>)

値が単調減少しているかどうかを確認します。
サポートされている値の型: 整数
戻り値: 1 - 期間内のすべての要素が連続して減少している場合; 0 - それ以外の場合。

パラメータ:

  • 共通パラメータを参照
  • mode (ダブルクォーテーションで囲む必要あり) - weak (すべての値が前の値以下; デフォルト) または strict (すべての値が減少している)

例:

monodec(/host/system.swap.size[all,free],60s) + monodec(/host2/system.swap.size[all,free],60s) + monodec(/host3/system.swap.size[all,free],60s) #スワップの空き容量が減少したホスト数を計算
monodec(/host/proc.num[nginx],10m,"strict")=1 #nginxプロセス数が10分間単調減少している
monoinc(/host/key,(sec|#num)<:time shift>,<mode>)

値が単調増加しているかどうかを確認します。
サポートされている値の型: 整数
戻り値: 1 - 期間内のすべての要素が連続して増加している場合; 0 - それ以外の場合。

パラメータ:

  • 共通パラメータを参照
  • mode (ダブルクォーテーションで囲む必要あり) - weak (すべての値が前の値以上; デフォルト) または strict (すべての値が増加している)

例:

monoinc(/host/system.localtime,#3,"strict")=0 #システムのローカル時刻が一貫して増加していない
monoinc(/host/vfs.dir.count[/mnt/data/logs],24h,"weak")=0 #ファイル数が24時間停滞している場合にトリガー(増加が期待される)
nodata(/host/key,sec,<mode>)

データが受信されていないことをチェックします。
サポートされている値の型: 整数浮動小数点文字列テキストログ
戻り値: 指定した期間内にデータが受信されなかった場合は1、それ以外は0。

パラメータ:

  • 共通パラメータを参照
  • sec - この期間は30秒未満にしないでください。なぜなら、history syncerプロセスはこの関数を30秒ごとにしか計算しないためです。nodata(/host/key,0)は許可されていません
  • mode - strict (ダブルクォート付き)を指定すると、この関数はプロキシの可用性に影響されません(詳細はコメントを参照)

コメント:

  • プロキシで監視されている'nodata'トリガーは、デフォルトでプロキシの可用性に影響されます。プロキシが利用できなくなった場合、'nodata'トリガーは接続が復旧した直後には発火せず、遅延期間のデータをスキップします。 パッシブプロキシの場合、接続が2秒以上15秒以内に復旧した場合に抑制が有効になります。 アクティブプロキシの場合、接続が15秒以上経過してから復旧した場合に抑制が有効になります。 プロキシの可用性に影響されないようにするには、3番目のパラメータを使用します。例: nodata(/host/key,5m,"strict")。この場合、評価期間(5分)データがなければ、すぐに関数が発火します。
  • この関数は、1番目のパラメータの期間内に以下のいずれかが発生した場合、エラーを表示します:
    - データがなく、Zabbixサーバーが再起動された
    - データがなく、メンテナンスが完了した
    - データがなく、アイテムが追加または再有効化された
  • エラーは、トリガーの設定情報列に表示されます。
  • Zabbixサーバー、プロキシ、エージェント間で時刻のずれがある場合、この関数は正しく動作しないことがあります。 参考: 時刻同期の要件

例:

nodata(/host/agent.ping,5m)=1 #5分間Zabbixエージェントからデータが受信されていない場合にトリガー
percentile(/host/key,(sec|#num)<:time shift>,percentage)

期間のPパーセンタイル。P(パーセンテージ)は3番目のパラメータで指定します。
サポートされる値の型:FloatInteger

パラメータ:

  • 共通パラメータを参照
  • percentage - 小数点以下4桁までの0から100(両端を含む)の浮動小数点数

例:

percentile(/host/net.if.in[eth0,bytes],1h,95)>1000000 #1時間のネットワーク入力(バイト/秒)の95パーセンタイルがしきい値(例:1MB/s)を超えた
percentile(/host/system.cpu.util,5m,95)>80 #CPU使用率のユーザータイムパーセンテージの95パーセンタイルが80を超えた
percentile(/host/icmppingsec[192.168.0.2],15m,95)>0.15 #ほとんどのレイテンシ測定値は150ms未満だが、上位5%の値が定期的な遅延を示唆している
percentile(/host/net.if.in[eth0,bytes],1h,50) #1時間の受信ネットワークトラフィックの50パーセンタイル(中央値)を計算する。これはavg()(平均値)とは異なる結果となる。percentileは外れ値を考慮しないため
(percentile(/host/net.if.in[eth0,bytes],1h,50)+percentile(/host/net.if.in[eth0,bytes],1h,51))/2 #1時間の値が偶数個の場合に正確な中央値を計算する
rate(/host/key,sec<:time shift>)

指定した期間内の単調増加カウンターの1秒あたりの平均増加量。
サポートされる値の型: Float, Integer

パラメータ:

PromQLの'rate'に機能的に対応。

例:

rate(/host/key,30s) #30秒間の単調増加が20の場合、この関数は0.67を返します。
rate(/host/net.if.in[eth0,bytes],5m)>500000 #過去5分間でeth0の受信インターフェーストラフィックレートが500KB/sを超えた
rate(/host/app.requests.count,1m)>100 #リクエストカウントカウンターが直近1分間で1秒あたり100リクエストを超えて増加した

サポートされているすべての関数を参照してください。