Zabbix监控配置邮件微信告警
sendEmail是一个免费、轻量级、命令行的SMTP邮件客户端。如果你需要使用命令行方式发送邮件,那么sendEmail是非常完美的选择:使用简单、功能强大。
sendEmail下载地址:
http://caspian.dotconf.net/menu/Software/SendEmail/
# tar xvzf sendEmail-v1.56.tar.gz
# cp sendEmail-v1.56/sendEmail /usr/local/bin/
# chmod +x /usr/local/bin/sendEmai
sendEmail命令选项:
修改zabbix_server.conf
AlertScriptsPath=/etc/zabbix/alertscripts
修改后重启zabbix server
创建发送邮件脚本
#vim /etc/zabbix/alertscripts/SendEmail.sh
#!/bin/bash
SMTP_server='*******' # SMTP服务器
username='*********’ #用户名
password='*********' # 密码
from_email_address='********' #发件人Email地址
to_email_address="$1" # 收件人Email地址,zabbix传入的第一个参数
message_subject_utf8="$2" # 邮件标题,zabbix传入的第二个参数
message_body_utf8="$3" # 邮件内容,zabbix传入的第三个参数
# 转换邮件标题为GB2312,解决邮件标题含有中文,收到邮件显示乱码的问题。
message_subject_gb2312=`iconv -t GB2312 -f UTF-8 << EOF
$message_subject_utf8
EOF`
[ $? -eq 0 ] && message_subject="$message_subject_gb2312" || message_subject="$message_subject_utf8"
# 转换邮件内容为GB2312
message_body_gb2312=`iconv -t GB2312 -f UTF-8 << EOF
$message_body_utf8
EOF`
[ $? -eq 0 ] && message_body="$message_body_gb2312" || message_body="$message_body_utf8"
# 发送邮件
sendEmail='/usr/local/bin/sendEmail'
$sendEmail -s "$SMTP_server" -xu "$username" -xp "$password" -f "$from_email_address" -t "$to_email_address" -u "$message_subject" -m "$message_body" -o message-content-type=text -o message-charset=gb2312
# chown zabbix:zabbix /etc/zabbix/alertscripts/SendEmail.sh
# chmod +x /etc/zabbix/alertscripts/SendEmail.sh
进入告警方式配置界面(Media types),创建Email告警方式,如下图:
修改用户action创建略过,截图为触发action后操作配置,发送邮件.
zabbix默认的告警内容不丰富,信息不足,所以把我的配置介绍给大家,大家可以参照修改:
告警主机:{HOST.NAME}
主机IP: {HOST.IP}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
事件ID: {EVENT.ID}
微信的第三方接口要求我们先申请一个企业号——传送门:https://qy.weixin.qq.com/
1.通讯录添加企业成员
我们要提前把成员信息添加进组织部门,必填项+手机号或者微信号,这样别人扫描二维码的时候才能成功关注企业号。
注意:这里有两个我们要用到信息,一个组织部门的ID,一个部门成员的账号(账号是自己手动指定的,不同于微信号,最好是字母加数字)
组织部门ID
部门成员账号
2.应用中心创建应用
创建应用,通过应用发送消息给部门成员.这里要记住一个值,应用ID
应用ID
3.给部门设置管理员
设置--->功能设置---->权限管理---->新建管理组
管理员必须事先已经关注了企业号,并且已经设置好邮箱地址
CorpID和Secret
确定管理员可以读取通讯录,可以使用应用发消息。
注意:我们需要管理员的CorpID和Secret
总结:
准备这些东西:
个微信企业号
企业号已经被部门成员关注
企业号里有一个可以发消息的应用 ,一个授权管理员,可以使用该应用给成员发消息
我们要取到这些信息:
成员账号
组织部门ID
应用ID
CropID Secret
如何调用微信接口?
调用微信接口需要一个调用接口的凭证:access_token
通过 :CropID 、Secret 才能获取到access_token,但是获取到的token有效期为两分钟
微信企业号接口调试工具传送门:http://qydev.weixin.qq.com/debug
Shell脚本原理
使用:
curl -s -G url 获取 AccessToken
使用:
curl --data url 传送凭证调用企业号接口
zabbix会传递三个参数给脚本,$1是消息接收账号,$2报警标题,$3报警内容
#!/bin/bash
CropID='**************'#公司ID
Secret='**************’#密码
GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret"
Gtoken=$(/usr/bin/curl -s -G $GURL | awk -F\" '{print $4}')#获取token
PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Gtoken"
Msg=$3
function body() {
local int AppID=1#企业号中应用ID
local UserID=$1#部门成员账号,添加时自定义的,zabbix中定义的微信接收者
local PartyID=2#部门ID
printf "{\n"
printf "\"touser\":\"$UserID\",\n"
printf "\"toparty\":\"$PartyID\",\n"
printf "\"msgtype\":\"text\",\n"
printf "\"agentid\": \"$AppID\",\n"
printf "\"text\": {\n"
printf "\"content\": \"$Msg\"\n"
printf "},\n"
printf "\"safe\":\"0\"\n"
printf "}\n"
}
/usr/bin/curl --data-ascii "$(body $1 $2 $3)" $PURL#调用接口发消息
企业号支持的格式:http://qydev.weixin.qq.com/wiki/index.php?title=消息类型及数
mv WebChat.sh /usr/local/zabbix/share/zabbix/alertscripts
chown zabbix.zabbix /usr/local/zabbix/share/zabbix/alertscripts/weixin.sh
chmod +x /usr/local/zabbix/share/zabbix/alertscripts/weixin.sh
服务器端最后配置与email发送类似,设置
Media type > User > Action
详细步骤省略