19.12 添加自定義監控項目python
19.13/19.14 配置郵件告警linux
19.15 測試告警 (包括主動與被動、總結)git
19.16 不發郵件的問題處理web
19.12 添加自定義監控項目:shell
不少的監控項目是在模板裏配置體現的。可是有時候會有一些個性化的需求。好比咱們就像知道某一個業務的數據,想天天的會員的活躍度,那這些數據其實是能夠經過數據庫裏的表的數字體現出來的。可是咱們zabbix模板是不可能提供這麼詳細的監控項目的。這時候就要寫腳本吧這個數字展示出來。而後經過一個監控項目再去造成圖表。這就是zabbix可讓咱們自定義的去監控一個項目:數據庫
~1.需求:監控某臺web的80端口鏈接數,並出圖vim
~2.兩步:1)zabbix監控中心建立監控項目;2)針對該監控項目以圖形展示瀏覽器
~3.對於第一步,須要到客戶端定義腳本bash
vim /usr/local/sbin/estab.sh //內容以下(路徑的話無所謂,名字也自定義)服務器
#!/bin/bash
##如下獲取80端口併發鏈接數的命令
netstat -ant |grep ':80 ' |grep -c ESTABLISHED #80端口下ESTABLISHED狀態的鏈接數有多少個(正常一臺服務器數量不會超過100)
~4.chmod 755 /usr/local/sbin/estab.sh
#目的是給zabbix執行,因此要設置權限
~5.客戶端上編輯配置文件 vim /etc/zabbix/zabbix_agentd.conf//增長
UnsafeUserParameters=1 //表示使用自定義腳本
UserParameter=my.estab.count[*],/usr/local/sbin/estab.sh
#my.estab.count這個名字是在web界面下,鍵值那一欄裏填的要保持一致
#[*]表示參數爲空。若是有參數就寫進去,以逗號分隔
//自定義監控項的key爲my.estab.count,後面的[*]裏面寫腳本的參數,若是沒有參數則能夠省略,腳本爲/usr/local/sbin/estab.sh
~6.重啓zabbix-agent服務 systemctl restart zabbix-agent
~7.首先到服務端驗證,執行命令
zabbix_get -s 192.168.208.128 -p 10050 -k 'my.estab.count'
#zabbix_get爲命令行工具。收跟客戶端的數字是同樣的,爲0
~8.而後在zabbix監控中心(瀏覽器)配置增長監控項目
鍵值寫my.estab.count #就是咱們在~05.步驟,配置客戶端文件所設置額名字,要與他保持一致
~9.添加該項目後,到「監測中」 「最新數據」查看剛添加的項目是否有數據出現
~10.有了數據就能夠添加圖形了
「配置」「主機」 「圖形」 「建立圖形」
實例:
[root@axinlinux-02 ~]# vi /usr/local/sbin/estab.sh
#!/bin/bash
##如下獲取80端口併發鏈接數的命令
netstat -ant |grep ':80 ' |grep -c ESTABLISHED
[root@axinlinux-02 ~]# netstat -ant |grep ':80 ' |grep -c ESTABLISHED
0 #先在客戶端上這個命令,先出這個數字。在跟後面的服務端操做的數字是否一致
[root@axinlinux-02 ~]# chmod 755 /usr/local/sbin/estab.sh
[root@axinlinux-02 ~]# vi /etc/zabbix/zabbix_agentd.conf
### Option: UnsafeUserParameters
# Allow all characters to be passed in arguments to user-defined parameters.
# The following characters are not allowed:
# \ ' " ` * ? [ ] { } ~ $ ! & ; ( ) < > | # @
# Additionally, newline characters are not allowed.
# 0 - do not allow
# 1 - allow
#
# Mandatory: no
# Range: 0-1
# Default:
# UnsafeUserParameters=0 #搜索UnsafeUserParameters。在這一行下面定義
UnsafeUserParameters=1
### Option: UserParameter
# User-defined parameter to monitor. There can be several user-defined parameters.
# Format: UserParameter=<key>,<shell command>
# See 'zabbix_agentd' directory for examples.
#
# Mandatory: no
# Default:
# UserParameter= #搜索 UserParameter。在這一行下面定義
UserParameter=my.estab.count[*],/usr/local/sbin/estab.sh
[root@axinlinux-02 ~]# systemctl restart zabbix-agent
[root@axinlinux-01 ~]# zabbix_get -s 192.168.208.130 -p 10050 -k 'my.estab.count'
0 #這個數字對應客戶端的一開始測試的數字
而後下面咱們再在監控中心,增長這個監控項目
添加完監控項,咱們還要給他作圖形,由於這是咱們的需求
以上完成需求。若是咱們的網站訪問量很大,每隔30秒就會出一次數據
那麼咱們還能夠添加觸發器:
以上,其中表達式添加如何選以下圖:
以上,知足咱們設置的條件就會報警(咱們設置的警告級別)。至於怎麼報警後面咱們在講
總結:首先咱們要經過腳本得到出這個數字,由於咱們成圖的這個要求都是這個數字。寫完腳本再給權限,而後zabbix1 get這個工具能在服務端得到這個數字。而後再監控中心得到這個監控項,而後去建立圖形。有須要報警的話再建立觸發器
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
19.13/19.14 配置郵件告警:
~1.使用163或者QQ郵箱發告警郵件
~2.首先登陸你的163郵箱,設置開啓POP三、IMAP、SMTP服務
~3.開啓並記錄受權碼
~4.而後到監控中心設置郵件告警
「管理」,「報警媒介類型」,「建立媒體類型」
{ALERT.SENDTO} ,{ALERT.SUBJECT},{ALERT.MESSAGE}
#並在腳本參數裏添加這三個參數
{ALERT.SENDTO}表示發給誰,就是你接受郵件的郵箱地址
{ALERT.SUBJECT}是主題
{ALERT.MESSAGE}是郵件內容
以上這三個分佈在咱們的pytion腳本的三個參數裏,等會會在命令行下測試
~5.建立報警腳本mail.py(配置文件裏定義的AlertScriptsPAth定義的,就是咱們的mail.py文件必需要放在他定義的這個路徑下)
vim /usr/lib/zabbix/alertscripts/mail.py//內容參考https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D22Z/mail.py
~6.chmod 755 /usr/lib/zabbix/alertscripts/mail.py #!!很是重要
~7.python mail.py wangxinlinux@163.com "這是一封測試的郵件" "linux21:41"
#測試能不能發郵件,並回到郵箱裏檢查
~8.建立一個接受告警郵件的用戶,「管理」,「用戶」,「建立用戶」,「報警媒介」,類型選擇「baojing」,注意用戶的權限,若是沒有須要到用戶組去設置權限
~9.設置動做(意思就是觸發了規則,要作什麼,郵件或是短信等等),「配置」,「動做」,「建立動做」,名稱寫「sendmail」(自定義),「操做」頁面,內容以下
HOST:{HOST.NAME} {HOST.IP} #定義的hostname
TIME:{EVENT.DATE} {EVENT.TIME} #發生的日期和時間
LEVEL:{TRIGGER.SEVERITY} #示警度。剛剛定義的未分類
NAME:{TRIGGER.NAME} #咱們以前定義的KEY,是哪一個觸發器觸發了告警
messages:{ITEM.NAME}:{ITEM.VALUE} #告警的時候會出現什麼樣的狀態碼
ID:{EVENT.ID} #這個事件的ID
「新的觸發條件」,A維護狀態 非在 維護,B觸發器示警度>=未分類
「操做」,選擇發送的用戶爲剛建立的用戶,僅送到選擇「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」
~10.測試告警
實例:
開啓服務後,咱們在去監控中心設置郵件告警
而後回到linux01機器上來:
[root@axinlinux-01 ~]# vi /usr/lib/zabbix/alertscripts/mail.py #建立這個python腳本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' #由於用的163,因此定義爲163
gport = 25 #25端口,不加密的那個
try:
# msg = MIMEText(unicode(content).encode('utf-8')) //若是發送的郵件有亂碼,能夠嘗試把這行改爲以下:
msg = MIMEText(content,'plan','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]
##定義QQ郵箱的帳號和密碼,你須要修改爲你本身的帳號和密碼(請不要把真實的用戶名和密碼放到網上公開,不然你會死的很慘)
sendqqmail('wangxin@163.com','***********','wangxin@163.com',to,subject,content)
郵箱 郵箱密碼 郵箱
if __name__ == "__main__":
main()
#####腳本使用說明######
#1. 首先定義好腳本中的郵箱帳號和密碼
#2. 腳本執行命令爲:python mail.py 目標郵箱 "郵件主題" "郵件內容"
[root@axinlinux-01 ~]# chmod 755 /usr/lib/zabbix/alertscripts/mail.py #必定要記得改權限,否則那不可以報警
[root@axinlinux-01 alertscripts]# python mail.py wangxinlinux@163.com "這是一封測試的郵件" "linux21:41" #咱們測試一下能不能發郵件。並回到163郵箱裏檢查是否收到這封郵件
而後接下來,咱們就要建立一個接受郵件的用戶了(點擊建立用戶):
以上用戶設置完
咱們還要設置他的報警媒介:
以上,報警媒介設置完
咱們還要設置他的用戶組權限。要去用戶組裏去設置:
以上咱們,設置了全部組的權限。(選擇完成過別忘記點添加)
以上,別忘了,咱們再去檢查一下全部組的權限是否是讀寫。很重要!!
而後去設置動做:
以上設置動做、操做、恢復動做
以上所有配置郵箱告警就已完成
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
19.15 測試告警:
~~擴展補充
更改監控項的主動與被動:
點擊模板,axin那一行裏點監控項,選擇一項。以下圖:
~~總結:
告警發郵件
1.163郵箱開啓服務,並記錄受權碼。受權碼要寫到到腳本里面的
2.監控中心設置郵件告警。首先作一個告警媒介。實驗中名字就叫 baojing,注意名字與linux上的腳本名字(mail.py)一致,三個參數寫對而且順序不能改
3.在linux上配置mail.py腳本。路徑要搞對/usr/lib/zabbix/alertscripts/這個路徑下建立mail.py(固然名字自定義)
4.千萬記得配置完的mail.py這個腳本權限改成755
5.配置用戶。要在用戶組權限裏把這個用戶的權限改成讀寫,由於咱們要把這個用戶加入到組裏面(組的權限也要是讀寫)。這個用戶要加入到組裏面(咱們實驗中加入到了admin*組裏面去了)。而且報警媒介再次檢查權限與郵箱地址,而後測試,在linux上命令行給本身發一封測試郵件
6.動做。建立的時候,名稱自定義,條件保持默認。操做項裏,格式複製筆記裏面的,還要加 新的(就是定義給誰發郵件)、僅送到選擇咱們設置的 baojing 這個告警媒介。恢復操做項,格式同樣複製筆記裏的,還要加 新的 (給誰發郵件)、僅送到選擇咱們設置的 baojing
7.測試。咱們人爲的搞個觸發器出來
好比系統負載當他小於1的時候就告警(正常是0,沒有負載)。故意的搞錯讓他告警發郵件。關注儀表盤的最近20個問題這一欄
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
19.16 不發郵件的問題處理:
~~出現問題幾個排查項:
1.保證腳本能發郵件、而且有權限
2.檢查報警媒介有沒有配置對
3.查看用戶。報警媒介、權限
4.動做。條件保持默認便可。操做項(給誰發)、恢復操做項(給誰發)
以上若都沒問題,只能重作一遍,有多是zabbix的bug