zabbix學習系列之觸發器

觸發器的簡介

  • 監控項僅負責收集數據,而一般收集數據的目的還包括在某指標對應的數據超出合理範圍時給相關人員發送告警信息,"觸發器"正式 用於爲監控項所收集的數據定義閾值
  • 每個觸發器僅能管理至一個監控項,可是能夠爲一個監控項同時使用多個觸發器;意思就是,爲一個監控項定義多個具備不一樣閾值的觸發器,能夠實現不一樣級別的報警
  • 一個觸發器由一個表達式構成,它定義了監控項所採集的數據的一個閾值
  • 一旦某次採集的數據超出了觸發器定義的閾值,觸發器狀態將會轉爲"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                求和

觸發器操做符

觸發器示例

示例一node

觸發器名稱:Processor load is too high on www.zabbix.com正則表達式

{www.zabbix.com:system.cpu.load[all,avg1].last(0)}>5

觸發器說明:服務器

www.zabbix.com:host名稱tcp

system.cpu.load[all,avg1]:item值,一份內cpu平均負載值函數

last(0):最新值spa

>5:最新值大於5code

如上所示,www.zabbix.com這個主機的監控項,最新的CPU負載值若是大於5,那麼表達式會返回true,這樣一來觸發器狀態就改變爲「problem」了regexp

示例二server

觸發器名稱:www.zabbix.com is overloadedblog

{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)
相關文章
相關標籤/搜索