我已经构建了一个可以进行各种时间序列分析的系统,现在我想从监控工具中获取数据。由于我的测试环境中已经设置了 Nagios,所以我更喜欢从那里获取数据。但作为第二种选择,我可以访问 Zenoss 测试实例,并且也希望得到有关 Zenoss 的答案。
我想要的是
我想要多个设备上多个 KPI 的时间序列。
理想情况下,我可以指定数据格式,但只要它包含我需要的信息,我很乐意在收到后对其进行转换。我需要的信息只是
- 设备标识符,例如10.2.42.2或者Ubuntu-42A
- 被监控的组件例如中央处理器或者记忆
- KPI 例如%用法,可用千字节数
- KPI 的价值
- 时间戳
最后,我想通过 HTTP 发送数据(现在,稍后通过 HTTPS)。
我已经可以在出现警报时执行此操作 - 例如,当阈值被突破时,我知道如何配置 Nagios 以使用设备 IP 等作为参数调用我的简单脚本 - 然后我的脚本执行 HTTP 请求。但我还没有看到如何将其设置为在每一个轮询。
我不想要什么
我不想要警报数据,我想要原始时间序列。
我不想轮询 Nagios 来获取这些数据 - 轮询间隔会有所不同,而且我想避免不必要的网络流量。
我检查了这个问题但这似乎是将数据从 Nagios 从属节点发送到主节点纳吉奥斯节点。
答案1
您可以使用用于分布式监控的部分来完成此操作。
例如,使用ocsp 命令将所有检查结果发送到其他地方。命令 def 可以指向通过 curl 或类似方式推送 perfdata 的脚本。
答案2
我们nagios.cfg
添加了
obsess_over_services=1
ocsp_command=OUR_COMMAND_NAME
然后我们在中定义新命令commands.cfg
:
command_name OUR_COMMAND_NAME
command_line /path/to/our/script
该脚本接收以下参数:
- 主机名
- 服务说明
- 服务状态
- 来自相关插件的消息
参考我的问题:我想要的设备是这个主机名,并且可以从服务描述和插件消息中提取组件和KPI。
但是我确实需要做一些解析工作来获取这些值,因为插件消息更多的是为人类而不是机器编写的,例如
OK - 1.05 GB used (1.05 GB RAM + 0.00 GB SWAP, this is 32.4% of 3.24 GB RAM)
但至少格式是一致的,所以我没有抱怨。