zabbix的監控項目是在模板裏面體現,可是有時會有些個性化的需求。好比:某一個業務的數據,運營人員想知道網站會員註冊量,會員活躍度;實際上,這些數據,均可以經過數據庫裏面的表的數字來體現,可是zabbix模板不可能提供那麼詳細的監控項目;遇到這種狀況,就須要經過編程工具,寫成腳本,把數字統計出來,而後經過zabbix監控項目,造成圖表,就能夠實現分析天天的數據是多少。python
監控客戶端web的80端口鏈接數,並出圖linux
第一步:zabbix監控中心建立監控項目web
第二步:針對該監控項目以圖形展示數據庫
針對第一步,須要在客戶端定義腳本,將所需數據統計出來編程
vim /usr/local/sbin/estab.sh #!/bin/bash ##獲取80端口併發鏈接數 netstat -ant |grep ':80 ' |grep -c ESTABLISHED
容許客戶端執行這個腳本vim
chmod 755 /usr/local/sbin/estab.sh
vim /etc/zabbix/zabbix_agentd.conf 搜索 /UnsafeUserParameters 將# UnsafeUserParameters=0 改成UnsafeUserParameters=1 #表示使用自定義腳本 搜索 /UserParameter 將# UserParameter= 改成UserParameter=my.estab.count[*],/usr/local/sbin/estab.sh #表示自定義監控項的key爲my.estab.count,後面的[*]裏面寫腳本的參數,若是沒有參數則能夠省略,若是有參數寫入到 [ ] 裏面,用逗號分隔,腳本爲/usr/local/sbin/estab.sh
my.estab.count 這個是zabbix監控項裏的鍵值,即爲自定義腳本在zabbix監控中的名字bash
systemctl restart zabbix-agent.service
[root@linux-5 ~]# zabbix_get -s 192.168.88.10 -p 10050 -k 'my.estab.count' 0
-s 指定客戶端的IP地址併發
-p 指定端口,不加-p,默認就是10050端口運維
-k 表示 鍵值工具
返回了具體數值,與直接執行腳本所得結果一致,說明客戶端腳本已生效
完成在客戶端的腳本定義後,須要在監控中心建立監控項
在配置-->主機-->lem-02的監控項,點擊建立監控項
填寫相應信息
在添加監控項後,還須要添加圖形,將監控所得數據製成圖表,配置-->主機-->圖形-->建立圖形
完成監控項定義後,如需告警,可爲其建立觸發器
該觸發器表明了當自定義監控項數值大於200,產生警告級別的告警
實驗可使用163或者QQ郵箱發告警郵件,首先登陸163或qq郵箱,設置開啓POP三、IMAP、SMTP服務,開啓並記錄受權碼
報警腳本所在位置可經過查看zabbix服務的配置文件獲得
vim /etc/zabbix/zabbix_server.conf 搜索 /alert AlertScriptsPath=/usr/lib/zabbix/alertscripts #報警腳本所在路徑
vim /usr/lib/zabbix/alertscripts/mail.py #!/usr/bin/env python #-*- coding: UTF-8 -*- import os,sys reload(sys) sys.setdefaultencoding('utf8') import getopt import smtplib from email.MIMEText import MIMEText from email.MIMEMultipart import MIMEMultipart from subprocess import * def sendqqmail(username,password,mailfrom,mailto,subject,content): gserver = 'smtp.qq.com' #若是是163郵箱則是smtp.163.com ##定義發郵件類型 gport = 25 try: msg = MIMEText(unicode(content).encode('utf-8')) msg['from'] = mailfrom msg['to'] = mailto msg['Reply-To'] = mailfrom msg['Subject'] = subject smtp = smtplib.SMTP(gserver, gport) smtp.set_debuglevel(0) smtp.ehlo() smtp.login(username,password) smtp.sendmail(mailfrom, mailto, msg.as_string()) smtp.close() except Exception,err: print "Send mail failed. Error: %s" % err def main(): to=sys.argv[1] subject=sys.argv[2] content=sys.argv[3] ##定義QQ郵箱的帳號和密碼,你須要修改爲你本身的帳號和密碼(請不要把真實的用戶名和密碼放到網上公開,不然會死的很慘) sendqqmail('163或QQ郵箱','受權碼','163或QQ郵箱',to,subject,content) if __name__ == "__main__": main() #####腳本使用說明###### #1. 首先定義好腳本中的郵箱帳號和密碼 #2. 腳本執行命令爲:python mail.py 目標郵箱 "郵件主題" "郵件內容"
chmod 755 /usr/lib/zabbix/alertscripts/mail.py
python mail.py "收件人郵箱" "標題" "內容"
執行腳本後沒有任何提示就表示發郵件成功
這時打開qq郵箱,會看到郵件
若是發送郵件內容爲中文,且收到爲亂碼,這是由於在zabbix使用的是utf-8的字符集,而在郵箱裏使用的是GBK字符集,因此會亂碼
建立一個接受告警郵件的用戶(用於接收郵件),在建立用戶的前提是建立一個用戶組,用戶組可使用已經存在的, 因此這裏直接建立用戶,管理-->用戶-->建立用戶
要將管理員與告警郵箱關聯起來,才能使運維zabbix平臺的運維人員時可以收取告警郵件
管理-->用戶-->選擇相應用戶-->報警媒介
注意用戶的權限,若是沒有權限,郵件是無法發的,更改權限要到用戶組裏 (管理-->用戶羣組)進行修改,默認的權限是無,須要修改羣組,給予權限。
配置了觸發器,那麼觸發後zabbix服務應該去作什麼,須要爲服務配置動做。配置-->動做-->建立動做
維護狀態 非在 維護,表示處於維護狀態的機器不進行發郵件的動做
觸發器示警度(也就是信息,警告,通常嚴重...)大於等於未分類(未分類 表示 全部狀態)時,全部狀態均會發送郵件
存在多種條件時,可採用與/或邏輯運算的形式知足觸發條件
當發生告警的問題被解決後,能夠選擇設置恢復操做,予以通知
最後動做的狀態是已啓用
建立觸發器,以實現測試告警的目的
回到監控中心,主頁——>最近20個問題
若是提示爲啓用中,證實發現問題,正在啓用告警,顯示問完成,就證實已經發送郵件告警;如上圖所示,實驗成功。
查看郵箱,會看到收到了告警郵件
測試郵件告警成功
這時想要解決這個問題,只要將觸發器條件數值調整 >1 便可,再來查看監控中心,就會發現問題消失了,而且會給郵箱發送 OK 的郵件
到163郵箱或QQ郵箱開啓SMTP服務,並記錄受權碼,沒有開啓,腳本里面就沒法去寫受權碼
首先設置一個報警媒介,三個參數必須填寫正確,順序也不能錯誤
/usr/lib/zabbix/alertscripts目錄下 #路徑不能錯誤,必須在該路徑下,添加一個腳本
建立好以後,給腳本755權限,不然zabbix用戶是沒法調用這個腳本的
客戶端主動模式和被動模式,在監控項裏,選擇一個監控項打開,選擇類型是Zabbix客戶端或者Zabbix客戶端(主動式),Zabbix客戶端(主動式)即爲主動模式,Zabbix客戶端爲被動模式
注:觸發器不能用中文命名,否則郵件顯示亂碼