前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Zabbix配置邮件报警a 原

Zabbix配置邮件报警a 原

作者头像
拓荒者
发布2019-03-11 14:27:23
7290
发布2019-03-11 14:27:23
举报
文章被收录于专栏:运维经验分享运维经验分享

上面详细介绍了如何使用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 -y install mailx

配置mailx

1 2 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服务器,千万别忘了。

二、Zabbix后台配置

Administration–>Media types–>Create media type

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

Zabbix配置脚本报警
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 测试下短信会不会成功发送。

三、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'

完结。。。

(adsbygoogle = window.adsbygoogle || []).push({});

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018/06/14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 二、Zabbix后台配置
  • 三、sendEmail客户端发送邮件
相关产品与服务
短信
腾讯云短信(Short Message Service,SMS)可为广大企业级用户提供稳定可靠,安全合规的短信触达服务。用户可快速接入,调用 API / SDK 或者通过控制台即可发送,支持发送验证码、通知类短信和营销短信。国内验证短信秒级触达,99%到达率;国际/港澳台短信覆盖全球200+国家/地区,全球多服务站点,稳定可靠。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档