前置需求: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 感谢!

基于 OpenCLAW + 飞书构建企业级运维智能助手实践

一、引言 在云原生与分布式架构普及的今天,传统运维模式面临着告警分散、操作繁琐、响应滞后、风险不可控等挑战。本文介绍如何基于 OpenCLAW 大模型网关...

阅读全文

CI/CD(七)镜像全球分发

环境 代码托管:gitlab CI:tekton pipline/task: 阿里云 serverless容器(spot实例且按秒计费) 任务管理:redis 镜像分发工具:crane 效果 核心实现 就近...

阅读全文

基于Informer事件实现多阶梯放量(应用预热)

背景 流量控制是保证服务稳定性的重要手段之一。大数据应用服务因为有缓存构建的过程,需要在启动后通过小流量出发缓存构建再才接收全量流量,若未构建缓存会...

阅读全文

欢迎留言