觸發器的簡介
- 監控項僅負責收集數據,而通常收集數據的目的還包括在某指標對應的數據超出合理范圍時給相關人員發送告警信息,"觸發器"正式 用於為監控項所收集的數據定義閾值
- 每一個觸發器僅能管理至一個監控項,但是可以為一個監控項同時使用多個觸發器;意思就是,為一個監控項定義多個具有不同閾值的觸發器,可以實現不同級別的報警
- 一個觸發器由一個表達式構成,它定義了監控項所采集的數據的一個閾值
- 一旦某次采集的數據超出了觸發器定義的閾值,觸發器狀態將會轉為"problem";而當采取的數據再次回歸至合理的范圍內時,其狀態將重新返回到"OK"
觸發器表達式
{<server>:<key>.<function>(<parameter>)}<operator><constant> 某主機上某個key使用某個函數(參數)所得的值 和 設定的值比較 server:主機名稱 key:主機上相應監控項的key; function:評估采集到的數據是否在合理范圍內時所使用的函數,其評估過程可以根據采取的數據、當前時間及其它因素進行;
觸發器表達式支持的函數
avg、 求平均值
count、 指定時間內或次數內數值統計
change 指定時間內或次數內倒數第2次於倒數第1次的差值,對於字符串,0沒有變化,1表示有變化;
date、 當前日期
dayofweek、 本周第幾天 dayofmonth 本月第幾天
delta、 指定時間內或次數內最大值與最小值的差
diff、 指定時間內或次數內倒數第2次於倒數第1次的值,有沒有不同;常用於監控文件
regexp 檢查最后一次采樣的數據是否能夠被指定的模式所匹配:1表示匹配,0表示不匹配
iregexp 不區分大小的正則表達式
last 最近采樣的數據
max、min、nodata(沒有數據)、
now 返回時間戳
prev 倒數第二個采樣值
str 從最后一次的采樣中查找此處指定的字符串;0表示找到,1表示沒找到
strlen 字符串長度比較
sum 求和
觸發器操作符
觸發器示例
示例一
觸發器名稱:Processor load is too high on www.zabbix.com
{www.zabbix.com:system.cpu.load[all,avg1].last(0)}>5
觸發器說明:
www.zabbix.com:host名稱
system.cpu.load[all,avg1]:item值,一分內cpu平均負載值
last(0):最新值
>5:最新值大於5
如上所示,www.zabbix.com這個主機的監控項,最新的CPU負載值如果大於5,那么表達式會返回true,這樣一來觸發器狀態就改變為“problem”了
示例二
觸發器名稱:www.zabbix.com is overloaded
{www.zabbix.com:system.cpu.load[all,avg1].last(0)}>5|{www.zabbix.com:system.cpu.load[all,avg1].min(10m)}>2
當前cpu負載大於5或者最近10分內的cpu負載大於2,那么表達式將會返回true.
示例三
觸發器名稱:/etc/passwd has been changed
使用函數 diff():
{www.zabbix.com:vfs.file.cksum[/etc/passwd].diff(0)}>0
/etc/passwd最新的checksum與上一次獲取到的checksum不同,表達式將會返回true. 我們可以使用同樣的方法監控系統重要的配置文件,例如/etc/passwd,/etc/inetd.conf等等。這些zabbix一般都會自帶,沒帶的你自己加上吧
示例四
觸發器名稱:Someone is downloading a large file from the Internet
使用函數 min:
{www.zabbix.com:net.if.in[eth0,bytes].min(5m)}>100K
當前主機網卡eth0最后5分鍾內接收到的流量超過100KB那么觸發器表達式將會返回true
示例五
觸發器名稱:Both nodes of clustered SMTP server are down
{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服務器都離線,表達式將會返回true.
示例六
觸發器名稱:Server is unreachable
{zabbix.zabbix.com:icmpping.count(30m,0)}>5
如上表達式表示最近30分鍾zabbix.zabbix.com這個主機超過5次不可到達
Hysteresis(遲滯,滯后)
簡單的說觸發器狀態轉變為problem需要一個條件,從problem轉變回來還需要一個條件才行。一般觸發器只需要不滿足觸發器為problem條件即可恢復。明白了么?不明白就看例子吧。
有時候觸發器需要使用不同的條件來表示不同的狀態,舉個官網很有趣的例子:機房溫度正常穩定為15-20°,當溫度超過20°,觸發器值為problem,直到溫度低於15°才會接觸警報,異常會解除
示例一
觸發器名稱:Temperature in server room is too high
({TRIGGER.VALUE}=0&{server:temp.last(0)}>20)| ({TRIGGER.VALUE}=1&{server:temp.last(0)}<15)
如上有兩個小括號,前面一個表示觸發異常的條件,后面一個表達式表示解除異常的條件
注意:宏變量 {TRIGGER.VALUE}將會返回當前觸發器的值
示例二
觸發器名稱:Free disk space is too low
Problem: 最近5分鍾剩余磁盤空間小於10GB。(異常)
Recovery: 最近10分鍾磁盤空間大於40GB。(恢復)
簡單說便是一旦剩余空間小於10G就觸發異常,然后接下來剩余空間必須大於40G才能解除這個異常,就算你剩余空間達到了39G(不在報警條件里)那也是沒用的
({TRIGGER.VALUE}=0&{server:vfs.fs.size[/,free].max(5m)}<10G) | ({TRIGGER.VALUE}=1&{server:vfs.fs.size[/,free].min(10m)}<40G)