誰でも ZABBIX

Zabbixの使い方、役に立つ情報、等々

2. Trigger関数 - last()

トリガー関数のなかで、lastは最新の監視データを取得する用途で非常によく使います。

私自身、last関数を使う時は99.99%引数なしで使っていますが、過去のデータを参照しようとした際、きちんとマニュアルを読まずに適当な引数を入れて使用し、思ったとおりの挙動にならず少し調査に手間取ったり、長い間間違いに気が付かないことがありました。

今回は、ごくシンプルなデータを使って、last関数の挙動を確認します。

確認に使用するアイテム

数値タイプのZabbixトラッパーアイテムを使用します。

f:id:Unam:20180210183107p:plain

このアイテムをベースに、計算アイテムで様々なパラメタを指定して、挙動を確認します。

f:id:Unam:20180210184658p:plain

データは単純に、1つだけ送信しておきます。

$ zabbix_sender -z 192.168.0.9 -s Test001 -k trapper.float -o 1

確認結果

Zabbixトラッパーにデータをセットしてから、数分後の状態です。

f:id:Unam:20180210184550p:plain

これだけで、いろいろとlast関数の挙動を理解することができます。順番に確認していきます。

last()とlast(#1)の値は同じ

これは、マニュアルに記載されている通りの挙動です。

f:id:Unam:20180210185020p:plain
f:id:Unam:20180210185048p:plain

last(#1)と指定して、ひとつ前のデータを取得していると勘違いしないよう、気をつけてください。

last(1h)は、1時間前のデータではない

f:id:Unam:20180210185750p:plain

マニュアルには、時間指定した場合は無視される(ignored) と記載されているので、挙動としてはいいのでしょうが、avg()関数と同じ間隔で時間指定でトリガー条件式に記載しているだけだと、なかなか誤りに気づかないのでちょっと危険です。

この例を見ていただいてわかるとおり、最初のパラメタが5分前だろうが、1日前だろうが、最新のデータを持ってきます。

last(#10)のようにデータが存在しないタイミングはエラーになる

f:id:Unam:20180210190458p:plain

これはまあ、当然の挙動と思われます。

タイムシフトの指定は期間外だとエラーになる

f:id:Unam:20180210190207p:plain

指定範囲外の期間もエラーになります。