添加自定義監控項目

添加自定義監控項目python

  • 需求:監控某臺web的80端口鏈接數,並出圖
  • 兩步:1)zabbix監控中心建立監控項目;2)針對該監控項目以圖形展示
  • 對於第一步,須要到客戶端定義腳本
  • vim /usr/local/sbin/estab.sh //內容以下
#!/bin/bash
##獲取80端口併發鏈接數
netstat -ant |grep ':80 ' |grep -c ESTABLISHED
  • chmod 755 /usr/local/sbin/estab.sh
  • 客戶端上編輯配置文件 vim /etc/zabbix/zabbix_agentd.conf//增長
UnsafeUserParameters=1  //表示使用自定義腳本
UserParameter=my.estab.count[*],/usr/local/sbin/estab.sh 
//自定義監控項的key爲my.estab.count,後面的[*]裏面寫腳本的參數,若是沒有參數則能夠省略,腳本爲/usr/local/sbin/estab.sh
  • 重啓zabbix-agent服務 systemctl restart zabbix-agent
  • 首先到服務端驗證,執行命令
  • zabbix_get -s 192.168.180.135 -p 10050 -k 'my.estab.count‘
  • 而後在zabbix監控中心(瀏覽器)配置增長監控項目
  • 鍵值寫my.estab.count
  • 添加該項目後,到「監測中」 「最新數據」查看剛添加的項目是否有數據出現
  • 有了數據就能夠添加圖形了
  • 「配置」「主機」 「圖形」 「建立圖形」

添加自定義監控項目配置

  • zabbix的監控項目是在模板裏面體現,可是有時候就會有些個性化的需求:某一個業務的數據,好比:運營人員想知道網站會員註冊量,會員活躍度;實際上,這些數據,均可以經過數據庫裏面的表的數字來體現,可是zabbix模板是不可能提供那麼詳細的監控項目;遇到這種狀況,就須要經過編程工具,寫成腳本,把數字展示出來,而後經過zabbix監控項目,造成圖表,就能夠實現分析天天的數據是多少;
  • 需求 
    • 監控某臺web的80端口鏈接數,並出圖
  • 解決方法: 
    • 1)zabbix監控中心建立監控項目;
    • 2)針對該監控項目以圖形展示;
  • 首先須要在客戶端(B機器)定義腳本
[root@yong-02 ~]# vim /usr/local/sbin/estab.sh

#!/bin/bash
##獲取80端口併發鏈接數
netstat -ant |grep ':80 ' |grep -c ESTABLISHED
  • 更改一個可以讓zabbix用戶執行的權限  chmod 755 /usr/local/sbin/estab.sh
B機器
[root@yong-02 ~]# chmod 755 /usr/local/sbin/estab.sh 
[root@yong-02 ~]# ll /usr/local/sbin/estab.sh 
-rwxr-xr-x 1 root root 91 7月  10 22:43 /usr/local/sbin/estab.sh
  • 在客戶端上編輯zabbix配置文件
B機器
[root@yong-02 ~]# vim /etc/zabbix/zabbix_agentd.conf 

搜索 /UnsafeUserParameters

將# UnsafeUserParameters=0
改成UnsafeUserParameters=1  
#目的是使用自定義腳本

搜索 /UserParameter
將# UserParameter=
改成UserParameter=my.estab.count[*],/usr/local/sbin/estab.sh 
#表示自定義監控項的key爲my.estab.count,後面的[*]裏面寫腳本的參數,若是沒有參數則能夠省略,若是有參數寫入到 [ ] 裏面,用逗號分隔,腳本爲/usr/local/sbin/estab.sh
  • my.estab.count 這個是zabbix監控項裏的 鍵值
  • 客戶端(B機器),重啓 zabbix-agent 服務
B機器
[root@yong-02 ~]# systemctl restart zabbix-agent.service
  1. 檢查自定義的腳本是否被識別
  2. 到服務端(A機器)驗證,執行命令,server沒法獲取數據
  • zabbix_get -s 192.168.180.135 -p 10050 -k 'my.estab.count' 
    • -s 指定客戶端的IP地址
    • -p 指定端口,不加-p,默認就是10050端口
    • -k 表示 鍵值
A機器
[root@yong-01 ~]# zabbix_get -s 192.168.180.135 -p 10050 -k 'my.estab.count'
0
  • 如果以前在客戶端(B機器)寫的腳本權限不設置成 755 ,這裏的server獲取數據時,就會提示 權限不夠
  1. 在獲取數據的時候,必定要保證數據的一般,防火牆和selinux都須要去設置,不然就會有可能沒法獲取數據
  2. 在zabbix監控中心(瀏覽器)配置增長監控項目,在 配置 ——> 主機 ——>建立監控項
  • 名稱 寫爲:併發連接數
  • 類型 :選擇zabbix客戶端
  • 鍵值 寫:my.estab.count——>鍵值可自定義,是不固定的
  • 單位 :保持默認
  • 歷史數據保留時長(單位天):默認保持90天
  • 應用集:能夠不選擇,由於沒有定義應用集

  • 在添加該項目後,還須要添加圖形,配置——>主機——>圖形——>建立圖形

  • 名稱爲建立併發連接數——>而後添加監控項 併發連接數——>點擊添加

 

  • 在圖形中,查看新建立的圖形,而後選擇預覽
  • 如果網站訪問量很大,那麼每隔30秒就能夠看到一個數字,時間長了,就可查看到網站訪問量的趨勢

  • 作一個觸發器,選擇觸發器——>建立觸發器
  • 當併發大於200,作警告級別

 

  • 這樣觸發器就配置成功

總結:

  • 在服務端上獲取數值(經過腳本實現),給予服務端訪問腳本的權限,在zabbix監控中心添加對應的監控項目(輸入鍵值),便可

配置郵件告警

  • 使用163或者QQ郵箱發告警郵件
  • 首先登陸你的163郵箱,設置開啓POP三、IMAP、SMTP服務
  • 開啓並記錄受權碼
  • 而後到監控中心設置郵件告警
  • 「管理」,「報警媒介類型」,「建立媒體類型」
  • {ALERT.SENDTO} ,{ALERT.SUBJECT},{ALERT.MESSAGE}

輸入圖片說明

  • 建立報警腳本mail.py
  • vim /usr/lib/zabbix/alertscripts/mail.py//內容參考
  • chmod 755 /usr/lib/zabbix/alertscripts/mail.py
  • 建立一個接受告警郵件的用戶,「管理」,「用戶」,「建立用戶」,「報警媒介」,類型選擇「baojing」,注意用戶的權限,若是沒有須要到用戶組去設置權限
  • 設置動做,「配置」,「動做」,「建立動做」,名稱寫「sendmail」(自定義),「操做」頁面,內容以下
HOST:{HOST.NAME} {HOST.IP}
TIME:{EVENT.DATE}  {EVENT.TIME} 
LEVEL:{TRIGGER.SEVERITY} 
NAME:{TRIGGER.NAME}
messages:{ITEM.NAME}:{ITEM.VALUE}
ID:{EVENT.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」
  • 測試告警

配置郵件告警

  • 首先須要一個郵箱,使用郵箱發郵件(163郵箱)
  • 訪問163郵箱,在第三方平臺上調用163郵箱發郵件,須要設置開啓POP三、IMAP、SMTP服務
  • 設置——POP3/IMAP/SMTP 
    • 第一次開啓POP3/IMAP/SMTP服務會有短信驗證
    • 在驗證完以後還須要設置客戶端受權密碼(須要牢記),接下來發郵件的密碼就是受權密碼
  • 在寫腳本以前 進入zabbix的web界面——> 管理——> 報警媒介類型——>建立媒體類型
  • 在報警媒介類型裏面的自帶的 Email 使用不方便,因此本身寫python發郵件的腳本

 

  • 名稱:指的是報警媒介類型的名稱,自定義,這裏叫作報警
  • 類型:腳本
  • 腳本名稱:自定義,這裏叫作mail.py
  • 在py腳本參數下,三個參數都分佈在py的腳本里 
    • {ALERT.SENDTO} 表示收件人
    • {ALERT.SUBJECT} 表示郵件主題
    • {ALERT.MESSAGE} 表示郵件內容
  • 這時會看到成功添加「報警"報警媒介類型

 

  1. 要實現報警,首先py腳本能發出郵件
  2. 在服務端(A機器)建立報警腳本mail.py,查看報警腳本所在位置
A機器
[root@yong-01 ~]# vim /etc/zabbix/zabbix_server.conf 

搜索 /alert
AlertScriptsPath=/usr/lib/zabbix/alertscripts
#報警腳本所在路徑
  • 建立報警腳本mail.py,在/usr/lib/zabbix/alertscripts/目錄下是空的, 來建立,腳本內容參考
A機器
[root@yong-01 ~]# cd /usr/lib/zabbix/alertscripts/
[root@yong-01 alertscripts]# vim 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]
##定義QQ郵箱的帳號和密碼,你須要修改爲你本身的帳號和密碼(請不要把真實的用戶名和密碼放到網上公開,不然你會死的很慘)
    sendqqmail('163郵箱','密碼','163郵箱',to,subject,content)

if __name__ == "__main__":
    main()
    
    
#####腳本使用說明######
#1. 首先定義好腳本中的郵箱帳號和密碼
#2. 腳本執行命令爲:python mail.py 目標郵箱 "郵件主題" "郵件內容"
  • 更改mail.py腳本的權限(很重要!!!),不然就會沒法告警
  • chmod 755 /usr/lib/zabbix/alertscripts/mail.py
[root@yong-01 alertscripts]# chmod 755 mail.py 
[root@yong-01 alertscripts]# ll mail.py 
-rwxr-xr-x 1 root root 1390 7月  10 23:33 mail.py
[root@yong-01 alertscripts]# python mail.py yyli2008@163.com "adfsf" "ceshi"
  • 沒有任何提示就表示發郵件成功
  • 這時打開163郵箱,會看到郵件

  • 如果在郵件裏面寫中文,到郵箱裏面會顯示亂碼,這是由於在zabbix使用的是utf-8的字符集,而在郵箱裏使用的是GBK字符集,因此會亂碼
[root@yong-01 alertscripts]# python mail.py yyli2008@163.com "測試郵件" "測試郵件"

  • 建立一個接受告警郵件的用戶(用戶是用來接收郵件的),在建立用戶的前提是建立一個用戶組,用戶組可使用已經存在的, 因此這裏直接建立用戶,管理-->用戶-->建立用戶

  • 再給剛剛的用戶設置郵箱,管理-->用戶-->報警媒介-->添加

  1. 還要 注意用戶的權限,若是沒有權限,郵件是無法發的,要暫時到用戶組裏 (管理-->用戶羣組)
  • 默認的權限是無,須要去修改羣組,給予權限

輸入圖片說明

輸入圖片說明

  • 設置動做,咱們配置了觸發器,那麼觸發後應該去作什麼,配置-->動做-->建立動做
  • 動做 
    • 名稱:中英文均可以,這裏叫 發郵件
    • 條件:維護狀態 非在 維護,就表示 維護狀態機器不進行發郵件 
      • 新的觸發條件,當觸發器示警度(也就是信息,警告,通常嚴重...)大於等於未分類(未分類 表示 全部狀態,都會發信息)

輸入圖片說明

  • 配置-->動做-->操做 
    • 默認信息:直接刪除原有的(比較亂),粘貼下面的內容
    • 維護期間暫停操做:選擇打勾(若不打對勾也能夠,由於在動做的條件裏定義了)
默認信息定義當發生報警時,zabbix會向你的郵箱發送什麼內容
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)

  • 配置-->動做-->恢復操做 
    • 默認信息:直接刪除原有的(比較亂),粘貼下面的內容(粘貼內容和操做裏面複製進去的信息是相同的)
HOST:{HOST.NAME} {HOST.IP}
TIME:{EVENT.DATE}  {EVENT.TIME} 
LEVEL:{TRIGGER.SEVERITY} 
NAME:{TRIGGER.NAME}
messages:{ITEM.NAME}:{ITEM.VALUE}
ID:{EVENT.ID}

 

  • 最後點 添加 確認

測試告警

  • 建立觸發器,來實現告警,配置-->主機-->yong-02主機-->建立觸發器
  • 名稱:系統負載
  • 嚴重性:警告
  • 表達式: 以下

  • 選擇 添加

  • 最終看到以下

  • 而後回到監控中心,主頁——>最近20個問題
  • 若是提示爲啓用中,證實發現問題,正在啓用告警,顯示問完成,就證實已經發送郵件告警;如圖,咱們的實驗是成功的

  • 查看郵箱,會看到郵件發送
  1. 這就表示測試郵件告警成功
  2. 這時想要解決這個問題,只要將觸發器 系統負載條件數值調整 >1 便可,再來查看監控中心,就會發現問題消失了,而且會給郵箱發送 OK 的郵件
  • 19.16 不發郵件的問題處理

不發郵件的問題處理

  • 由於虛擬機,可能存在一些bug,第一次配置的時候,常常會出現zabbix發現問題,作了郵件告警,可是郵箱卻沒有收到郵件的問題;
  • 從新恢復快照之後再作一次,就又能正常發送郵件,接收郵件了

配置郵件告警總結

  1. 到 163郵箱或 QQ郵箱 開啓SMTP服務,並記錄受權碼,沒有開啓,腳本里面就沒法去寫密碼
  2. 設置郵件告警
  • 首先設置一個報警媒介; 
    • 三個參數必須填寫正確,順序也不能錯誤
  1. 編輯郵件告警腳本,腳本地址
  • /usr/lib/zabbix/alertscripts目錄下
  • 路徑不能錯誤,必須在這個路徑下,添加一個腳本
  1. 建立好以後,記得給腳本755權限,不然zabbix用戶是沒法調用這個腳本的
  2. 配置用戶
  • 配置用戶以前,把用戶羣組的權限改一下,讓組有一個讀寫權限
  • 用戶加到指定的羣組裏
  • 報警媒介,添加本身的郵箱地址,本身給本身發,這個成功率會比較高
  1. 配置動做
  • 操做修改默認信息(發送郵件的格式),操做須要添加一個「新的」給誰發郵件;恢復操做一樣
  1. 測試一下告警是否能成功發送郵件
  • 人爲建立一個觸發器,設置一個系統最低運行都會觸發報警的觸發器
  • 也能夠在客戶端上斷開鏈接(中止客戶端的zabbix服務)
  1. 更改主動和被動
  • PS: 客戶端主動模式和被動模式,在監控項裏,選擇一個監控項打開,選擇類型是客戶端主動,客戶端;客戶端主動即爲主動模式,客戶端爲被動模式
  1. 觸發器不能用中文命名,否則郵件顯示亂碼
相關文章
相關標籤/搜索