(这是扎比克斯 2.2.2。
我有一个发现规则可以返回我想要监控的 100 多个项目。每个项目的数据可以通过用户参数调用单独的可执行文件。
将这些作为被动检查来实施会使 zabbix 代理活跃起来,并为每个项目产生一个外部进程。
所有的数据项目可以很容易地一次性收集并批量发送到 Zabbix 服务器(通过zabbix_sender)。我不知道如何正确实现这一点。文档没有回答我提出的(可能很愚蠢的)问题。
如何让 Zabbix 代理对我的自定义数据收集脚本进行一次外部调用,并批量发回 100 多个发现项目的所有数据,而不是调用客户端操作每一个物品? 我想要避免的是让 Zabbix 代理尝试单独收集每个项目。
发现规则必须创建项目。据我了解,每个项目都会导致 zabbix 代理尝试执行某些操作来收集其数据。有没有办法可以阻止这种情况或将一组项目与单个客户端主动检查关联起来?
我不明白的是主动检查应该实施。如果一次主动检查可以发回一批物品的数据,如何定义该项目对于该主机(这样代理就不会尝试单独收集该项目的数据)和定义哪些项目来调用主动检查(或任何应该使用的项目类型)可以进行实际的数据收集(但本身不保存任何数据)?这是文档没有回答我的真正问题。Zabbix 打算如何让我实施主动检查或使用 zabbix_sender 发送项目的批量更新(代理将尝试自行收集)。
答案1
Zabbix 基本概念 - 一项(检查)= 一个值。Zabbix 服务器不提供解析多个值的解析器功能,因此它必须始终只有一个值。
如果你想返回更多的价值,那么你必须使用一些解决方法,请参阅 zabbix UserParameter 返回 2 个或更多值
Zabbix 发送方示例:
允许在 zabbix-agent 中执行命令并创建项目(主动或被动)来运行您的脚本:
system.run["myscript.sh > output_for_zabbix_sender.txt; zabbix_sender -s <host_name> -z <zabbix_server> -i output_for_zabbix_sender",nowait]
它将以 nowait 模式执行命令。myscript.sh 产生以下格式的输出:
hostname key1 value1
hostname key2 value2
...
然后这个输出由 zabbix_sender 处理(发送)到 zabbix 服务器。在这种情况下,项目类型必须是 Zabbix trapper(zabbix_sender)。最终您不需要 system.run 项目,您可以使用 zabbix_sender 作为 cron 作业执行脚本。
如果您需要完美的监控解决方案,请不要忘记处理错误、最小化 IOP……
您也可以使用 zabbix_sender 进行发现 - 只需遵循有关所需格式的文档,例如:
hostname discovery_key {"data":[{"{#ID}": "/"},{"{#ID}":"/usr"},{"{#ID}":"/var"}]}