LoginSignup
14
14

More than 5 years have passed since last update.

Zabbixで複雑な条件でトリガーを発火させる方法

Last updated at Posted at 2012-11-23

例として、翌月の第1火曜日から3日を過ぎても値が更新されない場合、トリガーを発火させる方法を示す。

item の作成

発火状態なら 1 に、未発火状態なら 0 になる item を作成する。この item の Type は、External check で作成する。

項目名 設定値
Description test.fire
Type External check
Key fire.sh[monitor-key]
Type of information Numeric(unsigned)
Data type Decimal

monitor-key には、値の更新を監視したいキーを設定する。

external script

ディレクトリ /etc/zabbix/externalscripts に、次のような fire.sh を作成する。

fire.sh
#!/bin/bash
TARGET_IP=$1
TARGET_KEY=$2

# zabbix server の設定を読み込み、DB 接続情報を利用する
. /etc/zabbix/zabbix_server.conf

# hostid を取得する。
HOSTID=$(echo "SELECT hostid FROM hosts WHERE ip='$TARGET_IP' OR host='$TARGET_IP';" \
  | mysql -N -u $DBUser --password=$DBPassword $DBName)

# itemid を取得する
ITEMID=$(echo "SELECT itemid FROM items WHERE hostid=$HOSTID AND key_='$TARGET_KEY';" \
  | mysql -N -u $DBUser --password=$DBPassword $DBName)

# item の更新時刻を取得する
CLOCK=$(echo "SELECT clock FROM history_uint WHERE itemid=$ITEMID ORDER BY clock DESC LIMIT 1;" \
  | mysql -N -u $DBUser --password=$DBPassword $DBName)

# 翌月の1日になるまで、1日ずつ加算していく
THISMONTH=$(date -d "@$CLOCK" +%m)
NEXT_UNIXTIME=$(expr $CLOCK + 86400)
while [ $THISMONTH -eq $(date -d "@$NEXT_UNIXTIME" +%m) ];
do
  NEXT_UNIXTIME=$(expr $NEXT_UNIXTIME + 86400)
done

# 第1火曜日になるまで、1日ずつ加算していく
while [ $(date -d "@$NEXT_UNIXTIME" +%w) -ne 2 ];
do
  NEXT_UNIXTIME=$(expr $NEXT_UNIXTIME + 86400)
done

# 時刻を 0 時にする
NEXT_UNIXTIME=$(date -d "$(date -d @$NEXT_UNIXTIME +%Y-%m-%d)" +%s)

# $NEXT_UNIXTIME には、翌月の第一火曜日午前0時が設定された。
# 3 日後を求める。
LIMIT_UNIXTIME=$(expr $NEXT_UNIXTIME + 259200)

if [ $LIMIT_UNIXTIME -lt $(date +%s) ]; then
  # 値が更新されていない
  echo "1"
  exit 1
else
  # 正常
  echo "0"
  exit 0
fi

トリガーの作成

次のようにキー fire.sh[monitor-key] が 0 以外の時に発火するトリガーを作成すれば完成である。

項目名 設定値
Name does not running even after the specific date.
Expression {monitored-host:fire.sh[key].last(0)}#0
Severity Average
Comment 期限を過ぎても item が更新されていません。
14
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
14