1. 程式人生 > >Zabbix監控平臺(二)深入瞭解

Zabbix監控平臺(二)深入瞭解

Zabbix監控(二)深入瞭解

  • 一,Zabbix Web操作深入
    • 1.1 Zabbix Web下的主機和模版以及監控項的新增方式
    • 1.2 Zabbix Web下觸發器與表示式的編寫方法
    • 1.3 Zabbix Web建立觸發器過程以及觸發器與監控項對應關係
    • 1.4 再建立一個監控項同時建立它的觸發器
  • 二,Zabbix常用模版與觸發器功能詳解
  • 三,Zabbix報警媒介型別設定和告警動作、頻率設定
    • 3.1 QQ郵件告警平臺
      • 3.1.1 安裝sendmail
      • 3.1.2 sendmail命令使用說明
      • 3.1.3 調整QQ郵箱設定
      • 3.1.4 編寫QQ郵件平臺報警指令碼
      • 3.1.5 指令碼測試
      • 3.1.6 修改zabbix_server.conf配置檔案
      • 3.1.7 建立報警媒介
      • 3.1.8 建立報警動作
      • 3.1.9 QQ郵件報警測試
    • 3.2 微信報警平臺
      • 3.2.1 註冊微信報警平臺並繫結微訊號
      • 3.2.2 編寫微信平臺報警指令碼
      • 3.2.3 指令碼測試
      • 3.2.4 建立微信報警媒介型別
      • 3.2.5 設定報警動作
      • 3.2.6 微信平臺報警測試
    • 3.3 自定義自動報警的內容
  • 四,使用者引數User parameters
    • 4.1 概述
    • 4.2 讓key接受引數
    • 4.3 讓我們自定義一個可以傳遞引數的監控項
      • 4.3.1 製作一個獲取資料的指令碼
      • 4.3.2 測試指令碼
      • 4.3.3 後臺自定義一個監控項的鍵值
      • 4.3.4 測試自定義的鍵值
      • 4.3.5 前臺自定義一個監控項及觸發器
  • 五,Agentd主動模式與被動模式
    • 5.1 Agentd的配置調整
    • 5.2 zabbix Server端配置調整
    • 5.3 調整模版

一,Zabbix Web操作深入

1.1 Zabbix Web下的主機和模版以及監控項的新增方式

(1)建立一個模版

我們所有的功能幾乎都是在模版中定義的

1.png-27.4kB

2.png-31kB

我們再點進新建立的模版檢視

模版裡幾乎可以設定我們需要的所有功能

1.png-31.8kB

2.png-32.9kB

(2)在模版裡建立應用集

應用集的作用就是將眾多的監控項進行一個分類,方便我們的管理

1.png-26.2kB

2.png-17.3kB

3.png-19.3kB

(3)在模版裡建立一個zabbix自帶的監控項

1.png-26.4kB

2.png-158.7kB

(4)監控項裡的鍵值我們到底要如何寫?我們需要學會照葫蘆畫瓢

我們選擇一個系統模版Template OS Linux檢視

1.png-6kB

2.png-23.7kB

3.png-44.9kB

4.png-80.5kB

(5)當然我們也可以自定義監控項的鍵值,但是並不推薦這樣。因為,都是自己寫太慢了。系統自帶了很多鍵值我們要學會利用

自定義系統監控項的鍵值建立,請參考前一節的知識

1.2 Zabbix Web下觸發器與表示式的編寫方法

(1)avg

引數:秒或#num
支援型別:float,int
作用:返回一段時間的平均值

  1. 舉例:
  2. avg(5):最後5秒的平均值
  3. avg(#5):表示最近5次得到值的平均值
  4. avg3600,86400):表示一天前的一個小時的平均值
  5. 如果僅有一個引數,表示指定時間的平均值,從現在開始算起,如果有第二個引數,表示漂移,從第二個引數前開始算時間,#n表示最近n次的值

(2)last

引數:秒或#num
支援值型別:float,int,str,text,log
作用:最近的值,如果為秒,則忽略,#num表示最近第N個值,請注意當前的#num和其他一些函式的#num的意思是不同的。

  1. last(0)等價於last(#1
  2. last(#3)表示最近第3個值(並不是最近的三個值)
  3. 本函式也支援第二個引數time_shift,例如last0,86400)返回一天前的最近的值。
  4. 如果在history中同一秒中有多個值存在看,Zabbix不保證值的精確順序#numZabbix1.6.2起開始支援,timeshift1.8.2起開始支援,可以查詢avg()函式獲取它的使用方法

(3)max

引數:秒或#num
支援值型別:float,int
描述:返回指定時間間隔的最大值。時間間隔作為第一個引數可以是秒或收集值的數目(字首為#)。從Zabbix1.8.2開始,函式支援第二個可選引數time_shift,可以檢視avg()函式獲取它的使用方法。
例如:max(#3)=0 返回3次值如果都是0則觸發告警

(4)min

引數:秒或#num
支援值型別:float,int
描述:返回指定時間間隔的最小值。時間間隔作為第一個引數可以是秒或收集值的數目(字首為#)。從Zabbix1.8.2開始,函式支援第二個可選引數time_shift,可以檢視avg()函式獲取它的使用方法。

(5)nodata

引數:秒
支援值型別:any
描述:當返回值為1表示指定的間隔(間隔不應小於30秒)沒有接收到資料,0表示獲取到了。
例:nodata(5m)=1 ===>5分鐘之內獲取不到資料就告警

(6)prev

引數:忽略
支援值型別:float,int,str,text,log
描述:返回之前的值,類似於last(#2)

(7)sum

引數:秒或#num
支援值型別:float,int
描述:返回指定時間間隔中收集到的值的總和,時間間隔作為第一個引數支援秒或收集值的數目(以#開始).從Zabbix1.8.2開始,本函式支援time_shift作為第二個引數。可以檢視avg函式獲取它的用法。

(8)change

引數:忽略
支援型別:float,int,str,text,log
作用:返回最近獲得值與之前獲得值的差值,對於字串0表示相等,1表示不同
change(0)>n:忽略引數一般輸入0,表示最近得到的值與上一個值的差值大於n

(9)diff

引數:忽略
支援值型別:float,init,str,text,log
作用:返回值為1,表示最近的值與之前的值不同,0為相同。
例如:diff(0)>0 ===>表示現在獲取的值如果和之前的不同就告警

例如:

QQ截圖20180118093853.png-90.8kB

QQ截圖20180118094336.png-32kB

1.3 Zabbix Web建立觸發器過程以及觸發器與監控項對應關係

(1)建立一個觸發器

之前已經建立了一個檢測記憶體剩餘大小的監控項,現在給這個監控項加一個觸發器。當記憶體小於20M時,觸發報警

QQ截圖20180118100424.png-34.2kB

QQ截圖20180118105951.png-38.2kB

QQ截圖20180118110016.png-27.7kB

QQ截圖20180118110105.png-12.6kB

(2)進行表達器測試

QQ截圖20180118110530.png-30.1kB

QQ截圖20180118111111.png-27.1kB

QQ截圖20180118111332.png-29kB

QQ截圖20180118111424.png-20.5kB

QQ截圖20180118111443.png-14.1kB

表示式測試成功後,建立完畢即可

(3)在服務端進行監控項資料獲取測試

QQ截圖20180118112715.png-33.2kB

監控項表示式說明
{aaaa:vm.memory.size[available].last()}<20M
aaaa:模版名
vm.memory.size:zabbix監控端向被監控端傳送的代號
.last()<20 :last()<===>last(0)<===>last(#1)

  1. [[email protected] ~]# zabbix_get -s 192.168.0.220 -k "vm.memory.size"
  2. 1028517888 #獲取對應IP的全部記憶體總量
  3. [[email protected] ~]# zabbix_get -s 192.168.0.220 -k "vm.memory.size[available]"
  4. 794337280 #獲取對應IP的剩餘記憶體總量

1.4 再建立一個監控項同時建立它的觸發器

(1)快速建立一個Agent_ping監控項

QQ截圖20180118114234.png-41.6kB

QQ截圖20180118114253.png-12.9kB

(2)在監控端測試監控項的鍵值

  1. [[email protected] ~]# zabbix_get -s 192.168.0.220 -k "agent.ping"
  2. 1
  3. [[email protected] ~]# zabbix_get -s 192.168.0.221 -k "agent.ping"
  4. 1
  5. [[email protected] ~]# zabbix_get -s 192.168.0.222 -k "agent.ping"
  6. zabbix_get [11715]: Get value error: cannot connect to [[192.168.0.222]:10050]: [113] No route to host

如果對方伺服器IP能ping通,則返回值是1。反之不是1就有問題

(3)建立監控項的告警觸發器

QQ截圖20180118114723.png-9.9kB

QQ截圖20180118114745.png-20.7kB

QQ截圖20180118114910.png-13.4kB

QQ截圖20180118114916.png-13.1kB

QQ截圖20180118114935.png-9.5kB

QQ截圖20180118114943.png-9.9kB

到這裡就建立完畢了,請同學們仔細體會這個過程。

二,Zabbix常用模版與觸發器功能詳解

(1){Template App Zabbix Agent:agent.version.diff(0)}>0

解釋:
如果當前獲取的agent客戶端的版本號大於前一次的不同,那麼觸發告警

(2){Template App Zabbix Agent:agent.ping.nodata(5m)}=1

解釋:
如果ping客戶端在5分鐘內都沒有資料,那麼觸發告警

(3){Template OS AIX:vm.memory.size[available].last(0)}<20M

解釋:
如果最後一次獲取的空閒記憶體大小得值小於20M,那麼觸發告警

(4){Template App SSH Service:net.tcp.service[ssh].max(#3)}=0

解釋:
如果ssh遠端連線連續獲取的3次值的最大值都是0,那麼觸發告警

(5){Template ICMP Ping:icmppingloss.min(5m)}>20

解釋:
如果連續5分鐘裡獲取的最小值都大於20,那麼觸發告警

(6){Template ICMP Ping:icmppingsec.avg(5m)}>0.15

解釋:
如果連續5分鐘內的平均值大於0.15,那麼觸發告警

三,Zabbix報警媒介型別設定和告警動作、頻率設定

3.1 QQ郵件告警平臺

3.1.1 安裝sendmail

  1. [[email protected] ~]# wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz
  2. [[email protected] ~]# yum -y install perl-Net-SSLeay perl-IO-Socket-SSL
  3. [[email protected] ~]# tar xf sendEmail-v1.56.tar.gz -C /usr/local/
  4. [[email protected] ~]# cd /usr/local/sendEmail-v1.56/
  5. [[email protected] sendEmail-v1.56]# /bin/cp -ra sendEmail /usr/local/bin/
  6. [[email protected] sendEmail-v1.56]# chmod +x /usr/local/bin/sendEmail
  7. [[email protected] sendEmail-v1.56]# which sendmail
  8. /usr/sbin/sendmail

3.1.2 sendmail命令使用說明

命令/引數 內容 解釋說明
/usr/local/bin/sendEmail 命令主程式
-f [email protected] 發件人郵箱
-t [email protected] 收件人郵箱
-s smtp.163.com 發件人郵箱的smtp伺服器
-u "我是郵件主題" 郵件的標題
-o message-content-type=html 郵件內容的格式,html表示它是html格式
-o message-charset=utf8 郵件內容編碼
-xu [email protected] 發件人郵箱的使用者名稱
-xp 123456 發件人郵箱密碼(授權碼)
-m "我是郵件內容" 郵件的具體內容
 

3.1.3 調整QQ郵箱設定

QQ截圖20180119225714.png-57kB

QQ截圖20180119230151.png-29.7kB

QQ截圖20180119225952.png-26.7kB

測試郵件傳送

  1. [[email protected] sendEmail-v1.56]# sendEmail -f 1140180652@qq.com -t 1140180652@qq.com -u "zabbix_server" -s smtp.qq.com -o message-content-type=html -o message-charset=utf8 -xu 1140180652@qq.com -xp rtqnwthiqajdbihd -m "郵件傳送成功"
  2. Jan 19 18:09:10 localhost sendEmail[2403]: Email was sent successfully!

3.1.4 編寫QQ郵件平臺報警指令碼

  1. [[email protected] alertscripts]# pwd
  2. /usr/local/zabbix/share/zabbix/alertscripts
  3. [[email protected] alertscripts]# cat sendmail.sh
  4. #!/bin/bash
  5. # author:Mr.chen
  6. to=$1
  7. subject=$2
  8. body=$3
  9. from=[email protected].com
  10. smtp=smtp.qq.com
  11. passwd=rtqnwthiqajdbihd
  12. /usr/local/bin/sendEmail -f "$from" -t "$to" -s "$smtp" -u "$subject" -o message-content-type=html -o message-charset=utf8 -xu "$from" -xp "$passwd" -m "$body"
  13. [[email protected] alertscripts]# chmod +x sendmail.sh
  14. [[email protected] alertscripts]# chown zabbix.zabbix sendmail.sh

3.1.5 指令碼測試

  1. [[email protected] alertscripts]# sh sendmail.sh 1140180652@qq.com "hello world" "新的一天"
  2. Jan 19 18:20:32 localhost sendEmail[2478]: Email was sent successfully!

3.1.6 修改zabbix_server.conf配置檔案

  1. [[email protected] alertscripts]# cat -n /usr/local/zabbix/etc/zabbix_server.conf | grep "447"
  2. 447 # AlertScriptsPath=${datadir}/zabbix/alertscripts
  3. #將上述內容修改成如下所示
  4. [[email protected] alertscripts]# cat -n /usr/local/zabbix/etc/zabbix_server.conf | grep "447"
  5. 447 AlertScriptsPath=/usr/local/zabbix/share/zabbix/alertscripts
  6. #重啟zabbix_server服務
  7. [[email protected] zabbix]# /etc/init.d/zabbix_server restart
  8. Shutting down zabbix_server: [ OK ]
  9. Starting zabbix_server: [ OK ]

3.1.7 建立報警媒介

QQ截圖20180119234327.png-34.9kB

QQ截圖20180119234558.png-24.5kB

QQ截圖20180119234640.png-32.4kB

QQ截圖20180119234839.png-25.3kB

QQ截圖20180120223425.png-31.3kB

 

3.1.8 建立報警動作

QQ截圖20180119235155.png-26.2kB

QQ截圖20180120110138.png-26.4kB

QQ截圖20180120110308.png-31kB

QQ截圖20180120110353.png-50.6kB

步驟1-3也就是從1開始到3結束。一旦發生故障,就是執行sendmail.sh指令碼發生報警郵件給zabbix使用者。
假如故障持續了1個小時,它也只發送3次,第1-3次(即前3次)郵箱傳送給zabbix使用者,時間間隔為0秒。
如果改成1-0,0是表示不限制,無限傳送。

QQ截圖20180120110812.png-34.9kB

QQ截圖20180120110850.png-14.6kB

3.1.9 QQ郵件報警測試

給自定義監控項nginx.avtive建立一個觸發器,如下

QQ截圖20180120230607.png-15.5kB

利用Web進行訪問,增加活動連線數,觸發報警

3.2 微信報警平臺

3.2.1 註冊微信報警平臺並繫結微訊號

企業號註冊連線https://qy.weixin.qq.com/cgi-bin/loginpage

QQ截圖20180121001001.png-45.7kB

QQ截圖20180121001247.png-36kB

QQ截圖20180121001751.png-19.2kB

3.2.2 編寫微信平臺報警指令碼

編寫指令碼前,我們需要先記住3個關鍵的引數

(1)企業的CorpID

QQ截圖20180121005237.png-58.6kB

(2)企業的Secret

QQ截圖20180121005310.png-38kB

QQ截圖20180121005334.png-9kB

(3)部門ID號

QQ截圖20180121005557.png-47.2kB

編寫微信告警指令碼了,如下:

  1. [[email protected]_Server alertscripts]# cat weixin.sh
  2. #!/bin/bash
  3. # author:Mr.chen
  4. CropID="########" #這裡填寫我們的應用的CropID
  5. Secret="#######" #這裡是應用的Secret
  6. #下面的GURL和PURL地址無需改變,不用做任何變動
  7. GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret"
  8. Gtoken=`/usr/bin/curl -s -G $GURL | awk -F\" '{print $10}'`
  9. PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Gtoken"
  10. function body() {
  11. local int AppID=1000002 #這裡是建立的應用ID
  12. local UserID=$1 #接收訊息使用者,系統傳參
  13. local PartyID=1 #接收訊息的部門ID
  14. local Msg=`echo "[email protected]" | cut -d" " -f3-`
  15. printf '{\n'
  16. printf '\t"touser": "'"$UserID"\"",\n"
  17. printf '\t"toparty": "'"$PartyID"\"",\n"
  18. printf '\t"msgtype": "text",\n'
  19. printf '\t"agentid": "'" $AppID "\"",\n"
  20. printf '\t"text": {\n'
  21. printf '\t\t"content": "'"$Msg"\""\n"
  22. printf '\t},\n'
  23. printf '\t"safe":"0"\n'
  24. printf '}\n'
  25. }
  26. /usr/bin/curl --data-ascii "$(body $1 $2 $3)" $PURL

3.2.3 指令碼測試

  1. [[email protected]_Server alertscripts]# chmod +x weixin.sh
  2. [[email protected]_Server alertscripts]# chown zabbix.zabbix weixin.sh
  3. [[email protected]_Server alertscripts]# sh weixin.sh yinsendemogui "題目" "報警內容"
  4. {"errcode":0,"errmsg":"ok","invaliduser":"#######"}

IMG_3575.PNG-62.5kB

IMG_3576.PNG-53.3kB

3.2.4 建立微信報警媒介型別

QQ截圖20180121011219.png-25.6kB

QQ截圖20180121011244.png-35.4kB

QQ截圖20180121011307.png-21.8kB

QQ截圖20180121011355.png-14.1kB

QQ截圖20180121011413.png-25.1kB

3.2.5 設定報警動作

QQ截圖20180121011641.png-17.9kB

QQ截圖20180121011900.png-25kB

3.2.6 微信平臺報警測試

QQ截圖20180121012248.png-65.4kB

IMG_3577.PNG-118.4kB

3.3 自定義自動報警的內容

(1)自定義內容樣例

如果不修改報警的內容格式,看起來太亂了。我們可以按照如下方式修改

  1. #告警通知格式樣例
  2. #題目
  3. A故障:{TRIGGER.STATUS},伺服器:{HOSTNAME1}發生:{TRIGGER.NAME}故障!
  4. #內容
  5. 告警主機:&nbsp;{HOSTNAME1}<br/>
  6. 告警時間:&nbsp;{EVENT.DATE} {EVENT.TIME}<br/>
  7. 告警等級:&nbsp;{TRIGGER.SEVERITY}<br/>
  8. 告警資訊:&nbsp;{TRIGGER.NAME}<br/>
  9. 告警專案:&nbsp;{TRIGGER.KEY1}<br/>
  10. 問題詳情:&nbsp;{ITEM.NAME}&nbsp{ITEM.VALUE}<br/>
  11. 當前狀態:&nbsp;{TRIGGER.STATUS}&nbsp{ITEM.VALUE1}<br/>
  12. 事件ID:&nbsp;{EVENT.ID}

QQ截圖20180121195205.png-40.7kB

(2)樣例測試

QQ截圖20180121195126.png-67.1kB

四,使用者引數User parameters

4.1 概述

有時候當我們監控的專案在Zabbix預定義的key中沒有定義時,這時候我們可以通過編寫Zabbix的使用者引數的方法來監控我們要求的專案item。形象一點說Zabbix代理端配置檔案中的User parameters就相當於通過指令碼獲取要監控的值,然後把相關的指令碼或者命令寫入到配置檔案中的User parameter中,然後Zabbix server讀取配置檔案中的返回值通過處理前端的方式返回給使用者。

使用者引數的語法

UserParameter=<key>,<command>

其中,Userparameter為關鍵字,key為使用者自定義key名字可以隨便起,為我們要執行的命令或者指令碼。

一個簡單的例子:

UserParameter=ping,echo 1

代理程式將會永遠的返回1,當我們在伺服器端新增item的key為ping的時候。

稍微複雜的例子:

UserParameter=mysql.ping,/usr/local/mysql/bin/mysqladmin ping | grep -c alive

  • 當我們執行mysqladmin -uroot ping命令的時候如果mysql存活要返回mysqld is alive,我們通過grep -c來計算mysqld is alive的個數,如果mysql存活著,則個數為1,如果不存活很明顯mysqld is alive的個數為0,通過這種方法我們可以來判斷mysql的存活狀態。
  • 當我們在伺服器端新增item的key為mysql.ping時候,對於Zabbix代理程式,如果mysql存活,則狀態將返回1,否則,狀態將返回0。

4.2 讓key接受引數

讓key也接受引數的方法使item新增時更具備了靈活性,例如系統預定義key:vm.memory.size[],其中的mode模式就是使用者要接受的引數,當我們填寫為free時則返回的為記憶體的剩餘大小,如果我們填入的為userd時這返回的是記憶體已經使用的大