我是 Zabbix 新手。我从 fluentd 客户端向 zabbix 服务器端口 10050 发送数据。我的问题是我应该如何配置 Zabbix 项目以从端口读取此数据并为其生成图表。
我的数据就像
.{"request":"agent.data","clock":1501499361,"data":
[
{"key":"Type" ,"value":"INFIO" ,"host":"flunet1","time":1501499361},
{"key":"Action" ,"value":"RESET" ,"host":"flunet1","time":1501499361},
{"key":"RandNumber","value":"47820" ,"host":"flunet1","time":1501499361},
{"key":"Message" ,"value":"aavwafkfxwa","host":"flunet1","time":1501499361},
{"key":"Indexer" ,"value":"10891" ,"host":"flunet1","time":1501499361}
]}
答案1
我相信,有两种基本方法可以实现您的目标。
一种方法是(通过模板或显式配置 - 首选模板)具体明确地配置您要发回的项目(即您确切知道有多少个以及它们的名称)。这是最简单的方法,但并非总是可行的。
另一种是通过“低级发现”即 LLD 动态配置项目。这允许您使用原型项目并在运行时控制有多少个项目以及它们的名称(在一定限制内)。这对于交换机接口之类的东西很有用,因为您不一定知道会存在多少个项目(实际上,虚拟端口可能会发生变化)。
从您的帖子中无法清楚看出您需要哪个,但一旦确定,就会有很多例子。人们经常混淆的地方在于对这两个步骤的处理方式相同。如果您需要 LLD,它所做的就是创建项目定义;然后您仍然必须通过拉取(轮询某个代理以获取数据)或推送(zabbix trapper,可能是 snmp trapper)将数据放入其中。
正常(但不是必需)的过程是 LLD 不频繁(并且通常更耗费处理器资源),而轮询填充数据更频繁。在这种情况下,将使用单独的例程。也可以使用一个例程返回两组数据 - 通过 LLD 创建项目的 JSON 数据(这返回到 STDOUT),以及通过 Zabbix Sender(到 zabbix 服务器端口)填充创建的项目的项目数据。请注意,如果您第一次(或两次)执行此操作,则不会用数据填充项目,因为需要一些时间才能完全定义和准备好项目,但随后发送两者的调用将起作用,因为 LLD 创建已经存在的项目基本上是无操作(我说“基本上是因为如果您在 LLD 期间无法创建项目,它将有资格自动删除,因此您每次执行 LLD 时都需要发送所有项目的 JSON)。
再次,从您的问题来看,不完全清楚您是否需要 LLD;如果不是,只需为每个项目创建项目,然后将它们作为单独的项目从轮询返回到代理,或者再次作为 zabbix 发送方返回(由 zabbix 发送方填充的“zabbix trapper”项目的优势在于您可以通过一次远程操作同时计算和发送大量项目的数据,而不是每个项目都进行自己单独的轮询)。
答案2
看起来您想将自定义数据传递给 Zabbix。您不能将任何随机数据推送到 Zabbix 服务器端口(另请注意,服务器端口是 10051,而不是 10050),您必须使用正确的格式。
- 您可以根据以下示例自行实现发送方协议https://www.zabbix.org/wiki/Docs/protocols/zabbix_sender/3.0
- 您可以使用现有模块,例如扎比克斯::发送方
- 您可以使用zabbix_sender
请注意,上述任何一种方法要想起作用,诱捕器物品都必须存在。