zabbix(13)实现短信接口告警

最近有个内网项目搭建了一套zabbix监控,由于不能访问互联网,导致告警无法使用邮件,钉钉类的方式推送告警通知;了解到之前项目上采购过一个金笛短信设备,拿来一试。

官方文档说明

1
2
3
4
5
6
短信发送URL:
http://127.0.0.1:8060/send?password=[password]&text=[text]&recipient=[cell-phone number]&encoding=U
短信接收URL:
http://127.0.0.1:8060/read?password=[password]&gateway=modem[id]&count=[number]
短信发送状态URL:
http://127.0.0.1:8060/sendstatus?msgid=[msgid]

使用浏览器测试短信发送

1
http://10.206.2.108:8060/send?password=1&text=[tes20200611]&recipient=18xxxxxxxxx&encoding=U

手机可以正常收到。

编写短信发送脚本

grep -E AlertScriptsPath /etc/zabbix/zabbix_server.conf
cd /usr/lib/zabbix/alertscripts

vim sendSMS.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@zw_zabbix_server alertscripts]# vim sendSMS.sh
#!/bin/bash
# 脚本的日志文件
LOGFILE="/tmp/SMS.log"
:>"$LOGFILE"
exec 1>"$LOGFILE"
exec 2>&1
MOBILE_NUMBER=$1 # 手机号码
MESSAGE_UTF8=$3 # 短信内容
XXD="/usr/bin/xxd"
CURL="/usr/bin/curl"
TIMEOUT=5
# 短信内容要经过URL编码处理
MESSAGE_ENCODE=$(echo "$MESSAGE_UTF8" | ${XXD} -ps | sed 's/\(..\)/%\1/g' | tr -d '\n')
# SMS API
URL="http://10.206.2.108:8060/send?password=1&text=${MESSAGE_ENCODE}&recipient=$MOBILE_NUMBER&encoding=U"
# Send it
set -x
${CURL} -s --connect-timeout ${TIMEOUT} "${URL}"

chmod +x sendSMS.sh

./sendSMS.sh 18xxxxxxxxx "" "test zabbix sendmail"

手机可以正常收到。

配置zabbix

管理-报警媒介类型-创建媒体类型

01

01

脚本参数

1
2
3
4
5
6
7
名称:sendSMS
类型:脚本
脚本名称:sendSMS.sh
添加以下3个参数,分别对应sendSMS.sh脚本需要的3个参数
收短信电话号码:{ALERT.SENDTO}
主题:{ALERT.SUBJECT} #好像没什么用
短信内容:{ALERT.MESSAGE}

设置用户报警媒介

01

01

01

触发告警器

01

01

1
2
3
4
5
6
7
8
9
10
11
默认接收人:藏_故障{TRIGGER.STATUS}:服务器 {HOSTNAME1}:{TRIGGER.NAME}
默认信息:
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
请至Montoring-Events中查看详细情况。

01

1
2
3
4
5
6
7
8
9
10
默认接收人:藏_故障{TRIGGER.STATUS}:服务器 {HOSTNAME1}:{TRIGGER.NAME}
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
报警已恢复,请放松心情。

测试告警

关闭agent,测试告警

01

测试成功。

ps:第二天测试的时候发现短信平台成功发送了,但是手机收不到短信,咨询厂家,怀疑是运营商拦截了。

独学无友,孤陋寡闻;学习记录,欢迎拍砖!