Linux監控平臺搭建(三)--自定義監控項目、問題告警及處理

一 添加自定義監控項目

zabbix很受歡迎的緣由之一是:可以自定義監控項目,以前咱們看到的不少的監控項目都是在模板裏面提現的,可是當咱們須要一些個性化的監控項目,好比某一個業務的監控數據 需求:監控某臺web的80端口鏈接數,並出圖 兩步:1)zabbix監控中心建立監控項目;2)針對該監控項目以圖形展示python

1)建立監控項目

  1. 對於第一步,須要到客戶端定義腳本 ,腳本的名字及位置能夠自定義 vim /usr/local/sbin/estab.sh //內容以下
#!/bin/bash
 ##獲取80端口併發鏈接數,也就是查看80端口中處於ESTABLISHED狀態的連接有多少個,通常正常的也不會超過100
netstat -ant |grep ':80 ' |grep -c ESTABLISHED
  1. 更改執行腳本的權限,主要爲了授予zabbix用戶執行這個腳本的權限
#  chmod 755 /usr/local/sbin/estab.sh
  1. 客戶端上編輯配置文件
# vim /etc/zabbix/zabbix_agentd.conf

在配置文件中修改如下參數的值,linux

#表示使用自定義腳本,至關於開關,若是等於0,他就沒辦法使用腳本
UnsafeUserParameters=1

還要在配置文件中找到UserParameter參數,並設置自定義監控項下面的鍵值key爲my.estab.count,後面的[]裏面寫腳本的參數,通常腳本是帶有參數的,若是沒有參數則能夠寫成,腳本爲/usr/local/sbin/estab.sh,git

UserParameter=my.estab.count[*],/usr/local/sbin/estab.sh

以下圖的key
輸入圖片說明web

  1. 重啓zabbix-agent服務
# systemctl restart zabbix-agent

2)針對該監控項目以圖形展示

  1. 首先到服務端驗證,執行下面命令,要保證沒有防火牆規則,也沒有selinux
[root@lijie-01 ~]# zabbix_get -s 192.168.75.134 -p 10050 -k 'my.estab.count' 
0
[root@lijie-01 ~]#
  1. 而後在zabbix監控中心(瀏覽器)配置增長監控 項目 輸入圖片說明 而後跳轉到如下界面,寫上名稱,鍵值寫my.estab.count,其餘保持默認就能夠了,最後點擊頁面底部的添加按鈕
  2. 添加該項目後,到「監測中」--「最新數據」查看剛添加的項目是否有數據出現
    輸入圖片說明
    從上圖能夠看到已經有數據產生了
  3. 有了數據就能夠添加圖形了 按照這個順序點擊 「配置」「主機」 「圖形」 「建立圖形」,
    輸入圖片說明
    進入到建立自定義監控項的圖形顯示界面,名稱能夠寫併發鏈接數,
    輸入圖片說明
    監控項框內點擊添加按鈕找到咱們在監控項中定義的併發鏈接數的並肯定後,
    輸入圖片說明
    頁面變成下圖樣子
    輸入圖片說明
    最後點擊頁面最下方的添加按鈕,便可成功添加圖形
    輸入圖片說明
  4. 按照一樣的方式,咱們也能夠給監控項併發鏈接數設置觸發器,告訴系統何時報警,只是在表達式選擇的時候
    輸入圖片說明
    須要填寫下圖的信息,設置當併發鏈接數大於200時報警
    輸入圖片說明

二 配置郵件告警

  1. 使用163或者QQ郵箱發告警郵件,至關於就是調用第三方的郵箱來發出告警郵件,以QQ爲例:
    首先登陸QQ郵箱,設置開啓POP三、IMAP、SMTP服務,第一次開啓會使用短信驗證
    輸入圖片說明
    短信驗證後咱們須要開啓並記錄受權碼
    輸入圖片說明
  2. 而後到監控中心設置郵件告警,「管理」,「報警媒介類型」,「建立媒體類型」,下圖中咱們能夠看到默認有Email告警方式,但不太好用,所以咱們能夠本身寫一個python腳本
    輸入圖片說明
    而後彈出如下頁面,此時這個腳本咱們尚未寫的,三個參數分別爲{ALERT.SENDTO} ,{ALERT.SUBJECT},{ALERT.MESSAGE},分別表示發給誰,主題、郵件內容,這三個東西分佈在咱們寫的腳本的三個參數裏
    輸入圖片說明
  3. 建立報警腳本mail.py
    咱們能夠到zabbix的配置文件 /etc/zabbix/zabbix_server.conf中查找alert找到如下一行內容
AlertScriptsPath=/usr/lib/zabbix/alertscripts

這行代碼的含義是告警腳本的路徑爲/usr/lib/zabbix/alertscripts,這說明zabbix的告警腳本都應該放到這個路徑下面vim

# vim /usr/lib/zabbix/alertscripts/mail.py  //內容參考https://coding.net/u/aminglinux/p/aminglinux-book/git/tree/master/D22Z?public=true

在上述路徑中有兩個mail相關的python腳本,都須要將gserver改成使用的郵箱的域名服務器,第一種,瀏覽器

#!/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.qq.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('1234567@qq.com','aaaaaaaaaa','1234567@qq.com',to,subject,content)
if __name__ == "__main__":
    main()
#####腳本使用說明######
#1. 首先定義好腳本中的郵箱帳號和密碼
#2. 腳本執行命令爲:python mail.py 目標郵箱 "郵件主題" "郵件內容"

第二種bash

#!/usr/bin/python
#coding:utf-8
import smtplib
from email.mime.text import MIMEText
import sys
mail_host = 'smtp.163.com'
mail_user = 'abcdefg@xx.com'
mail_pass = '1111111'
mail_postfix = '163.com'
def send_mail(to_list,subject,content):
    me = "zabbix 監控告警平臺"+"<"+mail_user+"@"+mail_postfix+">"
    msg = MIMEText(content, 'plain', 'utf-8')
    msg['Subject'] = subject
    msg['From'] = me
    msg['to'] = to_list
    try:
        s = smtplib.SMTP()
        s.connect(mail_host)
        s.login(mail_user,mail_pass)
        s.sendmail(me,to_list,msg.as_string())
        s.close()
        return True
    except Exception,e:
        print str(e)
        return False
if __name__ == "__main__":
    send_mail(sys.argv[1], sys.argv[2], sys.argv[3])
  1. 修改配置文件的權限
# chmod 755 /usr/lib/zabbix/alertscripts/mail.py

而後咱們來測試下是否能成功發送郵件,若是發送成功則不會有任何提示服務器

[root@lijie-01 alertscripts]# python mail.py ******@qq.com "title" "content"

我使用qq郵箱發送郵件測試了好幾回都沒有成功,而後我更換使用163郵箱來給個人qq郵箱發送郵件OK網絡

  1. 建立一個接受告警郵件的用戶,「管理」,「用戶」,「建立用戶」,「報警媒介」,類型選擇「QQalert」
    輸入圖片說明 而後填寫如下信息
    輸入圖片說明
    還有報警媒介
    輸入圖片說明
    輸入圖片說明
    注意用戶的權限目前是無權限,若是這裏設置不對的話,最終也是收不到告警郵件的
    輸入圖片說明
    這時須要到用戶組去設置權限
    輸入圖片說明
    跳轉到如下頁面
    輸入圖片說明
  2. 用戶配置完成後,還須要設置動做,動做是告警觸發器被觸發後須要作的動做,「配置」,「動做」,「建立動做」
    輸入圖片說明
    名稱寫「sendmail」(自定義),條件A是【維護狀態 非在 維護】表示的含義是有一些維護並非在真正的維護時就不須要發郵件,好比當咱們重啓網絡服務等狀況下就不是真正的維護,就不用發送郵件;條件B【觸發器示警度>=未分類】表示全部狀態的告警都須要發送郵件
    輸入圖片說明
  3. 「操做」,選擇發送的用戶爲剛建立的用戶,僅送到選擇「QQalert」
    上面定義的是發送郵件的動做,咱們來到「操做」頁面,定義發給誰,主題、內容等信息,默認信息內容咱們填寫如下內容:
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表示的是發生的事件處於非確認狀態時來發送郵件
輸入圖片說明併發

  1. 切換到「恢復操做」,把默認信息改爲以下
HOST:{HOST.NAME} {HOST.IP} 
TIME:{EVENT.DATE}  {EVENT.TIME} 
LEVEL:{TRIGGER.SEVERITY} 
NAME:{TRIGGER.NAME}
messages:{ITEM.NAME}:{ITEM.VALUE}
ID:{EVENT.ID}

其餘填寫的信息以下:
輸入圖片說明
上面操做完成後再點擊頁面底部的添加按鈕,便可添加成功,成功後以下圖
輸入圖片說明

  1. 測試告警 爲了測試告警,咱們在主機lijie-02中建立一個新的觸發器,配置信息以下 ,咱們這裏沒有對zabbix-agent作任何操做,所以系統負載爲0,下面咱們是設置當系統負載小於1時發郵件告警 輸入圖片說明
    等一下子以後,咱們就能收到郵件,而且能夠看到zabbix首頁有如下提示: 輸入圖片說明
    若是上圖中的【完成】變成了空,頗有多是腳本沒有權限致使的,若是是【失敗】,則須要將鼠標划動到失敗二字上面查看具體的失敗緣由 收到的告警郵件信息以下: 輸入圖片說明
    上面咱們測試了問題告警,下面咱們來測試問題解決後的通知消息是否能成功發送,咱們先來將lijie-02中上面建立的觸發器改一下,改成當系統負載大於1時發郵件告警 輸入圖片說明
    因爲目前系統負載爲0,所以告警解除,咱們就能收到告警解除的郵件 輸入圖片說明
    而且能夠看到下圖頁面提示已解決 輸入圖片說明
相關文章
相關標籤/搜索