Zabbix監控平台(二)深入理解zabbix


一,Zabbix Web操作深入

 

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

 

(1)創建一個模版

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

image_1csimopsa13gjil61p6nuao1e9j16.png-34kB


image_1csimpfe9tn3gt1df3j141p5o23.png-38.6kB

我們再點進新創建的模版查看

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

image_1csimr4v820iua31dbf1drr1s9h2g.png-75.5kB


image_1csims7bl1pbs1uh41m871di1kd32t.png-68.4kB

 

(2)在模版里創建應用集

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

image_1csimugj8jmf1909jfq2kdb0a3a.png-30.6kB


image_1csimuuj321r1bqr10ubkrn1keh3n.png-26.1kB


image_1csimvbhod9kc9i1ngu1u6p1hm644.png-30kB

 

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

cpu模板監控項

image_1cu77rhg51nvglodcpi1greoe79.png-213.7kB

mem模板監控項

image_1cu78284qnpq3n41m1a1a4h15hjm.png-204kB

disk模板監控項(隨便找了一個鍵值)

image_1cu78j2fe1nvsvbfvag8agkmq13.png-225.1kB

 

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

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

image_1csin1o9d1d2g1eaqsi71drv1u3f5r.png-8.3kB


image_1csin23db1lm2nid1jhasjb195h68.png-35.8kB


image_1csin2d8733hvkbp961v931eab6l.png-58.3kB


image_1csin2pplhmbshf1vdb9qhk4o72.png-75.8kB

 

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

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

 

6)把新添加的模板鏈接到主機里面並檢測

image_1cu78q7pooa9901d4l19l9ilp1g.png-98.4kB


image_1cu78tiuu146nat9pn51o38frb1t.png-85.1kB


image_1cu7aaiks1kbi19d91p5ac8d1o3um.png-151.3kB


image_1cu79rpaoambk5q1ngvhvl9j29.png-119.6kB

 

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 ===>表示現在獲取的值如果和之前的不同就告警

例如:

image_1csinfmj8d0413hj6hpct19ld7f.png-153.9kB

 

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

 

(1)創建一個觸發器

我們之前已經創建了一個檢測內存剩余大小的監控項,現在我們給這個監控項加一個觸發器。當內存小於20M時,觸發報警

image_1csinh9aq1iga5hg1o1l8ad1o9j7s.png-42.4kB


image_1csini536fjs1nb718uv1pp81dli99.png-76.5kB


image_1csinjecuoma1f4d1t1g11nc2o4am.png-39.4kB


image_1csink9c6ojm1ach17b39sup9gcj.png-26.7kB

 

(2)進行表達器測試

image_1csinlaad1op55jg10ktmggdmfd0.png-69.3kB


image_1csinlrm0k7j1b0d1m2855j4jbdd.png-37.8kB


image_1csinmk50sjkl4c1et41lh7a6fdq.png-59.5kB


image_1csinmvqrd6i19md1i4u15e61v5ie7.png-42.8kB


image_1csinna3n4bh14on10ld1opq1qacek.png-19kB

表達式測試成功后,我們添加即可

 

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

image_1csino7i8104625lnp1bo114kqf1.png-47.9kB


image_1cu7bknrf85e1ahuqgf1mq81gt13.png-144.5kB

 

監控項表達式說明

{aaaa:vm.memory.size[available].last()}<20M

 
  1. aaaa:模版名
  2. vm.memory.size:zabbix監控端向被監控端發送的代號
  3. .last()<20 :last()<===>last(0)<===>last(#1)

zabbix_get -s 192.168.200.69 -k "vm.memory.size" 
獲取對應IP的全部內存總量

zabbix_get -s 192.168.200.69 -k "vm.memory.size[available]" 
獲取對應IP的剩余內存總量

image_1cu7bpcll1ushhp51t8r3cqdsr1g.png-21.4kB

 

1.4 為了體會深刻,我們再創建一個監控項同時創建它的觸發器

 

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

image_1csinthmflu3to91ujg18qcvfsfu.png-83kB


image_1csintt16klf147ncaf1sej1rl7gb.png-17.2kB

 

(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)創建監控項的告警觸發器

image_1csio0a6n1lut1alhfuv16m8gs1ho.png-18.4kB


image_1csio0m06u92ooi17oe13di5ci5.png-52.4kB


image_1csio12f21joimunuaq1mffpk2ii.png-18.8kB


image_1csio1d8i1as4hbb12so17j91rc4iv.png-18.5kB


image_1csio1pn71dn61mc2ukrj3h1o28jc.png-13.3kB


image_1csio26pfth11sl3enn8n37u3jp.png-13.5kB

到這里就創建完畢了,請仔細體會這個過程。

 

二,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(上文有所有包)

wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz

yum -y install perl-Net-SSLeay perl-IO-Socket-SSL

tar xf sendEmail-v1.56.tar.gz -C /usr/local/

cd /usr/local/sendEmail-v1.56/

/bin/cp -ra sendEmail /usr/local/bin/

chmod +x /usr/local/bin/sendEmail

which sendmail

image_1cu82m5su17na1460956ip61vmm13.png-154.3kB

 

3.1.2 sendmail命令使用說明

image_1csiojg831q73vcbuhp10rm1oijk6.png-60.8kB

 

3.1.3 調整QQ郵箱設置

image_1cu81sf1dvlo17lgh21vj6133i9.png-103.4kB


image_1cu827u7p1rja1tis12sc1i2s1b2pm.png-51.9kB


開啟后生成的碼保存一下,測試郵件的時候需要用到

 

測試郵件發送

sendEmail -f 1123400300@qq.com -t 1123400300@qq.com -u "zabbix_server" -s smtp.qq.com -o message-content-type=html -o message-charset=utf8 -xu 1123400300@qq.com -xp lrvtvcgwvsmtijic -m "郵件發送成功"

image_1cu82p95j20n1rl11lukf9b132820.png-27.7kB


image_1cu82pshc1jfh1hu01ksl9b71f752d.png-101.1kB

 

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

cd /usr/local/zabbix/share/zabbix/alertscripts

pwd

vim sendmail.sh

chmod +x sendmail.sh

chown zabbix.zabbix sendmail.sh

cat sendmail.sh

 
  1. #!/bin/bash
  2. #author:Mr.sun
  3. to=$1
  4. subject=$2
  5. body=$3
  6. from=1123400300@qq.com
  7. smtp=smtp.qq.com
  8. passwd=lrvtvcgwvsmtijic
  9. /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"

image_1cu83lrhi142mcm1mhaejq1vmu2q.png-80.2kB

 

3.1.5 腳本測試

sh sendmail.sh 1123400300@qq.com "hello world" "新的一天"

image_1cu83ndne1tj8r6b1184nd61hfc37.png-19.2kB


image_1cu83o54m1nffgpi1i4ag1m14j03k.png-101.7kB

 

3.1.6 修改zabbix_server.conf配置文件

cat -n /usr/local/zabbix/etc/zabbix_server.conf | grep "447"

 
  1. 447 AlertScriptsPath=${datadir}/zabbix/alertscripts
 

將上述內容修改成如下所示

cat -n /usr/local/zabbix/etc/zabbix_server.conf | grep "447"

 
  1. 447 AlertScriptsPath=/usr/local/zabbix/share/zabbix/alertscripts

image_1cu83rpev1ka9fmq7depge1v4r41.png-17.4kB

 

重啟zabbix_server服務

/etc/init.d/zabbix_server restart

netstat -antup | grep zabbix_serve

image_1cu83so44nd810j51co6pg1k194e.png-27.9kB

 

3.1.7 創建報警媒介

image_1csip15ti1c3j1grb1c7i1c1ccg3mk.png-42.9kB


 
  1. {ALERT.SENDTO}
  2. {ALERT.SUBJECT}
  3. {ALERT.MESSAGE}

image_1csip1o0m5j0mm417j0phopt2nh.png-52.4kB


image_1csip28c01mas1j4km5s371krknu.png-43.5kB


image_1csip31dmvou1mfqa341rnflhsob.png-45.3kB


image_1cu85jhje1i561bf0bbjaa0hg14r.png-40.9kB


image_1cu85kmrj1nipp812s71uj21jnb58.png-48.8kB

 

3.1.8 創建報警動作

image_1csip43ms1u5h16ua1dt4ce217v1p5.png-32.1kB


image_1cu85opqt65tlht1go31urg9hk5l.png-65.7kB


image_1csip4uks1kuvqkk1h2glti143tpv.png-58.9kB


image_1cu862q9q1c2kh4c1r5a11ikdt262.png-101.1kB

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

image_1cu863vhjhlqsa110r319dhl16f.png-81.9kB


image_1cu864ls6vbk1dia1u5s1gar10fm6s.png-29.1kB

 

3.1.9 QQ郵件報警測試

給自定義監控項num_users創建一個觸發器,如下

image_1cu86beuj14i317u41b7211rt1mtj79.png-110.2kB

利用Xshell,增加連接數,觸發報警並檢查郵件

image_1cu86g3es1isgbtpjrv1rti1m87m.png-145kB

 
 

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}

image_1csiptgmbb4qoe2o0fuqn1oue18n.png-52.8kB

 

(2)樣例測試

image_1cu86gv1djli1k8o1h341t3t1e1a83.png-145kB

 

四,用戶參數User parameters

 

4.1 概述

有時候當我們監控的項目在Zabbix預定義的key中沒有定義時,這時候我們可以通過編寫Zabbix的用戶參數的方法來監控我們要求的項目item。形象一點說Zabbix代理端配置文件中的User

parameters就相當於通過腳本獲取要監控的值,然后把相關的腳本或者命令寫入到配置文件中的User

parameter中,然后Zabbix server讀取配置文件中的返回值通過處理前端的方式返回給用戶。

 

用戶參數的語法

UserParameter=,

其中,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時這返回的是內存已經使用的大小。

 

相關語法

UserParameter=key[*],command

 
  1. #描述:
  2. keykey的值在主機系統中必須是唯一的,其中*代表命令中接受的參數
  3. command:客戶端系統中可執行的命令
  4. #舉例:
  5. UserParameter=ping[*],echo $1
  6. ping[0]:此時0就是*,也就是傳入參數是0$1也就是0,因此表達式將一直返回‘0
  7. ping[aaa]:此時aaa就是*,也就是傳入參數是aaa$1也就是aaa,因此表達式將一直返回‘aaa
 

4.3 讓我們自定義一個可以傳遞參數的監控項

我們做一個可以根據條件獲取內存數值大小的監控項mem_check

當我們鍵值為mem_check[free]時,獲取剩余可用內存大小

當我們鍵值為mem_check[used]時,獲取實際占用內存大小

當我們鍵值為mem_check時,獲取總內存大小

 

4.3.1 我們先制作一個獲取數據的腳本

mkdir -p /server/scripts

cd /server/scripts/

vim mem_check

cat mem_check

 
  1. #!/bin/bash
  2. # author:Mr.sun
  3. case $1 in
  4. free)
  5. echo "`free | awk 'NR==3{print $4}'`"
  6. ;;
  7. used)
  8. echo "`free | awk 'NR==3{print $3}'`"
  9. ;;
  10. *)
  11. echo "`free | awk 'NR==2{print $2}'`"
  12. ;;
  13. esac

image_1cu87ub1hjtno60rmr1p951u6i8g.png-41.3kB

 

4.3.2 測試腳本

chmod +x mem_check

chown zabbix.zabbix mem_check

sh mem_check

sh mem_check free

sh mem_check used

image_1cu87vt6m1tlp1m7ol68l13cj8t.png-38.1kB

 

4.3.3 后台自定義一個監控項的鍵值

cd /etc/zabbix/zabbix_agentd.d/

vim mem_check.conf

cat mem_check.conf

 
  1. UserParameter=mem.check[*],/server/scripts/mem_check $1

image_1cu8811kpoen1uprtlh1scp36j9a.png-24.8kB

 

4.3.4 重啟並在server端測試自定義的鍵值

/etc/init.d/zabbix-agent restart

zabbix_get -s 192.168.200.78 -p 10050 -k "mem.check"

zabbix_get -s 192.168.200.78 -p 10050 -k "mem.check[*]"

zabbix_get -s 192.168.200.78 -p 10050 -k "mem.check[free]"

zabbix_get -s 192.168.200.78 -p 10050 -k "mem.check[used]"

image_1cu8836i3fe916db877ts81mva9n.png-17.7kB


image_1cu884loija9cnv1vq23mg1ig8a4.png-37.6kB

 

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

過程略,此時我相信都已經會了。請自己嘗試創建完整。

 

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

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

  1. Web操作很卡,容易出現502

  2. 圖層斷裂

  3. 開啟的進程(Pollar)太多,即使減少item數量,以后加入一定量的機器也會有問題

 

所以,下面主要往兩個優化方向考慮

  1. 用Proxy或者Node模式做分布式監控

  2. 調整Agentd為主動模式

 

5.1 Agentd的配置調整

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

 
  1. ServerActive=192.168.0.220
  2. Hostname=192.168.0.220
  3. StartAgents=1

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

 

5.2 zabbix Server端配置調整

如果開啟了agent端的主動發送數據模式,需要在zabbix Server端修改如下兩個參數,保證性能。

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

5.3 調整模版

因此收集數據的模式發生了變化,因此需要把所有的監控項的類型由原來的“zabbix客戶端”改成“zabbix客戶端(主動式)”。

這樣,只需要簡單的幾步,就完成了主動模式的切換,調整之后服務器不卡了,圖層不裂了,進程也少了。

image_1csiqlggu1esn79j1cc51ssr11eu19h.png-61.5kB


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM