Zabbix的通知功能以及自定義腳本告警


本節內容:

  • Zabbix的通知功能
  • 定義接收告警的用戶
  • 定義Action
  • Zabbix自定義腳本發送報警郵件

 

一、Zabbix的通知功能

在配置好監控項和觸發器之后,一旦正常工作中的某觸發器狀態發生改變,一般意味着有異常情況發生,此時通常需要采取一定的動作(action),如告警或者執行遠程命令。 實現zabbix的通知功能,一般需要兩個步驟:定義所需的“媒介”和配置一個”動作”。 媒介類型有:E-mail,SMS,Jabber和自定義的通知腳本。我這里就使用E-mail了。

1.定義媒介

登錄zabbix web管理控制台,點擊Administration—> Media types,可以看到有3個定義好了的媒介,不用這3個,點擊右上角的”Create media type”。

填寫信息:

 

二、定義接收告警的用戶

1.創建用戶組

(1)點擊Administration—> User groups,點擊右上角的Create user group。

(2)輸入組名,點擊Add。

 

2.創建用戶

(1)點擊Administration—> Users,點擊右上角的Create user。

在User列填入個人信息:

(2)點擊Media,點擊Add,選擇媒介和接收郵件的時間等信息:

(3)點擊Permissions,根據這個新添的用戶給予合適的權限

 

三、定義Action

點擊Configuration—> Actions,點擊右上角的Create action:

 

Action配置:

 

Conditions配置:

 

四、Zabbix自定義腳本發送報警郵件

Zabbix發送報警郵件還可以采用自定義的腳本來發送。

1.Python腳本發郵件

(1)定義Media types

如下圖,添加以下3個參數,分別對應sendEmail.sh腳本需要的3個參數:收件人地址、主題、詳細內容。

{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}

【注意】: 很多人安裝zabbix 3.0之后,寫的腳本一直發信不成功,手動執行時可以的。那是因為zabbix3.0之后,可以自定義參數了。所以不寫參數,它是不會傳參數的。在2.x版本不存在這個問題,默認會傳3個參數。腳本中可以使用$1, $2, $3來調用 action 中的 郵件的收件人, Default Subject, Default Message。

 

(2)定義Users的Media

 

(3)python報警腳本

# cd /usr/local/zabbix-3.0.1/share/zabbix/alertscripts/
# vim zabbix_sendmail.py
#!/usr/bin/python
# coding:utf-8 

import smtplib
from email.mime.text import MIMEText
import sys

# 郵箱服務器地址
mail_host = 'smtp.exmail.qq.com'
# 郵箱用戶名
mail_user = '01115004@wisedu.com'
# 郵箱密碼
mail_pass = 'zjk230640'
mail_postfix = 'wisedu.com'

def send_mail(to_list,subject,content):
    me = mail_user+"<"+mail_user+"@"+mail_postfix+">"
    msg = MIMEText(content)
    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])
Python報警腳本

修改腳本權限:

# chmod +x zabbix_sendmail.py 
# chown -R zabbix.zabbix zabbix_sendmail.py

 

(4)修改zabbix_server配置

# vim /usr/local/zabbix-3.0.1/etc/zabbix_server.conf

添加如下配置:

### Option: AlertScriptsPath
AlertScriptsPath=/usr/local/zabbix-3.0.1/share/zabbix/alertscripts

重啟zabbix_server。

 

(5)配置Actions

【注意】:每觸發一次Action,都會在Reports—>Action log看到記錄:

 

2.shell腳本發郵件

(1)先安裝sendEmail

[root@care local]# tar zxf sendEmail-v1.56.tar.gz
[root@care local]# cp sendEmail-v1.56/sendEmail /usr/local/bin
安裝sendEmail

將寫好的腳本上傳到/usr/local/zabbix-3.0.1/share/zabbix/alertscripts。這里為了業務需求,需要定制化發送郵件的內容,腳本內容如下:

#!/bin/bash
###Description:This script is used to alarm.
###Written by: jkzhao - jkzhao@wisedu.com  
###History: 2016-08-10 Second release.
###Modification: Please modify the variables host, user and passwd.

# 獲取默認的郵件接收者,郵件主題,郵件正文
to=$1
subject=$2
bodyOrgin=$3

# 獲取eventid
#eventid=grep "event ID" $bodyOrgin |awk '{print $4}'
eventid=$(echo $bodyOrgin | grep "event ID" |awk '{print $NF}')
echo "eventid:$eventid" > /tmp/test.txt

# shell調用存儲過程,獲取主鍵viewid,傳入參數:eventid,輸出:viewid
host=172.16.9.112
user=root
passwd=zabbix
database=zabbix

viewid=$(mysql -u${user} -p${passwd} -h${host} -D${database} -e "call generateAlertView($eventid,@result)" 2>/dev/null | awk 'NR>1')
echo "viewid:$viewid" >> /tmp/test.txt
group=$(mysql -u${user} -p${passwd} -h${host} -D${database} -e "select alerts_view_group.group from alerts_view_group where viewid = $viewid" 2>/dev/null | awk 'NR>1')
echo "group:$group" >> /tmp/test.txt
body=$bodyOrgin"; 影響業務: "$group


# 因為需要格式化發送郵件的內容,將拼接好的body信息寫入文件中再做處理
echo $body | awk -F';' '{for(i=1;i<=NF;i++){print $i}}' > /tmp/messages.txt
# 將文件中出現的^M刪除掉
sed -i 's/\x0D//g' /tmp/messages.txt
# 刪除以空格開頭的行前面的空格
sed -i 's/^\s*//g' /tmp/messages.txt

# 由於zabbix無論是故障還是恢復都是要發郵件的,但是對於故障和恢復的郵件內容需要定制為不同的內容,因此需要先獲取到是故障還是恢復
state=$(echo $subject | awk -F: '{print $2}')

# 按照安心守護要求修改郵件正文內容
if [ $state == "PROBLEM" ]; then
    sed -i 's/Trigger:/異常對象:/' /tmp/messages.txt
    sed -i '/Trigger severity:/{h;d};/Item values:/{G}' /tmp/messages.txt
    sed -i 's/Trigger severity:/異常等級:/' /tmp/messages.txt 
    sed -i 's/Item values:/異常原因:/' /tmp/messages.txt
    sed -i '/Original event/d' /tmp/messages.txt
    sed -i '/Trigger status:/d' /tmp/messages.txt
    sed -i '$a發生時間: ' /tmp/messages.txt
    sed -i "s/發生時間: /發生時間: $(date "+%Y-%m-%d %H:%M:%S")/" /tmp/messages.txt
    # 把發生故障時的alertView插入alerts_view表
    alertValue=$(grep "異常原因" /tmp/messages.txt | awk -F: 'BEGIN{ORS=""};{for(i=3;i<=NF;++i) {print $i}}')
    echo "alertValue:$alertValue" >> /tmp/test.txt
    mysql -u${user} -p${passwd} -h${host} -D${database} -e "UPDATE alerts_view set alertValue='${alertValue}' WHERE viewid = '${viewid}'" 2>/dev/null
    sed -i 's/Warning/風險/' /tmp/messages.txt
    sed -i 's/Disaster/宕機/' /tmp/messages.txt
else
    sed -i 's/Trigger:/恢復對象:/' /tmp/messages.txt
    sed -i 's/Item values:/恢復內容:/' /tmp/messages.txt
    sed -i 's/影響業務/恢復業務/' /tmp/messages.txt
    sed -i '/Original event/d' /tmp/messages.txt
    sed -i '/Trigger status:/d' /tmp/messages.txt
    sed -i '/Trigger severity:/d' /tmp/messages.txt
    sed -i '$a發生時間: ' /tmp/messages.txt
    sed -i "s/發生時間: /發生時間: $(date "+%Y-%m-%d %H:%M:%S")/" /tmp/messages.txt
fi
    

/usr/local/bin/sendEmail -f monitor@wisedu.com -t "$to" -s smtp.exmail.qq.com -u "$subject" -o message-content-type=text -o message-charset=utf-8 -o message-file=/tmp/messages.txt -xu monitor@wisedu.com -xp anxinshouhu@2015 2>>/tmp/22.log
shell腳本發送郵件

 

(2)添加Media types

 

(3)給指定的用戶添加Media

 

(4)配置Actions,為了業務需求定制Default message

 

(5)郵件展示

故障郵件展示:

故障恢復郵件展示:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM