zabbix docker 配置openmas云平台短信接口
zabbix docker配置openmas云平台短信接口
1、系统环境
- CentOS Linux release 7.2.1511 x86_64(Core)
- Docker version 17.03.0-ce, build 3a232c8
- zabbix:alpine-5.0-latest
zabbix采用docker容器方式部署
openmas云平台是移动公司提供的一个云上短信发送平台,支持http接口,接受post方式提交请求。原本打算用python写短信发送脚本,后来发现alpine镜像中配置python环境比较麻烦,查阅多方资料后,决定用shell编写脚本。
2、镜像改造
1、修改/bin/sh链接以支持数组处理,以下引用A0小何
通过alpine作为基础镜像构建容器镜像已经成为默许的标准,因为它体积小,而且有非常好用的保管理工具,当然,在alpine下也有许多坑需要填,最近在制作镜像时,又遇到了新问题,在脚本中使用数组a=(1,2,3)时提示如下错误:syntax error: unexpected “(”
导致出现如上提示错误是alpine下的sh脚本不支持(1,2,3)格式的数组表达方式(还有其他的问题,会在后续文章中分享),而bash版shell支持,因此不能直接使用。前面也提到了alpine的优势,最好是能够改造一下,使其也支持1,2,3)格式的数组表达方式
在网上查找了些资料,有了一些眉目,只给了报错的原因,没说怎么解决,下面将给出原因以及解决的办法
首先登录到容器内,查看sh的版本,(通常有ash、bash、sh等),
bash-4.3# ls -l /bin/*sh lrwxrwxrwx 1 root root 12 Jun 17 2017 /bin/ash ->/bin/busybox -rwxr-xr-x 1 root root 682128 Apr 20 2017 /bin/bash lrwxrwxrwx 1 root root 12 Jun 17 2017 /bin/fdflush->/bin/busybox lrwxrwxrwx 1 root root 12 Jun 17 2017 /bin/sh ->/bin/busybox发现alpine中的sh使用的是bin/busybox(命令展示结果最后一行),因此需要将sh切换到/bin/bash下
下面给出解决思路:
1.删除原有链接;
2.新建一个软链接指向/bin/bash,
脚本实现如下:
cd /bin && rm -f sh && ln -s /bin/bash sh
最后再执行脚本,能正常运行,问题解决,当然可以将其写入到容器构建中,做成新的镜像,以后使用该镜像创建出来的容器都不会再出现这类问题了。
2、安装curl以支持http方式调用
原生alpine镜像中没有安装curl,需要手动安装。离线安装方式:
1)查看镜像系统版本
docker exec -it zabbix-server-mysql /bin/sh
sh-5.0$ cat /etc/issue
Welcome to Alpine Linux 3.12
Kernel \r on an \m (\l)
2)下载对应的curl包并安装
下载地址: http://mirrors.ustc.edu.cn/alpine/v3.12/main/x86_64/curl-7.69.1-r1.apk
上传到镜像绑定的任意宿主机路径下,例如/usr/lib/zabbix/alertscripts/
用root用户登陆镜像执行安装
docker exec -it -u root zabbix-server-mysql /bin/sh
sh-5.0# apk add --no-cache /usr/lib/zabbix/alertscripts/curl-7.69.1-r1.apk
sh-5.0# curl --version
curl 7.69.1 (x86_64-alpine-linux-musl) libcurl/7.69.1 OpenSSL/1.1.1g zlib/1.2.11 nghttp2/1.41.0
Release-Date: 2020-03-11
3、短信接口脚本
将脚本上传至alertscripts文件夹内,添加执行权限
chmod +x sms.py
#!/bin/sh
timestr=$(date "+%Y%m%d%H%M%S")
# split phonenumber,seperated by ","
arr=(${1//,/ })
# translate arr into a json list string like ["1234","1232",]
lst="["
for var in ${arr[@]}
do
lst="${lst}\"${var}\","
done
lst="${lst%?}]"
content=$2
send_result=$(curl -H "Content-Type: application/json; charset=utf-8" -s -X POST -d '{"applicationId":"APP_KEY","password":"APP_SECRET","requestTime":"'"${timestr}"'","funCode":"1002","mobiles":'${lst}',"content":"'"${content}"'"}' http://112.13.167.146/yunmas_api/smsApi/batchSendMessage)
cat >> /usr/lib/zabbix/alertscripts/sms.log <<EOF
`date` sendto: $lst
result: $send_result
----------------------------------------------------
EOF
参考:shell调用curl使用post方式提交json参数含变量的写法
4、zabbix配置报警媒介(略)

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)