原創qq5a6d861adfe892018-04-15 17:31:28評論(0)314人閱讀python
添加自定義監控項目linux
不少的監控項,咱們都是在配置的模板中設置的,可是模板的選擇是不能徹底知足到咱們生產中 的實際需求。因此咱們能夠自定義監控項目,經過編寫Shell腳本或者python腳本,在腳本中獲取數據庫中所需業務的數,而後在經過在監控項裏添加這個腳本,將腳本獲取到的數目以圖表的形勢展示。這樣就有利於運維人員及時發現和分析問題。git
需求:web
需求:監控某臺web的80端口鏈接數,並出圖數據庫
兩步:1)zabbix監控中心建立監控項目;2)針對該監控項目以圖形展示vim
對於第一步,須要到客戶端定義腳本瀏覽器
1.定義腳本,編寫內容獲取80端口鏈接數;bash
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郵箱,設置開啓POP三、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('15521787110@163.com','740183413abc','15521787110@163.com',to,subject,content)
if __name__ == "__main__":
main()
// sendqqmail 這裏定義的是發送郵箱的發送者的信息
編寫完腳本要修改其權限:
chmod 755 /usr/lib/zabbix/alertscripts/mail.py
測試是否能成功發送郵件,服務端機器命令行下操縱
python /usr/lib/zabbix/alertscripts/mail.py 15521787110@163.com "this is test title" "success send mail"
由於腳本是用python寫的,因此要執行python語句,郵件接收者:15521787110@163.com;郵件主題:"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)查看郵件用戶的信息