1. 程式人生 > >linux監控平臺搭建(3)添加自定義監控項目、配置郵件告警、測試警報、不發郵件的問題處理

linux監控平臺搭建(3)添加自定義監控項目、配置郵件告警、測試警報、不發郵件的問題處理

zabbix配置郵件告警

添加自定義監控項目

很多的監控項,我們都是在配置的模板中設置的,但是模板的選擇是不能完全滿足到我們生產中 的實際需求。所以我們可以自定義監控項目,通過編寫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)添加自定義監控項目、配置郵件告警、測試警報、不發郵件的問題處理