Zabbix配置郵件報警a

Zabbix配置郵件報警php

上面詳細介紹瞭如何使用zabbix email形式發送報警,我的認爲惟一的缺點就是報警內容太不夠人性化了。因此下面介紹zabbix第二種經常使用的報警方式,自定義腳本的形式報警,這個自定義的腳本你可使用郵件報警、短信報警等等。html

配置用戶以script方式接受報警,在zabbix 2.x版本中,當有報警通知時,默認會傳3個參數給腳本,它分別爲是$1(發送給誰)、$2(發送標題)、$3(發送內容)。例如發送郵件給support@ywnds.com,標題爲nginx宕機,內容是IP地址:1.1.1.1,nginx離線,請當即處理等等。python

但從zabbix 3.0以後,能夠自定義參數了,因此不寫參數,它是不會傳參數給腳本的,須要注意。nginx

1)下面來配置自定義郵件報警,咱們使用mailx做爲發信息的客戶端,因此先要安裝mailx。web

 

1vim

$ yum -y install mailxbash

配置mailx服務器

 

1dom

2post

3

4

5

6

$ cat /etc/mail.rc

set from=1861210@163.com

set smtp=smtp.163.com

set smtp-auth-user=1861210

set smtp-auth-password=123456

set smtp-auth=login

發送測試郵件

 

1

$ echo  test | mail -s "test"  136×××@163.com

2)zabbix服務器端編寫郵件發送腳本

首先配置zabbix

 

1

$ mkdir /etc/zabbix/alertscripts

 

 

1

2

$ vim /usr/local/zabbix/etc/zabbix_server.conf  //修改alert scripts爲如下路徑

AlertScriptsPath=/etc/zabbix/alertscripts

 

 

1

$ service zabbix_server restart

寫報警腳本

 

1

2

3

4

5

6

$ cat /etc/zabbix/alertscripts/sendmail.sh

#!/bin/bash

#

messages=`echo $3 | tr '\r\n' '\n'`

subject=`echo $2 | tr '\r\n' '\n'`

echo "${messages}" | mail -s "${subject}" $1 >> /tmp/sendmail.log 2>&1

增長可執行權限

 

1

2

$ chown zabbix.zabbix /etc/zabbix/alertscripts/sendmail.sh

$ chmod +x /etc/zabbix/alertscripts/sendmail.sh

測試發送腳本

 

1

$ /etc/zabbix/alertscripts/sendmail.sh 136xxx@163.com "測試郵件標題" "測試郵件內容"

PS:最後須要重啓zabbix-server和nginx/Apache服務器,千萬別忘了。

2、Zabbix後臺配置

Administration–>Media types–>Create media type

進入告警方式配置界面,建立sendmail.sh告警方式,以下圖:

Zabbix配置腳本報警

name:媒介類型名稱。

type:介質類型。

script name:腳本名稱(須要先定義AlertScriptsPath,sendmail.sh腳本放在這個目錄下,寫絕路路徑沒用)

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

 

1

2

3

{ALERT.SENDTO}

{ALERT.SUBJECT}

{ALERT.MESSAGE}

解釋:不少人安裝zabbix 3.0以後,寫的腳本一直髮信不成功,手動執行時能夠的。那是由於zabbix3.0以後,能夠自定義參數了。因此不寫參數,它是不會傳參數的。在2.x版本不存在這個問題,默認會傳3個參數。而後配置用戶以script方式接受郵件。

這時候就能夠先中止zabbix_agent 測試下短信會不會成功發送。

3、sendEmail客戶端發送郵件

sendEmail是一個輕量級,命令行的SMTP郵件客戶端。若是你須要使用命令行發送郵件,那麼sendEmail是很是完美的選擇:使用簡單而且功能強大,這個被設計用在php、bash、perl和web站點使用。以上是sendEmail的簡單介紹,千萬不要和sendmail搞混掉了。用了sendEmail你將不在喜歡sendmail了。

下載安裝sendEmail

 

1

2

3

$ wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz

$ tar -xzvf sendEmail-v1.56.tar.gz

$ mv sendEmail-v1.56/sendEmail /usr/local/bin/

發送郵件

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

$ /usr/local/bin/sendEmail --help

# 指定發件人郵箱;

-f root@zabbix.com

 

# 指定收件人郵箱;

-t admin@qq.com

 

# 指定發件人郵箱的smtp地址;          

-s smtp.zabbix.com

 

# 指定郵件的標題;

-u "我是郵件主題"

 

# 指定郵件內容的格式,html格式;

-o message-content-type=html

 

# 郵件內容編碼;

-o message-charset=utf8

 

# 發件人郵箱的用戶名;

-xu USER

 

# 發件人郵箱密碼;

-xp PASSWORD

 

# 郵件的具體內容;

-m "我是郵件內容"

在配置zabbix的Email報警以前,須要將sendmail/postfix使用的域名進行相應的修改,系統默認爲localhost.localdomain,其實不改也行,不過有些pop3服務器會過濾掉來自localhost.localdomain的郵件,致使郵件不能正常查收,因此,最好是改一下hostname,確保郵件發送的成功率

 

1

2

$ cat /etc/hosts

127.0.0.1   zabbix.com  smtp.zabbix.com  localhost.localdomain   localhost

sendemail發郵件腳本縮寫(須要安裝sendemail郵件客戶端)

 

1

2

3

4

5

6

7

8

$ cd /etc/zabbix/alertscripts

$ cat sendmail.sh

#!/bin/bash

#

to=$1

subject=$2

body=$3

/usr/local/bin/sendEmail -f 18612100043@163.com -t "$to" -s smtp.163.com -u "$subject" -o message-content-type=html -o message-charset=utf8 -xu 18612100043 -xp 123 -m "$body" 2>>/tmp/22.log

增長可執行權限

 

1

2

$ chown zabbix.zabbix /etc/zabbix/alertscripts/sendmail.sh

$ chmod +x /etc/zabbix/alertscripts/sendmail.sh

測試發送腳本

 

1

$ /etc/zabbix/alertscripts/sendmail.sh 163xxx@163.com "測試郵件標題" "內容第一行<br/>內容第二行<br/>"

通常以html這種方式發送的郵件內容都堆到一塊兒了,沒有換行。能夠修改動做日誌的內容格式:

點擊 配置->動做->Report problems to Zabbix administrators

在默認信息每一行後面添加<br/>

 

1

2

3

4

Trigger: {TRIGGER.NAME}<br/>

Trigger status: {TRIGGER.STATUS}<br/>

Trigger severity: {TRIGGER.SEVERITY}<br/>

Trigger URL: {TRIGGER.URL}<br/>

最後提供一個Python版本的報警腳本

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

#!/usr/bin/python

#coding:utf-8

import smtplib

from email.mime.text import MIMEText

import sys

#郵箱服務器地址

mail_host = 'smtp.163.com'

#郵箱用戶名

mail_user = '18612100043@163.com'

#郵箱密碼

mail_pass = 'mima'

mail_postfix = '163.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])

測試

 

1

$ python sendmail.py '84618983@qq.com' 'Test Mail' 'This is Test Mail'

完結。。。

相關文章
相關標籤/搜索