如何在 Zabbix 代理上运行命令?

Posted

技术标签:

【中文标题】如何在 Zabbix 代理上运行命令?【英文标题】:How to run command on Zabbix agents? 【发布时间】:2014-08-05 00:04:06 【问题描述】:

我想在 Zabbix 代理上运行命令:

一些简单的 unix 命令,用于获取我们的报告数据。 代理端需要一些处理时。

似乎有多种方法正在讨论。那么如何在 Zabbix 代理上执行这样的命令呢?

【问题讨论】:

【参考方案1】:

直接从新项目从服务器运行命令。

首先,在代理配置文件中设置:EnableRemoteCommands=1(适用于所有代理)。启用此功能。

创建一个新项目。 “新项目”页面上的一个字段显示“密钥”。输入:

system.run[command]

作为'key'字符串。其中 command 是您要下载并在代理上运行的命令。这是一个例子:

system.run[sysctl dev.cpu.0.temperature | cut -d ' ' -f 2 | tr -d C]

也许您需要运行一些更复杂但太长而无法放入其中的东西?然后你需要制作一个自定义脚本。将您的自定义脚本放在本地网络服务器或网络上的某个地方。

那么你可以将项目的键设置为:

system.run[ command -v script && script || wget script_url -O /path/to/script && script]

在第一次执行时获取缺失的脚本并将其下载到代理。然而,这是一个相当粗糙的黑客攻击。不是很优雅。

更好的方法是转到菜单中的“管理”->“脚本”。从那里,您可以创建一个新脚本以用于可以配置为在您的任何代理上运行的项目。

制作一个特殊的自定义项以定期重新运行您的脚本(如 cron 作业)。特殊脚本项的工作是使用您需要的其他自定义脚本的集合来更新代理。

当然,您可以将所有自定义脚本直接写入 zabbix 的 mysql 数据库。这样做非常诱人。但是请注意,如果您的 zabbix 数据库被炸毁或损坏/丢失,它们就会丢失并且容易受到攻击。 Zabbix 数据库总是有一个变得庞大、笨重和失控的习惯。所以不要那样做。将它们单独存储在其他地方并受版本控制(git 或 subversion)。

完成所有排序后,我们终于可以继续创建更多自定义项来运行您的自定义脚本。再次使用:

system.run[script]

和以前一样作为项目的键。其中“脚本”是命令(加上任何参数),用于在代理上本地执行您的自定义脚本。

【讨论】:

啊。我忘了提:EnableRemoteCommands=1需要在agent conf文件中设置。否则system.run[command] 将不起作用! 我强烈反对EnableRemoteCommand。从安全角度来看,这对我个人来说是不可行的。我们所做的是使用外部检查,如 here 所述。 2 点:1) 除了 Windows 可能的例外,EnableRemoteCommand 将只允许以 'zabbix' 用户身份运行命令。 zabbix_agentd 应该运行的用户。而不是根。巫婆在'sudoers'文件中正确配置,'zabbix'用户可能被允许只运行具有任何更高权限的选定命令。 2)问题是“如何在代理上运行命令”。关于外部检查功能的 zabbix 文档页面说它们只能在服务器(而不是代理)上运行。 1) 能够获得对其他服务器的访问权限已经可以在其他服务器上获得 root 访问权限。 2)确实,对不起。我将外部检查与UserParameters 混为一谈。这就是我们所使用的,并且减少了可以执行的可能命令的数量。 啊确实 UserParameters 通常比system.run[] 更受欢迎。但是 1) 听起来有点令人担忧。您能否澄清一下,或者提供专门针对 zabbix_agent 的链接?非常感谢。【参考方案2】:

    在客户端定义用户参数(zabbix agent所在的位置) 位于)/etc/zabbix/zabbix_agentd.conf

    关键应该是 独特。我以lsof为例:UserParameter=open_file,lsof | wc -l

    重启代理:service zabbix-agent restart

    使用zabbix_get 实用程序测试密钥是否正常工作。要从 zabbix 服务器执行此操作,请调用以下命令:/usr/local/bin/zabbix_get -s <HOST/IP of the zabbix agent> -k open_file(在这种情况下它应该返回一个数字)

    在模板处用zabbix服务器上的key创建一个item level(返回类型要正确定义,否则zabbix 不接受):

    类型: Zabbix 代理(主动)

    密钥: open_file

    信息类型:数字(无符号)

    数据类型:十进制

    您可以使用该项目创建一个图表来监控在 定期间隔。

这里是官方documentation。

【讨论】:

以上是关于如何在 Zabbix 代理上运行命令?的主要内容,如果未能解决你的问题,请参考以下文章

如何设计在 AWS 上运行的服务器监控系统

zabbix如何阶梯升级报警

zabbix-agent 使用普通用户来运行

Kafka 运行命令

cmd运行jar包时抓包方法

zabbix