Docker容器中的zabbix配置短信告警

一、环境:

我司运维工作中使用的是zabbix做监控,zabbix部署在docker容器中。如果使用是编译安装或者yum安装,采用短信告警简单中的简单。但是在容器中配置短信告警。会遇到一些列的坑,以下的文章是从zabbix部署完成一直到发短信告警。配置相关告警短信内容。

docker版本:19.03.9

zabbix版本:5.2.6

zabbix-agent版本:5.2.6

网上的一律千篇的文章都是1分为2的形式,功能实现,分享一下本人实现短信告警的操作。

服务器名称IP地址系统网络环境
zabbix监控-server端10.10.10.1宿主机Centos7/server镜像Alpine互联网
Agent客户端10.10.10.2Centos7互联网
二、思路:

首先zabbix支持alertscripts告警。在进入到docker容器里的zabbix镜像,查看zabbix-server.conf配置文件

#进入docker容器里的zabbix镜像
docker exec -it zabbix-server-5.2.6 /bin/bash
#使用root用户进入到容器,多一层权限,权限大,谨慎操作。
docker exec -it zabbix-server-5.2.6 --user root /bin/bash
#zabbix-server.conf目录
cd /etc/zabbix/
#编辑zabbix-server.conf文件查看alertscripts存放位置
AlertScriptsPath=/usr/lib/zabbix/alertscripts

进入到/usr/lib/zabbix/alertscripts目录下查看是没有内容的。

这时我们退出zabbix-server-5.2.6镜像

跟大家讲一下思路,在compose这个文件中有一个参数是代表的挂载和同步的意思【volumes】,我们只需要在容器外将测试脚本写完重启容器实现内外同步。

#/data/zabbix_data/scripts/alertscripts在容器外:/usr/lib/zabbix/alertscripts/容器内的alertscripts目录。
- /data/zabbix_data/scripts/alertscripts:/usr/lib/zabbix/alertscripts

容器外的脚本内容:键盘录入和当前时间并且打印到test.txt文件中。

vim sms.sh				#创建容器外的测试脚本。
#!/bin/bash
mobale=$1
sub=$2
message=$3

echo "############## START #################"  >> test.txt
date >> test.txt
echo $mobale >> test.txt
echo $sub  >> test.txt
echo $message >> test.txt
echo "############## STOP #################"  >> test.txt

当重启容器后,再次进入到zabbix-server-5.2.6容器中的/usr/lib/zabbix/alertscripts目录下后发现我们刚才创建的sms.sh脚本也会存在的zabbix镜像中。当我们在容器外执行sms.sh脚本的时候zabbix镜像中也会有相应的执行结果。

三、注意:

正常逻辑是我们在容器外执行完脚本后容器内也会有结果,但是你会发现在当前目录(/usr/lib/zabbix/alertscripts)下没有test.txt执行完成的文件。当你在容器中执行sms.sh脚本的时候给出提示:当前

bash-5.0$ ./sms.sh 
./sms.sh: line 6: test.txt: Permission denied				#test.txt:权限被拒绝
./sms.sh: line 7: test.txt: Permission denied				#test.txt:权限被拒绝
./sms.sh: line 8: test.txt: Permission denied				#test.txt:权限被拒绝
./sms.sh: line 9: test.txt: Permission denied				#test.txt:权限被拒绝
./sms.sh: line 10: test.txt: Permission denied				#test.txt:权限被拒绝
./sms.sh: line 11: test.txt: Permission denied				#test.txt:权限被拒绝

解决思路:可以查看当前我们zabbix属于什么用户

bash-5.0$ whoami
zabbix

我们当前属于zabbix用户,无法在其他目录下执行脚本并且生成文件。我们可以去zabbix所在的目录下去查看,看到/var/lib/zabbix下的目录有我们脚本执行完成的test.txt的文本。

这样我们就能初步判断我们的逻辑是过的去的,接下来就是我们在zabbix-web上进行配置操作了。

四、zabbix页面配置

在zabbix-Web页面上找到管理—>报警媒介—>找到SMS(sms)是短信告警的意思。

请添加图片描述

在Message Templates模板中编写告警发送短信内容和恢复告警发送短信内容

请添加图片描述

管理—>用户—>选择用户—>报警媒介—>用于发短信
请添加图片描述

在创建两个动作用于告警发送短信和恢复发送短信。

请添加图片描述

告警发送短信配置
请添加图片描述

恢复告警发送短信

请添加图片描述

测试是否成功,管理—>告警媒介类型—>SMS—>后面的测试,将电话号填入测试配置成功
请添加图片描述

看成果图:

请添加图片描述

到此我们的短信测试就已经完成了。接下来为大家赋上短信告警调用的接口案例,以供大家使用

#!/bin/bash
#手机号码
MOBILE_NUMBER=$1
#短信主题
MESSAGE_SUBJECT=$2
#短信内容
MESSAGE_UTF8=$3
#调用短信接口
curl -d "appid=参数&timestamp=参数&sign=参数f&mobiles=${MOBILE_NUMBER}&content=【Zabbix】${MESSAGE_SUBJECT}-${MESSAGE_UTF8}" http://www.短信业务的接口地址	#""里面的信息是短信调用的接口各类参数,根据给公司的内部短信接口填写。

博客写的不咋滴,但是都是自己测试得出的结果,有一些我遇到的坑都踩完了,如果大家在遇到可以评论指出,我们一起解决!

五、总结提升

里面会有一些异响不到的事情,在容器中调用短信接口的时候写的脚本是post请求方式,需要用到curl命令。但是容器内部没有curl命令。

-bash:curl:未找到命令
#有两种方式将curl安装上,一种是yum,一种是在dockerfile文件中将这条命令写进去,然后在重启镜像。第二种比较繁琐,第一种直接安装就可以。当我再进入到容器中使用yum install curl时,
-bash:yum:未找到命令
#使用apt安装yum
apt install yum
-bash:apt:未找到命令
#就很无奈,一步一步深入。查看镜像底层镜像。
cat /etc/os-release
NAME="Alpine Linux"
ID=alpine				#可以看到镜像是alpine的
VERSION_ID=3.13.1
PRETTY_NAME="Alpine Linux v3.13"
HOME_URL="https://alpinelinux.org/"
BUG_REPORT_URL="https://bugs.alpinelinux.org/"
#下一步我们就跟换源,默认源安装软件太慢了,换一下国内的源吧!
sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories
#接着我们在安装cur
apk add curl
#结果就是可以用了。对接上面的脚本post请求可以用了。而且在容器重启后也不会消失。
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐