智能监控:Zabbix远程执行命令,文末附Zabbix培训师视频讲解_计划任务

Zabbix远程执行命令

有时,一些简单问题的出现,并不需要我们投入系统工程师或者技术支持团队的人力来解决,通过远程命令的执行和一些升级操作,Zabbix提供了在问题发生时,甚至在发生之前自动解决问题的功,保持监控的连续性。只有在问题持续无法解决的情况下才会通知到负责人员


文末查看Zabbix培训师视频详解:什么是Zabbix Remote Commands

先来看看社区专家黄佳灏的经验分享:关于Zabbix远程执行命令之system.run在实际场景中的一些应用


智能监控:Zabbix远程执行命令,文末附Zabbix培训师视频讲解_计划任务_02

关于Zabbix远程执行命令


 黄佳灏 


智能监控:Zabbix远程执行命令,文末附Zabbix培训师视频讲解_计划任务_03

关于作者:于2008年进入UL公司, 在8年中任职运维工程师。从2016年开始接触Zabbix一直到现今,现已成为上海宏时数据系统有限公司的Zabbix高级实施工程师。对于Zabbix的大屏开发有深入了解,比较擅长Python及Shell作为脚本解决监控问题。


智能监控:Zabbix远程执行命令,文末附Zabbix培训师视频讲解_计划任务_02

众所周知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远程执行命令,文末附Zabbix培训师视频讲解_redis_05

通过zabbix_get -s 192.168.126.128 -k "system.run[ps -ef | grep -v grep | grep zabbix_agent ]",可以看到所有的zabbix_agentd的进程。


智能监控:Zabbix远程执行命令,文末附Zabbix培训师视频讲解_重启_06

通过wc –l来统计进程的数量,这样返回的值就可以被Zabbix监控并采集。这个示例只是展示最基本的用法,因为统计进程数量Zabbix已提供内置监控项。


智能监控:Zabbix远程执行命令,文末附Zabbix培训师视频讲解_自定义_07智能监控:Zabbix远程执行命令,文末附Zabbix培训师视频讲解_zabbix_08

监控过来的值就可以通过触发器触发,当采集的值等于0的时候触发。


02




   替代定时任务   


在监控过程中,有时需要采集的值是通过计划任务定时生成的,例如文件、快照等。因为大量的监控项如果是通过文件可以取得的话,那么就可以大量节省连接被监控程序或应用的开支。但是在实际场景中,这样的计划任务不能被审核通过,需要有另外的替代方式,这个时候就需要用到system.run。

例子:创建Redis状态文件,并判断是否创建成功,成功返回1,不成功返回0。

使用宏变量传值

{$REDIS_CLI}:Redis执行文件的路径。

{$HOST_IP}:主机的IP地址

{#PORTS}:自动发现的端口,此例为多实例监控

{$REDIS_PWD}:Redis数据库密码。


智能监控:Zabbix远程执行命令,文末附Zabbix培训师视频讲解_计划任务_09智能监控:Zabbix远程执行命令,文末附Zabbix培训师视频讲解_redis_10

运行info.sh脚本文件


智能监控:Zabbix远程执行命令,文末附Zabbix培训师视频讲解_自定义_11

这样就能够控制每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命令。

可以看到该计划任务已成功创建。


智能监控:Zabbix远程执行命令,文末附Zabbix培训师视频讲解_计划任务_12

这样该任务会在下午5点开始执行脚本:


智能监控:Zabbix远程执行命令,文末附Zabbix培训师视频讲解_redis_13

脚本内容:


智能监控:Zabbix远程执行命令,文末附Zabbix培训师视频讲解_计划任务_14

这样,就可以通过计划任务重启Zabbix Agent服务了。

如果不需要这个计划任务,还可以通过system.run删除该计划任务。


zabbix_get -s 192.168.126.1 -k "system.run[schtasks /delete /TN Test /F]"


这些就是system.run在实际场景中的一些应用,Zabbix很多时候每一个功能点都会为我们开启另一个领域,在新的领域中又有许多新的知识点需要学习,这也是Zabbix的魅力吧。


智能监控:Zabbix远程执行命令,文末附Zabbix培训师视频讲解_计划任务_15



智能监控:Zabbix远程执行命令,文末附Zabbix培训师视频讲解_计划任务_16

#ZabbixSeries已经上线了!!我们将定期为大家发布Zabbix系列视频讲解。中文/英文(中文字幕),敬请期待:

第一期:Zabbix远程命令

Zabbix培训师Dmitry Lambert

点击查看

????????????


智能监控:Zabbix远程执行命令,文末附Zabbix培训师视频讲解_计划任务_17


智能监控:Zabbix远程执行命令,文末附Zabbix培训师视频讲解_计划任务_02