Docker容器中的zabbix配置短信告警
Docker容器中的zabbix配置短信告警一、环境:公司中的zabbix监控跑在docker容器中,docker里的镜像通docker-compose文件启动。zabbix版本:5.2.6zabbix-agent版本:5.2.6网上的一律千篇的文章都是1分为2的形式,功能实现,分享一下本人实现短信告警的操作。二、思路:首先zabbix支持alertscripts告警。在进入到docker容器里的
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.2 | Centos7 | 互联网 |
二、思路:
首先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=参数×tamp=参数&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请求可以用了。而且在容器重启后也不会消失。
更多推荐
所有评论(0)