19.12添加自定義監控項目19.13/19.14 配置郵件告警19.15 測試告警19.16 不發郵件的問題處理
19.12 添加自定義監控項目
19.13/19.14 配置郵件告警
19.15 測試告警
19.16 不發郵件的問題處理
19.12 添加自定義監控項目
zabbix的監控項目是在模板裏面體現,但是有時候就會有些個性化的需求:某一個業務的數據,例如:運營人員想知道網站會員註冊量,會員活躍度;實際上,這些數據,都可以通過數據庫裏面的表的數字來體現,但是zabbix模板是不可能提供那麽相信的監控項目;遇到這種情況,就需要通過編程工具,寫成腳本,最後通過zabbix監控項目,形成圖表,就可以實現;
自定義的監控項目
需求:監控某臺web的80端口連接數,並出圖
解決方案:
zabbix監控中心創建監控項目;
針對該監控項目以圖形展現
對於第一步,需要到客戶端定義腳本
vim /usr/local/sbin/estab.sh //內容如下
[root@aming-02 ~]# vim /usr/local/sbin/estab.sh #!/bin/bash ##獲取80端口並發連接數netstat -ant |grep ‘:80 ‘ |grep -c ESTABLISHED ~ :wq
配置一個能夠讓zabbix用戶執行的權限,最終是zabbix用戶去執行這個腳本,如果不給zabbix用戶執行權限,最終得不到結果
[root@aming-02 ~]# vim /usr/local/sbin/estab.sh [root@aming-02 ~]# chmod 755 /usr/local/sbin/estab.sh [root@aming-02 ~]#
客戶端上編輯配置文件 vim /etc/zabbix/zabbix_agentd.conf //增加
UnsafeUserParameters=1 //表示使用自定義腳本,它就好比一個開關,如果等於0就沒有辦法去使用自定義的腳本
UserParameter=my.estab.count[],/usr/local/sbin/estab.sh //自定義監控項的key為my.estab.count,後面的[
my.estab.count 這個是zabbix監控項裏的一鍵值
# Mandatory: no # Range: 0-1# Default: # UnsafeUserParameters=0UnsafeUserParameters=1### Option: UserParameter -- 插入 -- # Mandatory: no # Default: # UserParameter= UserParameter=my.estab.count[*],/usr/local/sbin/estab.sh ####### LOADABLE MODULES ####### [root@aming-02 ~]# vim /etc/zabbix/zabbix_agentd.conf [root@aming-02 ~]#
重啟zabbix-agent服務 systemctl restart zabbix-agent
[root@aming-02 ~]# systemctl restart zabbix-agent[root@aming-02 ~]#
下面來驗證一下,自定義的腳本有沒有識別
首先到服務端驗證,執行命令
zabbix_get -s 192.168.133.130 -p 10050 -k ‘my.estab.count‘ // -p端口,-k 鍵值 web 管理頁
[root@aming-01 ~]# zabbix_get -s 192.168.202.132 -p 10050 -k ‘my.estab.count‘0[root@aming-01 ~]#
下面去 zabbix監控中心(瀏覽器)配置增加監控項目(並發鏈接數) 配置–>主機–>監控項->創建監控項
添加完之後還要做一個圖形,因為這是我們的需求
給他做一個觸發器
19.13 配置郵件告警(上)
使用163發告警郵件
首先登錄你的163郵箱,設置開啟POP3、IMAP、SMTP服務
設置授權碼,授權碼為cc293016
開啟並記錄授權碼(需要牢記)
然後到監控中心設置郵件告警
“管理”,“報警媒介類型”,“創建媒體類型” {ALERT.SENDTO}收件人,{ALERT.SUBJECT}主題,{ALERT.MESSAGE}郵件內容 //這三個東西分布在py腳本參數下
接下來去定義mail.py腳本了, 定義腳本報警 在配置文件定義 在服務端上定義
vim /etc/zabbix/zabbix_server.conf,搜索Alert,找到 AlertScriptsPath=/usr/lib/zabbix/alertscripts //這就是報警腳本所在路徑
[root@aming-01 ~]# vim /etc/zabbix/zabbix_server.conf### Option: UnreachableDelay## Mandatory: no# Range: 1-3600# Default:# UnreachableDelay=15### Option: AlertScriptsPath# Full path to location of custom alert scripts.# Default depends on compilation options.## Mandatory: no# Default:# AlertScriptsPath=${datadir}/zabbix/alertscriptsAlertScriptsPath=/usr/lib/zabbix/alertscripts### Option: ExternalScripts# Full path to location of external scripts.# Default depends on compilation options.## Mandatory: no# Default:# ExternalScripts=${datadir}/zabbix/externalscriptsExternalScripts=/usr/lib/zabbix/externalscripts### Option: FpingLocation[root@aming-01 ~]# vim /etc/zabbix/zabbix_server.conf [root@aming-01 ~]#
打開目錄裏面看下,是空的,所以我們進來目錄,創建一個mail.py
[root@aming-01 ~]# ls /usr/lib/zabbix/alertscripts[root@aming-01 ~]# [root@aming-01 ~]# cd /usr/lib/zabbix/alertscripts[root@aming-01 alertscripts]# [root@aming-01 alertscripts]# vi mail.py[root@aming-01 alertscripts]# vim mail.py#!/usr/bin/env python#-*- coding: UTF-8 -*-import os,sys reload(sys) sys.setdefaultencoding(‘utf8‘)import getoptimport smtplibfrom email.MIMEText import MIMETextfrom email.MIMEMultipart import MIMEMultipartfrom subprocess import * 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(‘[email protected]‘,‘cc293016‘,‘[email protected]‘,to,subject,content)if __name__ == "__main__": :wq
一定要記得 需要改下權限 mail.py
[root@aming-01 alertscripts]# vim mail.py[root@aming-01 alertscripts]# chmod 755 mail.py[root@aming-01 alertscripts]#
測試mail.py是否能發郵件
[root@aming-01 alertscripts]# chmod 755 mail.py[root@aming-01 alertscripts]# python mail.py [email protected] "This is the first test mail" "121212121212"[root@aming-01 alertscripts]#
已經收到了,時間也差不多
[root@aming-01 alertscripts]# date2017年 11月 18日 星期六 22:32:58 CST [root@aming-01 alertscripts]#
19.14 配置郵件告警(下)
創建一個接受告警郵件的用戶,“管理”,“用戶”,“創建用戶”
1,2,3 都是為了容易分辨填寫的,按習慣就好
4,選擇群組,歸屬於那個群組,這個涉及到之後的權限是否能發送郵件
5,密碼,用於,登錄,接收,發送郵件 (密碼是aming)
6,登錄系統時,默認顯示的界面
下面創建一個用戶,這個用戶是用來接收郵件的,得給指定郵箱,沒有人,發給誰?
添加完了之後,忘記給它設置郵箱
再來看看權限
只能去用去組裏面去改權限
註意,這個地方如果設置不對的話,最終報警也是收不到的,郵件收不到
再來看看這個用戶的權限
這裏發現報警媒介沒有添加
繼續添加報警媒介
用戶配置完了,還有一個地方需要配置,就是動作
創建動作
設置動作,“配置”,“動作”,“創建動作”,名稱寫“sendmail”(自定義),“操作”頁面,內容如下:
1、“維護狀態 非在 維護” // 維護狀態機器不進行發郵件
2、“觸發器示警度”>=未分類 // 即任何情況都進行發郵件
修改發郵件的模板
HOST:{HOST.NAME} {HOST.IP} //主機,IPTIME:{EVENT.DATE} {EVENT.TIME} //時間LEVEL:{TRIGGER.SEVERITY} //示警度NAME:{TRIGGER.NAME} //那個觸發器messages:{ITEM.NAME}:{ITEM.VALUE} //狀態ID:{EVENT.ID} //時間ID
“操作”,選擇發送的用戶為剛創建的用戶,僅送到選擇“baojing”
再來看恢復操作
切換到“恢復操作”,把信息改成如下 (客戶端狀態恢復了,需要確認已經恢復狀態)
修改默認信息,和剛剛操作裏面是一樣的
HOST:{HOST.NAME} {HOST.IP}TIME:{EVENT.DATE} {EVENT.TIME} LEVEL:{TRIGGER.SEVERITY} NAME:{TRIGGER.NAME} messages:{ITEM.NAME}:{ITEM.VALUE} ID:{EVENT.ID}
咱們報警的準備的工作已經做好了,剩下的就是要驗證一下,到底設置的報警有沒有生效
19.15 測試告警
下面來做實驗 ,手動調節觸發器,以實現報警,發郵件
檢查到上一節的aming用戶沒有設置報警媒介,給設置好
自定義配置一個觸發器,
查看郵箱
已經告警了,說明成功了,那現在我們把它改好
刷新瀏覽器 發現沒有問題了
19.16 不發郵件的問題處理
因為虛擬機,可能存在一些bug,第一次配置的時候,經常會出現zabbix發現問題,做了郵件告警,但是郵箱卻沒有收到郵件的問題;重新恢復快照以後再做一次,就又能正常發送郵件,接收郵件了 配置郵件告警總結
1、到163郵箱開啟SMTP服務,並記錄授權碼,沒有開啟,腳本裏面就沒有寫的密碼
2、設置郵件告警 首先設置一個報警媒介;三個參數必須填寫正確,順序也不能錯誤
3、編輯郵件告警腳本 /usr/lib/zabbix/alertscripts
路徑不能錯誤,必須在這個路徑下,添加一個腳本,創建好之後,記得給腳本755權限
4、配置用戶 配置用戶之前,把用戶群組的權限改一下,讓組有一個讀寫權限 用戶加到指定的群組裏 報警媒介,添加自己的郵箱,自己給自己發,這個成功率會比較高
5、配置動作 操作修改默認信息(發送郵件的格式),操作需要添加一個“新的”給誰發郵件;恢復操作同樣
6、測試一下告警是否能成功發送郵件 人為創建一個觸發器,設置一個系統最低運行都會觸發報警的觸發器 也可以在客戶端上斷開連接(停止客戶端的zabbix服務) PS: 客戶端主動模式和被動模式,在監控項裏,選擇一個監控項打開,選擇類型是客戶端主動,客戶端;客戶端主動即為主動模式,客戶端為被動模式
19.12添加自定義監控項目19.13/19.14 配置郵件告警19.15 測試告警19.16 不發郵件的問題處理