国内某知名大型证券企业A公司,在使用开源Zabbix监控平台时发现Zabbix只能依据告警级别产生相应的声音通知,却无法对告警信息进行语音播报。为此,运维同事小东自告奋勇为公司打造了一套“零成本的最简单的Zabbix语音告警”方案,实现与Zabbix的告警对接,为公司省下10W+的运维费用。
1)一台带有声音的window操作系统的电脑,作为大屏展示Zabbix系统告警的工具
2)一个zabbix_agent安装包
3)一个bat脚本(调用window系统自带的语音助手内置工具)
4)Bat_To_Exe_Converter.exe。把bat脚本转换成exe的工具。这个工具主要是为了解决bat脚本调用时会有弹窗的问题(即使网上有命令可以把bat脚本放置后台执行,但是还是调用bat还是会有一瞬间窗口闪过,所以需要通过该软件把脚本放到后台运行)
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的计划任务,然后由计划任务把接受到的告警标题语音播放出来。
注意:一般传提告警标题参数即可,很多告警标题都判断出具体告警,简洁明了
脚本内容如下
@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的内容就是告警标题的内容,接收到的告警标题是什么,语音播报就会播放什么
打开上面的这个软件
注意:如果上面转换不成功,可能会是系统自带或者杀毒软件拦截,可临时关闭进行转换
快捷键,win+r,输入taskschd.msc打开计划任务
开启agent的远程调用参数。Agent版本如果是3.X或者4.X,开启远程配置参数命令是EnbaleRemoteCommands=1。这个参数开启后,用于接收Zabbix产生的告警标题。
注意,下面我配置的环境是基于Zabbix6.0的,如果是Zabbix3-5版本配置可能存在差异。
添加下面的命令
/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'
注意:这个键值要和自定义键值一致
添加恢复告警,主要是为了语音告警时,区别告警产生还是恢复
产生告警
恢复告警
语音播放视频效果可通过下面链接查看,语音播报大概在37-44s。其他是触发器尚未更新
链接:https://pan.baidu.com/s/1gd87dc02XtrfdUuW8KzyHw
提取码:26pt
上面的脚本可以调整语速和音量,还有可以自行替换语音包。
以上就是这一期的Zabbix运维知识分享。大家好,我是乐乐,专注运维技术研究与分享,关注我学习Zabbix等使用技巧,更多运维问题还可以到乐维社区留言提问哦~
错误信息