前置需求:1.所使用的电话语音功能,需要支持查询电话语音的状态(未接通/拒接/已接通 等)
2.所有的告警需要有对应的负责人,一个人循环CALL也行:A/B/C/D…………

该程序实现的需求:
当zabbix产生告警时,根据负责人清单中的顺序,进行电话语音告警推送,每人重复N(当前代码N=3)次,直到其中一次语音被接通。
例子:
某个告警有负责人:A/B/C,告警产生后,首先将给A发送语音,如果A未接通,将在T(当前代码T=120s)时间后再次发送语音告警,如果N次语音都没有接通,则将通知人替换成B,依次类推,任何一次电话被接通则停止语音推送。

思路:
1.生成一个process清单,里面纪录了当前所有需要打call的信息。(本程序用的纯文件存储)
2.每10秒轮询一次这个process清单,根据里面的信息,查看历史的call是否成功接收,没收继续call并更新相关信息,收了就删掉对应process。
3.写一个独立的脚本,提供给zabbix调用,用来新建process

几个通用的变量:
type:根据zabbix的特性,分为了host,ip和triggerid,分别对应zabbix里面的host,ip和告警的tirggerid,方便更贴近公司内部监控逻辑要求。
key_value:为告警所属关键字,和type一起,用来识别该告警将会发给哪一些人。
phoneNum:告警联系人的手机号

代码文件:

联系人文件:
${type}_call.list
存储该类type的联系人清单及联系顺序,格式如下:
${key_value} 第一个phoneNum 第二个人的phoneNum ………………第N个人的phoneNum
举例:

process文件,当前实现方式是放在了一个文件夹里面,每个文件都是一个process
格式如下:
文件名:$type.$key_value
文件内容格式:
$1:上次更新的时间,纪录上次打call的时间
$2:type
$3:key_value
$4:当前打call的手机号
$5:当前联系人的顺位
$6:本条process剩余多少次轮询
$7:短信发送内容
举例:

生成process的脚本

轮询process的脚本:

与zabbix的交互见另外一篇:

后续需化的点:
1.将每个人的通话次数,重复call的间隔时间,做成变量话。
2.需要支持电话语音内容包含空格等特殊字符
3.将整个功能服务化,就是不用crontable那种,配置好第三方语音的脚本后,直接启动起来就好。



如果想赏钱,可以用微信扫描下面的二维码,一来能刺激我写博客的欲望,二来好维护云主机的费用; 另外再次标注博客原地址 itnotebooks.com 感谢!

CI/CD(五)Flink 应用部署

环境 代码托管:gitlab CI:tekton CD: tekton pipline/task: 阿里云 serverless容器(spot实例且按秒计费) 应用:K8S Flink 应用需要解决的是任务的灵活增...

阅读全文

CI/CD(四)VM 应用部署

环境 代码托管:gitlab CI:tekton CD: 代码自实现多批次部署 pipline/task: 阿里云 serverless容器(spot实例且按秒计费) 应用:ECS(ESS) 应用部署在弹性...

阅读全文

CI/CD(三)GPU 应用部署(k8s)

环境 代码托管:gitlab CI:tekton CD: ArgoCD pipline/task: 阿里云 serverless容器(spot实例且按秒计费) 应用:k8s GPU应用的特殊性在于单个镜像的大小在...

阅读全文

欢迎留言