Zabbix远程执行命令
有时,一些简单问题的出现,并不需要我们投入系统工程师或者技术支持团队的人力来解决,通过远程命令的执行和一些升级操作,Zabbix提供了在问题发生时,甚至在发生之前自动解决问题的功,保持监控的连续性。只有在问题持续无法解决的情况下才会通知到负责人员
文末查看Zabbix培训师视频详解:什么是Zabbix Remote Commands
先来看看社区专家黄佳灏的经验分享:关于Zabbix远程执行命令之system.run在实际场景中的一些应用
关于Zabbix远程执行命令
黄佳灏
关于作者:于2008年进入UL公司, 在8年中任职运维工程师。从2016年开始接触Zabbix一直到现今,现已成为上海宏时数据系统有限公司的Zabbix高级实施工程师。对于Zabbix的大屏开发有深入了解,比较擅长Python及Shell作为脚本解决监控问题。
众所周知Zabbix是开源监控软件中的典型代表,Zabbix具备了采集功能强大的特点,而这个强大的功能依托于Zabbix具有丰富的远程执行命令的各种手段。
这些手段包括:
- 监控项中的外部检查
- 用户的自定义监控项
- system.run内置监控项
- 自定义警报脚本
- 告警触发后的执行命令
- Zabbix的全局自定义脚本
我们今天着重聊下system.run这个内置监控项,尤其在实际场景中的运用。首先这个内置监控项在官方文档中有详细介绍:
system.run[command,<mode>]
在主机上运行指定的命令。
命令执行的文本结果
1 - 模式为nowait(不管命令结果如何)
command - 要执行的命令
mode - 可能的值:
wait - 等待执行结束(默认),
nowait - 不等待
最多可以返回512KB的数据,包括截断的尾随空格。
要被正确的处理,命令的输出必须是文本。
示例:
⇒ system.run[ls -l /] → 根目录的详细文件列表。
注意: 要启用此功能,Zabbix agent配置文件 必须包含EnableRemoteCommands=1 选项。
注意: 监控项的返回值是标准输出以及由命令产生的标准错误输出。 如果没有使用nowait标志,则会检查执行结果。
注意: 从Zabbix 2.4.0开始,空结果是允许的。
特别需要注意的是,如果要启用这个功能的话,必须要在Zabbix Agent的配置文件中包含EnableRemoteCommand=1,所以此功能必须依赖于Zabbix Agent。
01
监控项
既然是内置监控项,那么就可以很方便得取回我们所要监控的内容。
例子:Zabbix Agent进程数
通过zabbix_get -s 192.168.126.128 -k "system.run[ps -ef | grep -v grep | grep zabbix_agent ]",可以看到所有的zabbix_agentd的进程。
通过wc –l来统计进程的数量,这样返回的值就可以被Zabbix监控并采集。这个示例只是展示最基本的用法,因为统计进程数量Zabbix已提供内置监控项。
监控过来的值就可以通过触发器触发,当采集的值等于0的时候触发。
02
替代定时任务
在监控过程中,有时需要采集的值是通过计划任务定时生成的,例如文件、快照等。因为大量的监控项如果是通过文件可以取得的话,那么就可以大量节省连接被监控程序或应用的开支。但是在实际场景中,这样的计划任务不能被审核通过,需要有另外的替代方式,这个时候就需要用到system.run。
例子:创建Redis状态文件,并判断是否创建成功,成功返回1,不成功返回0。
使用宏变量传值
{$REDIS_CLI}:Redis执行文件的路径。
{$HOST_IP}:主机的IP地址
{#PORTS}:自动发现的端口,此例为多实例监控
{$REDIS_PWD}:Redis数据库密码。
运行info.sh脚本文件
这样就能够控制每1分钟定时生成出我们所要的文件了。
03
在windows操作系统上的使用
Zabbix服务器端无法对客户端的Agent直接操作,如果需要执行重启Agent服务的话,需要登录到客户端执行。在Linux环境中,可以通过脚本的方式实现,而在Windows环境中,却有诸多的不便,因为实际环境中大量部署Windows,且没有有效的批量部署工具,那么如何通过内置监控项system.run来实现呢?因为system.run是依赖于Zabbix Agent的,一旦Agent服务停止,就无法通过system.run启动了。
例子:批量重启Windows的Zabbix Agent。
zabbix_get -s 192.168.126.1 -k "system.run[schtasks /create /SC ONCE /TN Test /TR C:\zabbix\zabbix_agentd.conf.d\restart_agent.bat /ST 17:00 /ET 17:20 /RU Administrator]"
通过system.run创建出一个计划任务。
/SC:计划任务的性质
/TN:创建任务的名称
/TR:执行的文件名
/ST:开始的时间
/ET:结束的时间
/RU:执行的用户
具体参数及说明参考schtasks命令。
可以看到该计划任务已成功创建。
这样该任务会在下午5点开始执行脚本:
脚本内容:
这样,就可以通过计划任务重启Zabbix Agent服务了。
如果不需要这个计划任务,还可以通过system.run删除该计划任务。
zabbix_get -s 192.168.126.1 -k "system.run[schtasks /delete /TN Test /F]"
这些就是system.run在实际场景中的一些应用,Zabbix很多时候每一个功能点都会为我们开启另一个领域,在新的领域中又有许多新的知识点需要学习,这也是Zabbix的魅力吧。
#ZabbixSeries已经上线了!!我们将定期为大家发布Zabbix系列视频讲解。中文/英文(中文字幕),敬请期待:
第一期:Zabbix远程命令
Zabbix培训师Dmitry Lambert
点击查看
????????????