0

在百度上搜索查看了很多文章之后,我终于在本地服务上实现了zabbix短信发送配置。其中有很多小的细节导致了我配置的并不是那么顺利,这篇文章就是解决这个问题的。按照这篇文章相信你一定能快速配置出短信发送的功能。

1. 创建新的通信渠道

默认的通信渠道有Email\Jabber\SMS。这里的SMS指的明显是一个通信设备,通常情况下我们是没有这个设备的。所以对于我们来说短信发送的实现原理就是:在zabbix问题触发后自动调用我们的短信发送脚本,通过脚本发送http请求来发送告警短信。

所以首先,我们需要指定我们的脚本位置以及脚本入参。

点击按钮创建新的媒体类型

类型选择【script】,【Script name】填写所执行的脚本名称(执行脚本一定要放在AlertScriptsPath目录下-可以在/etc/zabbix/zabbix_server.conf文件中查看,默认为/usr/lib/zabbix/alertscripts )。最后添加3个参数,分别是【收信人】、【问题名称】、【问题描述】。

2. 创建用户组\用户

在这个例子中,我们需要监控某个linux服务器,因此我们需要一个运维组和负责运维的同学。(因为Admin的权限过大,所以我们不能用Admin用户去干所有的事情)我们需要创建一个用户组,只让这个组的同学负责linux服务相关的事情。

创建Ops运维组

给Ops添加权限

创建运维同学【看门狗】

添加【看门狗】同学的【手机号】(如果看门狗同学有多个手机号的话,可以用逗号隔开配置多个)、【工作时间】、【负责的问题级别】

3. 在zabbix-server上配置我们的脚本

由于测试环境,我们将推送短信消息的部分替换为在/tmp/SMS-SEND.log打印短信内容。

#!/bin/bash
CAT="/bin/cat"
CURL="/usr/bin/curl"
MOBILE_NUMBER=$1 # 手机号码
MESSAGE_SUBJECT=$2 # 短信主题
MESSAGE_UTF8=$3 # 短信内容
MESSAGE(){
${CAT} <
{
"bizType": 0,
"smsSubject": "$MESSAGE_SUBJECT",
"smsContent": "$MESSAGE_UTF8",
"userMobile": "$MOBILE_NUMBER"
}
EOF
}
# Send it
#${CURL} -i \
#--header 'Content-Type: application/json' \
#--header 'Accept: application/json' \
#-X POST -d "$(MESSAGE)" "你们开发提供的短信接口地址"
echo "$(MESSAGE) has send! \n" >> /tmp/SMS-SEND.log

修改sendSMS.sh脚本权限

chown zabbix:zabbix sendSMS.sh
chmod +x sendSMS.sh

4. 创建触发器的动作

选择【triggers】-点击创建动作。

填写自定义名称,如果不配置条件那么这个动作会响应所有触发器。

第一行是在问题发送多久之后推送短信通知,这里是测试环境,我们就设置为60s。

填写推送的用户或用户组。这里推荐使用用户组,以后如果运维团队有新的同学加入,则给新同学创建账号并加入运维组即可。

当问题恢复时,通知跟这个问题有关的所有人

5. 效果验证

好了让我们来停止一个zabbix-agent来看看效果。

[root@vm2 ~]# systemctl stop zabbix-agent

等待5分钟后,zabbix发出警告

后台/tmp/SMS-SEND.log文件中打印出如下日志

然后恢复zabbix-agent,发送恢复短信