1. 程式人生 > >Zabbix監控平臺-----深入理解zabbix

Zabbix監控平臺-----深入理解zabbix

有一個 修改 mode 一個 同時 email pro 郵件 抓取

一,Zabbix Web操作深入

(1)創建一個模版,所有的功能幾乎都是在模版中定義的

技術分享圖片

技術分享圖片

點進新創建的模版查看,模版裏幾乎可以設定我們需要的所有功能

技術分享圖片

技術分享圖片

(2)在模版裏創建應用集,應用集的作用就是將眾多的監控項進行一個分類,方便我們的管理

技術分享圖片

技術分享圖片

技術分享圖片

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

技術分享圖片

技術分享圖片

(4)監控項裏的鍵值我們到底要如何寫?我們需要學會照葫蘆畫瓢,選擇一個系統模版Template OS Linux查看

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

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

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

(1)avg

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

舉例:

avg(5):最後5秒的平均值

avg(#5):表示最近5次得到值的平均值

avg3600,86400):表示一天前的一個小時的平均值

如果僅有一個參數,表示指定時間的平均值,從現在開始算起,如果有第二個參數,表示漂移,從第二個參數前開始算時間,#n表示最近n次的值

(2)last

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

last(0)等價於last(#1
last(#3)表示最近第3個值(並不是最近的三個值)
本函數也支持第二個參數time_shift,例如last0,86400)返回一天前的最近的值。
如果在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 ===>表示現在獲取的值如果和之前的不同就告警

例如:

技術分享圖片

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

(1)創建一個觸發器

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

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

(2)進行表達器測試

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

表達式測試成功後,我們創建完畢即可

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

技術分享圖片

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

技術分享圖片

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

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

技術分享圖片

技術分享圖片

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

技術分享圖片

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

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

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

到這裏就創建完畢了

二,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

技術分享圖片

技術分享圖片

技術分享圖片

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郵箱設置

技術分享圖片

技術分享圖片

技術分享圖片

測試郵件發送

技術分享圖片

技術分享圖片

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

技術分享圖片

3.1.5 腳本測試

技術分享圖片

技術分享圖片

3.1.6 修改zabbix_server.conf配置文件,將447行修改成如下所示

技術分享圖片

重啟zabbix_server服務

技術分享圖片

3.1.7 創建報警媒介

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

3.1.8 創建報警動作

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

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

技術分享圖片

技術分享圖片

3.1.9 QQ郵件報警測試

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

技術分享圖片

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

技術分享圖片

3.2自定義自動報警的內容

(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}

技術分享圖片

(2)樣例測試

技術分享圖片

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

相關語法:

UserParameter=key[*],command

#描述:

keykey的值在主機系統中必須是唯一的,其中*代表命令中接受的參數

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 我們先制作一個獲取數據的腳本

技術分享圖片

4.3.2 測試腳本

技術分享圖片

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

技術分享圖片

4.3.4 測試自定義的鍵值

技術分享圖片

再在前臺自定義一個監控項和觸發器

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

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

  • :Web操作很卡,容易出現502
  • :圖層斷裂
  • :開啟的進程(Pollar)太多,即使減少item數量,以後加入一定量的機器也會有問題

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

  • :用Proxy或者Node模式做分布式監控
  • :調整Agentd為主動模式

5.1 Agentd的配置調整

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

ServerActive=10.1.1.158

Hostname=10.1.1.158

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客戶端(主動式)”。
  • 這樣,只需要簡單的幾步,就完成了主動模式的切換,調整之後服務器不卡了,圖層不裂了,進程也少了。

技術分享圖片

Zabbix監控平臺-----深入理解zabbix