零成本实现Zabbix语音告警
  JLfR0R6RmX5C 2023年11月02日 23 0

一、场景模拟

国内某知名大型证券企业A公司,在使用开源Zabbix监控平台时发现Zabbix只能依据告警级别产生相应的声音通知,却无法对告警信息进行语音播报。为此,运维同事小东自告奋勇为公司打造了一套“零成本的最简单的Zabbix语音告警”方案,实现与Zabbix的告警对接,为公司省下10W+的运维费用。

二、实现原理

1、软硬件准备

1)一台带有声音的window操作系统的电脑,作为大屏展示Zabbix系统告警的工具

2)一个zabbix_agent安装包

3)一个bat脚本(调用window系统自带的语音助手内置工具)

4)Bat_To_Exe_Converter.exe。把bat脚本转换成exe的工具。这个工具主要是为了解决bat脚本调用时会有弹窗的问题(即使网上有命令可以把bat脚本放置后台执行,但是还是调用bat还是会有一瞬间窗口闪过,所以需要通过该软件把脚本放到后台运行)

2、实现原理

1)语音播放bat,读取zabbix_server推送过来的告警标题,调用系统内置的语音助手,然后该bat参数接收一个参数为zabbix_server产生告警时,传过来的告警标题。

2)把该语音告警播放bat脚本加到window的计划任务中。注意:zabbix_agent的键值有些命令无法调用,这种情况可以考虑使用把脚本加入到计划任务,然后agent自定义键值调用对应的计划任务。具体原因可能时window操作系统的一些安全限制导致,可能把某些操作会被拦截

3)安装zabbix_agent。自定义一个键值命令,来调用window的语音告警播放的计划任务,用来把接收到的告警语音播放。

4)配置告警动作,zabbix_server产生告警时,执行客户端的命令具体为,zabbix_get -s  客户端的ip -k ‘语音告警的键值’。这样的话,就可以实现告警产生后,调用大屏展示告警的那台window的计划任务,然后由计划任务把接受到的告警标题语音播放出来。

注意:一般传提告警标题参数即可,很多告警标题都判断出具体告警,简洁明了

三、实验过程

1、准备bat脚本(33.bat为语音播放bat脚本)

脚本内容如下:

零成本实现Zabbix语音告警_zabbix告警

@echo off

for /f %%i in (‘type “G:\alert_mess.txt”‘) do (

  set “alert_mess=%%i”

)

脚本说明:上面命令是必须,G:\alert_mess.txt是每次告警产生后,临时存放告警标题的文件,具体路径可以自定义,这个文件之所以存在,是因为计划任务用cmd调用时无法传入参数,因此为了灵活调用。后续zabbix产生告警时,会做两个操作,第一个就是把告警标题存放到G:\alert_mess.txt这个目录,然后再调用上面的bat脚本,获取文本中的告警标题,进行语音播放,播放完毕后,清空alert_mess.txt的内容,等待下次告警的新内容。

mshta vbscript:createobject(“sapi.spvoice”).speak(%alert_mess%)(window.close)   

脚本说明:上面命令时调用window自带的语音助手,用于语音播报。alert_mess的内容就是告警标题的内容,接收到的告警标题是什么,语音播报就会播放什么

2、把上面的bat脚本转换成exe工具

打开软件

零成本实现Zabbix语音告警_zabbix告警_02

注意:如果上面转换不成功,可能会是系统自带或者杀毒软件拦截,可临时关闭进行转换


零成本实现Zabbix语音告警_zabbix语音告警_03

3、添加计划任务

快捷键,win+r,输入taskschd.msc打开计划任务

零成本实现Zabbix语音告警_zabbix语音告警_04

零成本实现Zabbix语音告警_zabbix_05

零成本实现Zabbix语音告警_zabbix语音告警_06

零成本实现Zabbix语音告警_zabbix告警_07

零成本实现Zabbix语音告警_zabbix语音告警_08

零成本实现Zabbix语音告警_zabbix_09

零成本实现Zabbix语音告警_zabbix告警_10

开启agent的远程调用参数。Agent版本如果是3.X或者4.X,开启远程配置参数命令是EnbaleRemoteCommands=1。这个参数开启后,用于接收Zabbix产生的告警标题。

零成本实现Zabbix语音告警_zabbix语音告警_11

5、配置Zabbix的告警动作和脚本

注意,下面我配置的环境是基于Zabbix6.0的,如果是Zabbix3-5版本配置可能存在差异。

零成本实现Zabbix语音告警_zabbix告警_12

添加下面的命令

/itops/zabbix/bin/zabbix_get -s 192.168.74.1 -k ‘system.run[echo “[产生告警]{HOST.IP}的{TRIGGER.NAME}”>G:\alert_mess.txt]’

注意:这个文件的路径要和33.exe读取的文件路径一致

/itops/zabbix/bin/zabbix_get -s 192.168.74.1 -k ‘run’

注意:这个键值要和自定义键值一致

零成本实现Zabbix语音告警_zabbix告警_13

添加恢复告警,主要是为了语音告警时,区别告警产生还是恢复

产生告警

零成本实现Zabbix语音告警_zabbix告警_14

恢复告警

零成本实现Zabbix语音告警_zabbix_15

零成本实现Zabbix语音告警_zabbix语音告警_16

零成本实现Zabbix语音告警_zabbix语音告警_17

四、验证成果

零成本实现Zabbix语音告警_zabbix语音告警_18

语音播放视频效果可通过下面链接查看,语音播报大概在37-44s。其他是触发器尚未更新

链接:https://pan.baidu.com/s/1gd87dc02XtrfdUuW8KzyHw

提取码:26pt

五、补充

上面的脚本可以调整语速和音量,还有可以自行替换语音包。

以上就是这一期的Zabbix运维知识分享。大家好,我是乐乐,专注运维技术研究与分享,关注我学习Zabbix等使用技巧。


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  SzVG4h2uFmuP   2023年12月06日   14   0   0 zabbix
  SzVG4h2uFmuP   2023年12月06日   15   0   0 监控zabbix
  SzVG4h2uFmuP   2023年12月12日   21   0   0 zabbix
  SzVG4h2uFmuP   2023年12月09日   37   0   0 zabbix
JLfR0R6RmX5C