zabbix的深刻了解

一,Zabbix Web操做深刻

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

(1)建立一個模版css

咱們全部的功能幾乎都是在模版中定義的html

1.png-27.4kB

2.png-31kB

咱們再點進新建立的模版查看前端

模版裏幾乎能夠設定咱們須要的全部功能mysql

1.png-31.8kB

2.png-32.9kB

(2)在模版裏建立應用集nginx

應用集的做用就是將衆多的監控項進行一個分類,方便咱們的管理web

1.png-26.2kB

2.png-17.3kB

3.png-19.3kB

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

1.png-26.4kB

2.png-158.7kB

(4)監控項裏的鍵值咱們到底要如何寫?咱們須要學會照葫蘆畫瓢api

咱們選擇一個系統模版Template OS Linux查看ruby

1.png-6kB

2.png-23.7kB

3.png-44.9kB

4.png-80.5kB

(5)固然咱們也能夠自定義監控項的鍵值,可是並不推薦這樣。由於,都是本身寫太慢了。系統自帶了不少鍵值咱們要學會利用bash

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

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

(1)avg

參數:秒或#num
支持類型:float,int
做用:返回一段時間的平均值

舉例:
avg(5):最後5秒的平均值 avg(#5):表示最近5次獲得值的平均值 avg(3600,86400):表示一天前的一個小時的平均值 若是僅有一個參數,表示指定時間的平均值,從如今開始算起,若是有第二個參數,表示漂移,從第二個參數前開始算時間,#n表示最近n次的值

(2)last

參數:秒或#num
支持值類型:float,int,str,text,log
做用:最近的值,若是爲秒,則忽略,#num表示最近第N個值,請注意當前的#num和其餘一些函數的#num的意思是不一樣的。

last(0)等價於last(#1) last(#3)表示最近第3個值(並非最近的三個值) 本函數也支持第二個參數time_shift,例如last(0,86400)返回一天前的最近的值。 若是在history中同一秒中有多個值存在看,Zabbix不保證值的精確順序#num從Zabbix1.6.2起開始支持,timeshift從1.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)

[root@localhost ~]# zabbix_get -s 192.168.0.220 -k "vm.memory.size" 1028517888 #獲取對應IP的所有內存總量 [root@localhost ~]# zabbix_get -s 192.168.0.220 -k "vm.memory.size[available]" 794337280 #獲取對應IP的剩餘內存總量 

1.4 爲了讓同窗們體會深入,咱們再建立一個監控項同時建立它的觸發器

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

QQ截圖20180118114234.png-41.6kB

QQ截圖20180118114253.png-12.9kB

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

[root@localhost ~]# zabbix_get -s 192.168.0.220 -k "agent.ping" 1 [root@localhost ~]# zabbix_get -s 192.168.0.221 -k "agent.ping" 1 [root@localhost ~]# zabbix_get -s 192.168.0.222 -k "agent.ping" 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

[root@localhost ~]# wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz [root@localhost ~]# yum -y install perl-Net-SSLeay perl-IO-Socket-SSL [root@localhost ~]# tar xf sendEmail-v1.56.tar.gz -C /usr/local/ [root@localhost ~]# cd /usr/local/sendEmail-v1.56/ [root@localhost sendEmail-v1.56]# /bin/cp -ra sendEmail /usr/local/bin/ [root@localhost sendEmail-v1.56]# chmod +x /usr/local/bin/sendEmail [root@localhost sendEmail-v1.56]# which sendmail /usr/sbin/sendmail

3.1.2 sendmail命令使用說明

命令/參數 內容 解釋說明
/usr/local/bin/sendEmail 命令主程序
-f from@163.com 發件人郵箱
-t to@163.com 收件人郵箱
-s smtp.163.com 發件人郵箱的smtp服務器
-u "我是郵件主題" 郵件的標題
-o message-content-type=html 郵件內容的格式,html表示它是html格式
-o message-charset=utf8 郵件內容編碼
-xu from@163.com 發件人郵箱的用戶名
-xp 123456 發件人郵箱密碼(受權碼)
-m "我是郵件內容" 郵件的具體內容

3.1.3 調整QQ郵箱設置

QQ截圖20180119225714.png-57kB

QQ截圖20180119230151.png-29.7kB

QQ截圖20180119225952.png-26.7kB

測試郵件發送

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

QQ截圖20180119231007.png-53.4kB

3.1.4 編寫QQ郵件平臺報警腳本

[root@localhost alertscripts]# pwd /usr/local/zabbix/share/zabbix/alertscripts [root@localhost alertscripts]# cat sendmail.sh #!/bin/bash # author:Mr.chen to=$1 subject=$2 body=$3 from=215379068@qq.com smtp=smtp.qq.com passwd=rtqnwthiqajdbihd /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" [root@localhost alertscripts]# chmod +x sendmail.sh [root@localhost alertscripts]# chown zabbix.zabbix sendmail.sh 

3.1.5 腳本測試

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

QQ截圖20180119232055.png-56.9kB

3.1.6 修改zabbix_server.conf配置文件

[root@localhost alertscripts]# cat -n /usr/local/zabbix/etc/zabbix_server.conf | grep "447" 447 # AlertScriptsPath=${datadir}/zabbix/alertscripts #將上述內容修改爲以下所示 [root@localhost alertscripts]# cat -n /usr/local/zabbix/etc/zabbix_server.conf | grep "447" 447 AlertScriptsPath=/usr/local/zabbix/share/zabbix/alertscripts #重啓zabbix_server服務 [root@localhost zabbix]# /etc/init.d/zabbix_server restart Shutting down zabbix_server: [ OK ] 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進行訪問,增長活動鏈接數,觸發報警

QQ截圖20180120224433.png-77.9kB

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

而後咱們就能夠編寫微信告警腳本了,以下:

[root@Zabbix_Server alertscripts]# cat weixin.sh #!/bin/bash # author:Mr.chen CropID="########" #這裏填寫咱們的應用的CropID Secret="#######" #這裏是應用的Secret #下面的GURL和PURL地址無需改變,不用作任何變更 GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret" Gtoken=`/usr/bin/curl -s -G $GURL | awk -F\" '{print $10}'` PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Gtoken" function body() { local int AppID=1000002 #這裏是建立的應用ID local UserID=$1 #接收消息用戶,系統傳參 local PartyID=1 #接收消息的部門ID local Msg=`echo "$@" | cut -d" " -f3-` printf '{\n' printf '\t"touser": "'"$UserID"\"",\n" printf '\t"toparty": "'"$PartyID"\"",\n" printf '\t"msgtype": "text",\n' printf '\t"agentid": "'" $AppID "\"",\n" printf '\t"text": {\n' printf '\t\t"content": "'"$Msg"\""\n" printf '\t},\n' printf '\t"safe":"0"\n' printf '}\n' } /usr/bin/curl --data-ascii "$(body $1 $2 $3)" $PURL 

3.2.3 腳本測試

[root@Zabbix_Server alertscripts]# chmod +x weixin.sh [root@Zabbix_Server alertscripts]# chown zabbix.zabbix weixin.sh [root@Zabbix_Server alertscripts]# sh weixin.sh yinsendemogui "題目" "報警內容" {"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)自定義內容樣例

若是不修改報警的內容格式,看起來太亂了。咱們能夠按照以下方式修改

#告警通知格式樣例
#題目
A故障:{TRIGGER.STATUS},服務器:{HOSTNAME1}發生:{TRIGGER.NAME}故障!
#內容
告警主機:&nbsp;{HOSTNAME1}<br/> 告警時間:&nbsp;{EVENT.DATE} {EVENT.TIME}<br/> 告警等級:&nbsp;{TRIGGER.SEVERITY}<br/> 告警信息:&nbsp;{TRIGGER.NAME}<br/> 告警項目:&nbsp;{TRIGGER.KEY1}<br/> 問題詳情:&nbsp;{ITEM.NAME}&nbsp{ITEM.VALUE}<br/> 當前狀態:&nbsp;{TRIGGER.STATUS}&nbsp{ITEM.VALUE1}<br/> 事件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[

相關語法:

UserParameter=key[*],command

#描述: key:key的值在主機系統中必須是惟一的,其中*表明命令中接受的參數 command:客戶端系統中可執行的命令 #舉例: UserParameter=ping[*],echo $1 ping[0]:此時0就是*,也就是傳入參數是0,$1也就是0,所以表達式將一直返回‘0’ ping[aaa]:此時aaa就是*,也就是傳入參數是aaa,$1也就是aaa,所以表達式將一直返回‘aaa’ 

4.3 讓咱們自定義一個能夠傳遞參數的監控項

咱們作一個能夠根據條件獲取內存數值大小的監控項mem_check
當咱們鍵值爲mem_check[free]時,獲取剩餘可用內存大小
當咱們鍵值爲mem_check[used]時,獲取實際佔用內存大小
當咱們鍵值爲mem_check時,獲取總內存大小

4.3.1 咱們先製做一個獲取數據的腳本

[root@Zabbix_Server ~]# mkdir -p /server/scripts [root@Zabbix_Server ~]# cd /server/scripts/ [root@Zabbix_Server scripts]# cat mem_check #!/bin/bash # author:Mr.chen case $1 in free) echo "`free | awk 'NR==3{print $4}'`" ;; used) echo "`free | awk 'NR==3{print $3}'`" ;; *) echo "`free | awk 'NR==2{print $2}'`" ;; esac 

4.3.2 測試腳本

[root@Zabbix_Server scripts]# chmod +x mem_check [root@Zabbix_Server scripts]# chown zabbix.zabbix mem_check [root@Zabbix_Server scripts]# sh mem_check 1004412 [root@Zabbix_Server scripts]# sh mem_check free 782492 [root@Zabbix_Server scripts]# sh mem_check used 221912 

4.3.3 後臺自定義一個監控項的鍵值

[root@Zabbix_Server ~]# cd /etc/zabbix/zabbix_agentd.d/ [root@Zabbix_Server zabbix_agentd.d]# cat mem_check.conf UserParameter=mem.check[*],/server/scripts/mem_check $1 

4.3.4 測試自定義的鍵值

#重啓zabbix-agent客戶端
[root@Zabbix_Server zabbix_agentd.d]# /etc/init.d/zabbix-agent restart Shutting down Zabbix agent: [ OK ] Starting Zabbix agent: [ OK ] [root@Zabbix_Server zabbix_agentd.d]# zabbix_get -s 192.168.0.220 -p 10050 -k "mem.check" 1004412 [root@Zabbix_Server zabbix_agentd.d]# zabbix_get -s 192.168.0.220 -p 10050 -k "mem.check[free]" 782676 [root@Zabbix_Server zabbix_agentd.d]# zabbix_get -s 192.168.0.220 -p 10050 -k "mem.check[used]" 221744 

4.3.5 前臺自定義一個監控項及觸發器

過程略,此時我相信同窗們已經會了。請同窗們本身嘗試建立完整。

五,Agentd主動模式與被動模式

默認狀況下,zabbix server會直接去每一個agent上抓取數據,這對於agent來講,是被動模式,也是默認的一種獲取數據的方式,可是,當zabbix server監控主機數量過多的時候,由server端去抓取agent上的數據,zabbix server會出現嚴重的性能問題,主要表現以下:

  • [x] :Web操做很卡,容易出現502
  • [x] :圖層斷裂
  • [x] :開啓的進程(Pollar)太多,即便減小item數量,之後加入必定量的機器也會有問題

因此,下面主要往兩個優化方向考慮:

  • [x] :用Proxy或者Node模式作分佈式監控
  • [x] :調整Agentd爲主動模式

5.1 Agentd的配置調整

修改zabbix_agentd.conf配置文件,注意是打開以下參數:

ServerActive=192.168.0.220 Hostname=192.168.0.220 StartAgents=1

ServerActive是指定Agentd收集的數據往哪裏發送,Hostname是必需要和zabbix web端添加主機時的主機名對應起來,這樣zabbix server端接收到數據才能找到對應關係,這裏爲了兼容被動模式,沒有把StartAgents設爲0,若是一開始就是使用主動模式的話建議把StartAgents設爲0,關閉被動模式。

5.2 zabbix Server端配置調整

若是開啓了agent端的主動發送數據模式,須要在zabbix Server端修改以下兩個參數,保證性能。

StartPollers=10     #把這個zabbix Server主動收集數據進程減小一些。 StartTrappers=200 #把這個負責處理Agentd推送過來的數據的進程開大一些。

5.3 調整模版

  • 所以收集數據的模式發生了變化,所以須要把全部的監控項的類型由原來的「zabbix客戶端」改爲「zabbix客戶端(主動式)」。
  • 這樣,只須要簡單的幾步,就完成了主動模式的切換,調整以後服務器不卡了,圖層不裂了,進程也少了。

QQ截圖20180121221430.png-46.7kB

相關文章
相關標籤/搜索