linux監控平臺搭建(3)添加自定義監控項目、配置郵件告警、測試警報、不發郵件的問題處理
很多的監控項,我們都是在配置的模板中設置的,但是模板的選擇是不能完全滿足到我們生產中 的實際需求。所以我們可以自定義監控項目,通過編寫Shell腳本或者python腳本,在腳本中獲取數據庫中所需業務的數,然後在通過在監控項裏添加這個腳本,將腳本獲取到的數目以圖表的形勢展現。這樣就有利於運維人員及時發現和分析問題。
需求:
需求:監控某臺web的80端口連接數,並出圖
兩步:1)zabbix監控中心創建監控項目;2)針對該監控項目以圖形展現
對於第一步,需要到客戶端定義腳本
1.定義腳本,編寫內容獲取80端口連接數;
vim /usr/local/sbin/estab.sh //內容如下
#!/bin/bash
##獲取80端口並發連接數,ESTABLISHED的意思是建立連接。表示兩臺機器正在通信。
netstat -ant |grep ':80 ' |grep -c ESTABLISHED
(LISTENING狀態
FTP服務啟動後首先處於偵聽(LISTENING)狀態。
CLOSE_WAIT
對方主動關閉連接或者網絡異常導致連接中斷,這時我方的狀態會變成CLOSE_WAIT 此時我方要調用close()來使得連接正確關閉
TIME_WAIT
我方主動調用close()斷開連接,收到對方確認後狀態變為TIME_WAIT。)
因為客戶端的還未有其他機器進行web連接,所以連接數還是為0。
2.修改腳本權限,否者zabbix用戶無法執行:
chmod 755 /usr/local/sbin/estab.sh
3.客戶端上編輯配置文件 vim /etc/zabbix/zabbix_agentd.conf//增加內容
UnsafeUserParameters=1 //表示可以使用自定義腳本
UserParameter=my.estab.count[*],/usr/local/sbin/estab.sh
//自定義監控項的key為my.estab.count,這個是在zabbix裏配置監控項中鍵值的名字(可自定),後面的[*]裏面寫腳本的參數(多個參數使用逗號分隔),如果沒有參數則可以省略使用*代替,腳本為/usr/local/sbin/estab.sh
4.重啟zabbix-agent服務 systemctl restart zabbix-agent
服務端上測試:
1.執行測試腳本測試,是否能正常取得值和返回值。
命令:zabbix_get -s 192.168.136.134 -p 10050 -k 'my.estab.count'
(使用zabbix_get命令可對服務端進行連接)
在執行這一步之前,首先要判斷客戶端和服務端機器是否存在防火墻規則和SELinux,如果存在則要把這些都關閉,
防火墻查看命令:iptables -nvL
SELinux查看 :getenforce
2. 然後在zabbix監控中心(瀏覽器)配置增加監控項目
(1)配置-->主機-->選擇操作的主機的監控項-->創建監控項
填寫完名稱和鍵值,其他都是可以保持默認,然後最後按添加。
(2)點擊圖像:
創建圖形-->填寫名稱-->添加(監控項處)-->選擇創建的監控項-->添加
添加完後選擇剛創建的圖形,選擇預覽就可以看到圖表數據。
3.創建觸發器,做報警用:
觸發器-->創建觸發器-->填寫名稱-->表達式添加-->選擇最後的添加即可
配置郵件告警
使用163.com郵箱。
1.登錄163郵箱,設置開啟POP3、IMAP、SMTP服務
設置授權密碼,用於警報發送時的郵箱密碼
2.到監控中心設置郵件告警
“管理”-->“報警媒介類型”-->“創建媒體類型”
{ALERT.SENDTO} ,{ALERT.SUBJECT},{ALERT.MESSAGE}
{ALERT.SENDTO} :接收郵件者
{ALERT.SUBJECT}:發送郵件的主題
{ALERT.MESSAGE}:發送郵件的內容
3.在服務端上編寫郵件告警腳本:mail.py創建報警腳本mail.py
那麽我們的腳本到底是放在哪裏才能備調用呢?其實在配置文件中有定義: vim /etc/zabbix/zabbix_server.conf
(默認情況下這個路徑下的目錄為空,所以要在這裏創建我們的腳本mail.py和編寫內容)
編寫腳本
vim /usr/lib/zabbix/alertscripts/mail.py
//內容參考https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D22Z/mail.py
腳本內容:
(用QQ郵箱報警:將腳本中的gport 端口號改下,還有smtp = smtplib.SMTP(gserver, gport)改為smtp = smtplib.SMTP_SSL(gserver, gport),其他方法一樣即可實現QQ郵箱報警)
#!/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/QQ郵箱的賬號和密碼,你需要修改成你自己的賬號和密碼(請不要把真實的用戶名和密碼放到網上公開,否則你會死的很慘)
sendqqmail('[email protected]','740183413abc','[email protected]',to,subject,content)
if __name__ == "__main__":
main()
// sendqqmail 這裏定義的是發送郵箱的發送者的信息
編寫完腳本要修改其權限:
chmod 755 /usr/lib/zabbix/alertscripts/mail.py
測試是否能成功發送郵件,服務端機器命令行下操縱
python /usr/lib/zabbix/alertscripts/mail.py [email protected] "this is test title" "success send mail"
因為腳本是用python寫的,所以要執行python語句,郵件接收者:[email protected];郵件主題:"this is test title";郵件內容:"success send mail"。
命令行下測試成功,腳本正常能使用。
4.創建郵箱賬戶(用於接收告警,郵箱用戶在Zabbix的用戶裏設置)
(1)設置用戶首先要有用戶群組,用戶群組可以創建也可以使用自帶的。修改用戶群組權限為讀寫,因為如果用戶群組無讀寫權限郵件也發不出去。
修改用戶群組權限步驟:點擊用戶群組-->選擇操作的用戶群組-->權限-->選擇“讀寫”-->選擇-->把出現內容全選-->添加。
(2)創建郵箱賬戶步驟:
首先填寫創建用戶處信息:
然後修改報警媒介:
5.配置-->動作
當觸發器,報警媒介等都創建後,要去配置動作,否者當出動觸發器的時候,郵件無法發送。
依次操作"配置"-->"動作"-->"創建動作"
(1)創建動作基本內容
(2)點擊"操作"
HOST:{HOST.NAME} {HOST.IP} :告警的主機名
TIME:{EVENT.DATE} {EVENT.TIME} :告警發生的日期時間
LEVEL:{TRIGGER.SEVERITY} :告警的示警度(未分類、告警、一般告警)
NAME:{TRIGGER.NAME} :哪個觸發器觸發告警
messages:{ITEM.NAME}:{ITEM.VALUE} :告警信息狀態碼
ID:{EVENT.ID} :事件的id
(3)點擊“恢復操作”
(當告警恢復時也發送信息)
測試警報
測試警報,故意創建一個監控主機的觸發器,簡單的填寫觸發器名稱,然後添加表達式,在表達式中設定監控項和功能值N,滿足功能值N時告警。最後添加即可
1.觀察監控狀態,是否發生警告問題和正常發送郵件:
(當動作處的信息為空白時可能是動作未定義對或者對腳本無權限)
2.問題查詢
添加媒介信息後繼續觀察問題是否正確發送,但是首先要把問題先恢復,操作也是監控主機的觸發器的表達式的條件。
(這樣恢復盡在實驗中操作)
要修改主機的問題告警頻率,需要在模板中修改。具體為操作具體監控主機的模板,選擇相應的監控項的數據更新時間
出現這種動作的完成後則,表示我們的問題就是能通過郵件的方式進行發送的。
如果問題不能發送郵件則,問題查詢:
(1)檢查郵件是否能進行發送
(2)檢測腳本是否給zabbix用戶有操作權限。
(3)查看郵件用戶的信息
linux監控平臺搭建(3)添加自定義監控項目、配置郵件告警、測試警報、不發郵件的問題處理