一,Zabbix Web操做深刻html
(1)建立一個模版,全部的功能幾乎都是在模版中定義的前端
點進新建立的模版查看,模版裏幾乎能夠設定咱們須要的全部功能mysql
(2)在模版裏建立應用集,應用集的做用就是將衆多的監控項進行一個分類,方便咱們的管理nginx
(3)在模版裏建立一個zabbix自帶的監控項web
(4)監控項裏的鍵值咱們到底要如何寫?咱們須要學會照葫蘆畫瓢,選擇一個系統模版Template OS Linux查看sql
(5)固然也能夠自定義監控項的鍵值,可是並不推薦這樣。由於,都是本身寫太慢了。系統自帶了不少鍵值本身要學會利用服務器
1.2 Zabbix Web下觸發器與表達式的編寫方法 app
(1)avgssh
參數:秒或#num
支持類型:float,int
做用:返回一段時間的平均值tcp
舉例:
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 ===>表示如今獲取的值若是和以前的不一樣就告警
例如:
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報警媒介類型設置和告警動做、頻率設置
命令/參數 | 內容 | 解釋說明 |
---|---|---|
/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郵箱設置
測試郵件發送
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}故障!
#內容
告警主機: ;{HOSTNAME1}<br/>
告警時間: ;{EVENT.DATE} {EVENT.TIME}<br/>
告警等級: ;{TRIGGER.SEVERITY}<br/>
告警信息: ;{TRIGGER.NAME}<br/>
告警項目: ;{TRIGGER.KEY1}<br/>
問題詳情: ;{ITEM.NAME} {ITEM.VALUE}<br/>
當前狀態: ;{TRIGGER.STATUS} {ITEM.VALUE1}<br/>
事件ID: ;{EVENT.ID}
(2)樣例測試
有時候當咱們監控的項目在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。
讓key也接受參數的方法使item添加時更具有了靈活性,例如系統預約義key:vm.memory.size[],其中的mode模式就是用戶要接受的參數,當咱們填寫爲free時則返回的爲內存的剩餘大小,若是咱們填入的爲userd時這返回的是內存已經使用的大小。
相關語法:
UserParameter=key[*],command
#描述:
key:key的值在主機系統中必須是惟一的,其中*表明命令中接受的參數
command:客戶端系統中可執行的命令
#舉例:
UserParameter=ping[*],echo $1
ping[0]:此時0就是*,也就是傳入參數是0,$1也就是0,所以表達式將一直返回‘0’
ping[aaa]:此時aaa就是*,也就是傳入參數是aaa,$1也就是aaa,所以表達式將一直返回‘aaa’
咱們作一個能夠根據條件獲取內存數值大小的監控項mem_check
當咱們鍵值爲mem_check[free]時,獲取剩餘可用內存大小
當咱們鍵值爲mem_check[used]時,獲取實際佔用內存大小
當咱們鍵值爲mem_check時,獲取總內存大小
4.3.2 測試腳本
4.3.3 後臺自定義一個監控項的鍵值
4.3.4 測試自定義的鍵值
再在前臺自定義一個監控項和觸發器
默認狀況下,zabbix server會直接去每一個agent上抓取數據,這對於agent來講,是被動模式,也是默認的一種獲取數據的方式,可是,當zabbix server監控主機數量過多的時候,由server端去抓取agent上的數據,zabbix server會出現嚴重的性能問題,主要表現以下:
因此,下面主要往兩個優化方向考慮:
修改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,關閉被動模式。
若是開啓了agent端的主動發送數據模式,須要在zabbix Server端修改以下兩個參數,保證性能。
StartPollers=10 #把這個zabbix Server主動收集數據進程減小一些。
StartTrappers=200 #把這個負責處理Agentd推送過來的數據的進程開大一些。
- 所以收集數據的模式發生了變化,所以須要把全部的監控項的類型由原來的「zabbix客戶端」改爲「zabbix客戶端(主動式)」。
- 這樣,只須要簡單的幾步,就完成了主動模式的切換,調整以後服務器不卡了,圖層不裂了,進程也少了。