運維過程當中,常常會遇到一些個性化的需求,例如要統計網站天天活躍度數據,zabbix提供的模版不可以知足這樣的需求,咱們須要自定義編寫shell、python腳原本統計,而後把數據交給zabbix收集,再經過zabbix造成圖表展示出來。能夠經過統計web的80端口鏈接數實現網站活躍度統計python
一、zabbix-agent機器上編寫腳本:web
vim /usr/local/sbin/estab.sh #!/bin/bash ##獲取80端口併發鏈接數 netstat -ant |grep ':80 ' |grep -c ESTABLISHED chmod 755 /usr/local/sbin/estab.sh //修改該腳本的權限爲755
二、修改agent配置文件:/etc/zabbix/zabbix_agentd.conf,增長配置行shell
UnsafeUserParameters=1 //表示使用自定義腳本 UserParameter=my.estab.count[*],/usr/local/sbin/estab.sh //自定義監控項的key是my.estab.count,後面的[*]裏面寫腳本的參數,若是沒有參數則能夠省略
三、重啓zabbix-agentvim
systemctl restart zabbix-agent
四、在server端驗證自定義agent是否正常:使用zabbix-getbash
zabbix_get -s 192.168.87.130 -p 10050 -k 'my.estab.count' 0 //由於130服務器上沒有80端口被訪問,因此結果爲0。
五、在zabbix-web界面,建立監控項目、並作圖形展示服務器
配置-->主機-->監控項目-->建立監控項:名稱、鍵值:my.estab.count(agent配置定義的) 圖形-->名稱-->添加監控項-->觸發器-->建立-->告警設置-->監控項值大於200時告警。
咱們使用第三方郵箱進行告警郵件的發送,這裏使用163郵箱進行配置。併發
一、登陸163郵箱網頁版,開啓POP3/SMTP/IMAP服務,設置受權碼與zabbix進行通訊認證運維
二、建立告警郵件發送的python腳本:/usr/lib/zabbix/alertscripts 存放目錄是固定的測試
vim /usr/lib/zabbix/alertscripts/mail.py #!/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] //定義郵箱的帳號和密碼,你須要修改爲你本身的帳號和密碼 sendqqmail('lgs@163.com','aaaaaaa','lgs@163.com',to,subject,content) if __name__ == "__main__": main()
三、在zabbix-web界面中配置報警媒介:網站
管理-->報警媒介類型-->新建報警媒介類型-->名稱爲baojing-->腳本名:mail.py-->腳本參數分別爲:{ALERT.SENDTO}、{ALERT.SUBJECT}、{ALERT.MESSAGE}
四、新建告警觸發的用戶,增長用戶羣組讀寫權限
管理-->用戶-->新建用戶-->用戶名-->羣組選擇Zabbix administrators-->配置zabbix的密碼 報警媒介-->類型選擇-->新建立的報警媒介類型: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} #發生事件的id 發送的用戶-->選擇新建的用戶-->僅發送到:新建的報警媒介baojing 三、恢復操做-->修改默認信息與操做頁同樣、發送的用戶選擇新建的用戶、僅發送到新建的報警媒介baojing
六、自定義觸發器:選擇監控系統負載小於1時產生告警。
一、將觸發器的規則設置爲監控系統負載小於1,模擬產生問題。 二、切換至zabbix主頁,在最近20個問題欄目中進行觀察:zabbix監控到問題的產生,觸發了告警動做 三、查看郵箱,收到告警郵件:告警ID是20 四、將觸發器的規則設置爲監控系統負載大於1,模擬問題解決。zabbix系統發送恢復操郵件通知 五、查看郵箱,收到恢復郵件:告警ID也是20
七、若是告警郵件接收不到,咱們經過如下幾個方面來排查:
一、單獨測試郵件腳本,看看郵件功能是否正常,查看腳本的權限等是否755 二、檢查zabbix告警媒介設置 三、用戶、媒介、用戶組權限等是否正常 四、動做是否配置正常。 五、觸發條件規則是否知足。