zabbix自动化之自动语音平台

背景

这个之前就提过的,人工打电话通知确实是有点蛋疼的,作为互联网公司必须有技术解决呀~

自动语音的好处我就不多说了,具体的那种方案可以参考我之前的博客:

zabbix自动化之自动语音

我现在基础的解决方案是Nexmo的语音服务,其他的方案类似,总之这部分就是个语音接口而已。

系统要解决的问题

  • 和zabbix对接,有告警自动拨打电话

  • 记录每次自动电话的结果:

这部分简单说下,nexmo默认带了报表,但更多的是计费用的报表,也就是不会帮我们统计

每次未接通的自动电话。 那我们为啥要做这个统计呢?

1. 计费对账

2. 业务部门处理不及时,可以拿这个结果督促业务部门:

    例如可以直接出报表给部门老大,某某同学这一周打了多少个电话,但只接通了几个,

    拿数据说话~

* 告警合并

又绕到这个地方了,告警的合并是个很麻烦的事情,但电话的性质还不同。短信多发

一两条估计还可以,但自动电话多打几个估计就很招人烦了。所以自动电话这块一定

要考虑好这个,不然遇到大量告警,简直是像吃了卖炫,电话多的根本停不下来~

系统架构

核心不再前台页面上,所以这玩意就无所谓了。

  • django:

    没啥说的,django写web必备

  • redis:

    做消息队列用,暂缓所有的告警信息

  • mysql:

    记录自动电话的接通记录等

架构图:

直接贴思维导图了:

自动语音平台

具体实现

与zabbix互通

从上面的图中的处理流程可以看到,其实zabbix只是负责将消息推入到redis中,就认为

发送成功了,不再关心了,其他的事情都扔给自动语音平台去玩了。

具体zabbix的脚本我就不用多说了,怎么写你们都懂的,唯一的差别是将发生邮件的这部分

改成将消息推入redis。

告警合并

告警合并和业务特征关系太密切,所以短时间内自动电话我只做了一个按照收件人合并的规则。

即如果五分钟内所有电话号码是同一个的则将所有的信息进行合并在一起,在一个电话

中通知,避免短时间内的大量电话。

其实这里可以做很多的合并规则,根据不同的告警优先级、业务特定等进行自动选择

合并规则,扯远了,那是整个告警平台要做的事情了,整个自动语音平台以后会并到

告警平台去的。

合并之后生成最终要发送的消息,然后去拨通自动电话。

拨通自动电话

这部分没啥说的,主要就是调用nexmo的接口,我做的就两点:

  • 官方给的python库不好用,所以我简单的写了一个自己用

  • 改用多线程去发送,提高效率

获取自动电话结果

这部分主要是为了获取每次自动电话的接通情况,然后将结果存入mysql中,后续进行

出报表呀这些都很方便了。

贴个图:

自动电话结果入库

总结

1.合并规则有点略微简单了,目前在考虑加新的合并规则,看业务需求吧

2.这部分其实只是整个告警平台的一部分,那个平台规划太大,加上进度太慢,

所以我先做了这部分应急用

3.线上在跑了,不过由于合并规则还是有点问题,所以偶尔还会遇到大量电话的骚扰,

想玩的那就考虑好合并这些,或者通过该告警触发阀值的方式去提高准确性,

减少误报

2 Responses to “zabbix自动化之自动语音平台”

  1. 邓磊 says:

    感谢黄总的分享,我通过跟你学习,也是呀nexmo这个软件,来进行语音报警,是呀callback获取结果。

  2. 少林功夫好 says:

    好厉害。

Leave a Reply

Your email address will not be published. Required fields are marked *


To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax