六十六、添加自定義監控項目、配置郵件告警、測試告警、不發郵件的問題處理
一、添加自定義監控項目
需求:監控某台web的80端口連接配接數,并出圖
思路:先寫一個腳本,能擷取到資料,因為成圖需要資料,再給這個腳本執行的權限,然後再用zabbix_get指令使服務端可以獲得這些資料,再到服務端建立監控項目,再建立圖形,有需要報警的再設定觸發器。
兩步:1)zabbix監控中心建立監控項目;2)針對該監控項目以圖形展現
對于第一步,需要到用戶端定義腳本,腳本名字位置都可以自定義
# vim /usr/local/sbin/estab.sh //内容如下
#!/bin/bash
##擷取80端口并發連接配接數
netstat -ant |grep ':80 ' |grep -c ESTABLISHED
//-nat:顯示網絡連結的狀态
檢視80端口下ESTABLISHED狀态的連結有多少個。
# chmod 755 /usr/local/sbin/estab.sh
用戶端上編輯配置檔案
# vim /etc/zabbix/zabbix_agentd.conf //增加
UnsafeUserParameters=1 //表示使用自定義腳本
UserParameter=my.estab.count[*],/usr/local/sbin/estab.sh
//自定義監控項的key(鍵值)為my.estab.count,後面的[*]裡面寫腳本裡面的參數,用逗号分割,如果沒有參數則用*代替即可,這個括号是固定格式;腳本為/usr/local/sbin/estab.sh
重新開機zabbix-agent服務 systemctl restart zabbix-agent
首先到服務端驗證,執行指令
# zabbix_get -s 192.168.93.131 -p 10050 -k 'my.estab.count'
//預設10050端口,做這個驗證,一定要保持網絡的通暢,沒有防火牆規則,沒有selinux。
然後在zabbix監控中心(浏覽器)主機裡配置建立監控項
填寫名稱和鍵值即可,其他暫時不改,鍵值寫my.estab.count,鍵值是可以自定義的。
添加該項目後,到“監測中” “最新資料”檢視剛添加的項目是否有資料出現
有了資料就可以添加圖形了
“配置”“主機” “圖形” “建立圖形”
再建立一個觸發器 最大連接配接數超過200時報警二、配置郵件告警
使用163或者QQ郵箱發告警郵件
首先登入你的163郵箱,設定開啟POP3、IMAP、SMTP服務
開啟并記住授權碼,這個密碼盡量複雜,因為發郵件的密碼就是這個。然後到監控中心設定郵件告警
“管理”,“報警媒介類型”,“建立媒體類型”
名稱和腳本名稱都可以設定自定義,類型選擇腳本
這三個參數分布在py腳本的參數裡,這個順序不能變。
{ALERT.SENDTO} 收件人
{ALERT.SUBJECT} 主題
{ALERT.MESSAGE} 郵件内容
服務端/etc/zabbix/zabbix_server.conf的zabbix配置檔案裡搜尋Alert可以看到AlertScriptsPath=/usr/lib/zabbix/alertscripts,是以腳本需要放到這個目錄下。
建立報警腳本mail.py
# vim /usr/lib/zabbix/alertscripts/mail.py //這是一個Python腳本,内容參考如下
#!/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.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]
##定義163郵箱的賬号和授權碼,你需要修改成你自己的賬号和密碼(請不要把真實的使用者名和密碼放到網上公開,否則你會死的很慘)
sendqqmail('[email protected]','aaaaaaaaaa','[email protected]',to,subject,content)
if __name__ == "__main__":
main()
#####腳本使用說明######
#1. 首先定義好腳本中的郵箱賬号和密碼
#2. 腳本執行指令為:python mail.py 目标郵箱 "郵件主題" "郵件内容"
# chmod 755 /usr/lib/zabbix/alertscripts/mail.py
測試一下這個腳本,發一封郵件到自己的郵箱,自己的郵箱能收到郵件,就代表這個發郵件的腳本寫對了。
建立一個接受告警郵件的使用者,zabbix監控中心web界面:
“管理”,“使用者”,“建立使用者”,
名字自定義,群組暫時先選Zabbix administrators組,語言中文;
“報警媒介”,類型選擇“baojing”,分類全選;
注意使用者的權限,如果沒有需要到使用者組去設定權限,
進入使用者群組,進入Zabbix administrators組,再點權限,再按照如下順序全選所有群組,再添加即可,權限将變成讀寫,使用者的權限也變成了讀寫。
設定動作,動作:觸發器觸發後所做的操作。
“配置”,“動作”,“建立動作”,名稱寫“sendmail”(自定義)
“新的觸發條件”,A維護狀态 非在 維護,B觸發器示警度>=未分類
“操作”頁面,預設資訊,内容如下
HOST:{HOST.NAME} {HOST.IP} Hostname
TIME:{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}
點選“新的”,“操作”,選擇發送的使用者為剛建立的使用者,僅送到選擇“baojing”
這個動作最後的狀态試已啟用
三、測試告警
測試1:
到自己的主機的觸發器裡建立一個自定義的觸發器
添加一個監控項:
最後添加這個觸發器即可。
然後到儀表闆檢視等待,這個動作啟用需要一點點時間,等一會看會不會成功:
這個動作的狀态一定要注意看,如果失敗,可以點選看一下是什麼原因,如果是空的,就可能是腳本沒有執行的權限,或者動作的條件沒有定義好。動作成功,163郵箱就立馬收到了郵件了。
測試2:
把觸發器裡的表達式,将<1改為>1,再将這個監控項的資料更新間隔改為10秒,過了10秒以後,儀表闆的告警(最近20個問題)便沒有了。
“監測中”,“問題”,最下方可以看到系統負載的問題狀态為已解決,還發送了兩封郵件。
總結:不發郵件檢查:
1.檢查腳本,用python指令發郵件試一試,成功代表腳本沒問題。
2.檢查使用者,報警媒介的收件人要寫對,權限一定要是讀寫。
3.檢查動作,條件,操作。
發送來的郵件,都是ID成對出現,就說明這是一對ID事件。