Zabbix 3配置脚本报警(二)

来源:互联网 发布:88折话费 源码 编辑:程序博客网 时间:2024/06/06 00:27
Zabbix 3配置脚本报警(二)

配置使用script报警媒介

Zabbix 3配置邮件报警(一) 

上面详细介绍了如何使用zabbix email形式发送报警,个人认为唯一的缺点就是报警内容太不够人性化了。所以下面介绍zabbix第二种常用的报警方式,自定义脚本的形式报警,这个自定义的脚本你可以使用邮件报警、短信报警等等。

配置用户以script方式接受报警,在zabbix 2.x版本中,当有报警通知时,默认会传3个参数给脚本,它分别为是$1(发送给谁)、$2(发送标题)、$3(发送内容)。例如发送邮件给support@ywnds.com,标题为nginx宕机,内容是IP地址:1.1.1.1,nginx离线,请立即处理等等。

但从zabbix 3.0之后,可以自定义参数了,所以不写参数,它是不会传参数给脚本的,需要注意。

1)下面来配置自定义邮件报警,我们使用mailx作为发信息的客户端,所以先要安装mailx。

1
$yum -yinstall mailx

配置mailx

1
2
3
4
5
6
$cat /etc/mail.rc
setfrom=1861210@163.com
setsmtp=smtp.163.com
setsmtp-auth-user=1861210
setsmtp-auth-password=123456
setsmtp-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 //修改alertscripts为以下路径
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.log2>&1

增加可执行权限

1
2
$chown zabbix.zabbix/etc/zabbix/alertscripts/sendmail.sh
$chmod +x/etc/zabbix/alertscripts/sendmail.sh

测试发送脚本

1
$/etc/zabbix/alertscripts/sendmail.sh136xxx@163.com"测试邮件标题" "测试邮件内容"

PS:最后需要重启zabbix-server和nginx/Apache服务器,千万别忘了。

zabbix后台配置

Administration–>Media types–>Create media type

进入告警方式配置界面,创建sendmail.sh告警方式,如下图:

Zabbix 3配置脚本报警(二)

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 测试下短信会不会成功发送。

sendEmail客户端发送邮件

sendEmail是一个轻量级,命令行的SMTP邮件客户端。如果你需要使用命令行发送邮件,那么sendEmail是非常完美的选择使用简单并且功能强大这个被设计用在phpbashperlweb站点使用。以上是sendEmail的简单介绍千万不要和sendmail搞混掉了。用了sendEmail你将不在喜欢sendmail了。

下载安装sendEmail

1
2
3
$wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz
$tar -xzvfsendEmail-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
# 指定发件人邮箱;
-froot@zabbix.com
 
# 指定收件人邮箱;
-tadmin@qq.com
 
# 指定发件人邮箱的smtp地址;          
-ssmtp.zabbix.com
 
# 指定邮件的标题;
-u"我是邮件主题"
 
# 指定邮件内容的格式,html格式;
-omessage-content-type=html
 
# 邮件内容编码;
-omessage-charset=utf8
 
# 发件人邮箱的用户名;
-xuUSER
 
# 发件人邮箱密码;
-xpPASSWORD
 
# 邮件的具体内容;
-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-f18612100043@163.com-t"$to" -ssmtp.163.com-u"$subject" -omessage-content-type=html-omessage-charset=utf8-xu18612100043 -xp123 -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.sh163xxx@163.com"测试邮件标题" "内容第一行<br/>内容第二行<br/>"

一般以html这种方式发送的邮件内容都堆到一起了,没有换行。可以修改动作日志的内容格式:

点击 配置->动作->Report problems to Zabbix administrators

在默认信息每一行后面添加<br/>

1
2
3
4
Trigger:{TRIGGER.NAME}<br/>
Triggerstatus:{TRIGGER.STATUS}<br/>
Triggerseverity:{TRIGGER.SEVERITY}<br/>
TriggerURL:{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
importsmtplib
fromemail.mime.textimport MIMEText
importsys
#邮箱服务器地址
mail_host= 'smtp.163.com'
#邮箱用户名
mail_user= '18612100043@163.com'
#邮箱密码
mail_pass= 'mima'
mail_postfix= '163.com'
defsend_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()
        returnTrue
    exceptException,e:
        printstr(e)
        returnFalse
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'
 
转自:Zabbix 3配置脚本报警(二) – 运维那点事  http://www.ywnds.com/?p=6574
0 0
原创粉丝点击