2. Trigger関数 - last()
トリガー関数のなかで、lastは最新の監視データを取得する用途で非常によく使います。
私自身、last関数を使う時は99.99%引数なしで使っていますが、過去のデータを参照しようとした際、きちんとマニュアルを読まずに適当な引数を入れて使用し、思ったとおりの挙動にならず少し調査に手間取ったり、長い間間違いに気が付かないことがありました。
今回は、ごくシンプルなデータを使って、last関数の挙動を確認します。
確認に使用するアイテム
数値タイプのZabbixトラッパーアイテムを使用します。
このアイテムをベースに、計算アイテムで様々なパラメタを指定して、挙動を確認します。
データは単純に、1つだけ送信しておきます。
$ zabbix_sender -z 192.168.0.9 -s Test001 -k trapper.float -o 1
確認結果
Zabbixトラッパーにデータをセットしてから、数分後の状態です。
これだけで、いろいろとlast関数の挙動を理解することができます。順番に確認していきます。
last()とlast(#1)の値は同じ
これは、マニュアルに記載されている通りの挙動です。
last(#1)と指定して、ひとつ前のデータを取得していると勘違いしないよう、気をつけてください。
last(1h)は、1時間前のデータではない
マニュアルには、時間指定した場合は無視される(ignored) と記載されているので、挙動としてはいいのでしょうが、avg()関数と同じ間隔で時間指定でトリガー条件式に記載しているだけだと、なかなか誤りに気づかないのでちょっと危険です。
この例を見ていただいてわかるとおり、最初のパラメタが5分前だろうが、1日前だろうが、最新のデータを持ってきます。
last(#10)のようにデータが存在しないタイミングはエラーになる
これはまあ、当然の挙動と思われます。
タイムシフトの指定は期間外だとエラーになる
指定範囲外の期間もエラーになります。