Zabbix 不会使用 log[] 或 vfs.file.regexp[] 项目更新文件中的值

Zabbix 不会使用 log[] 或 vfs.file.regexp[] 项目更新文件中的值

我正在使用 Zabbix 2.2。
我有一个非常特殊的环境,我必须通过脚本生成所需的数据到文件,然后将该文件从主机上传到 ftp,再从 ftp 下载到 Zabbix 服务器。
文件下载后,我使用 log[] 和 vfs.file.regexp[] 项目对其进行检查。

我使用这些物品如下:

log[/path/to/file.txt,"C.*\s([0-9]+\.[0-9])$",Windows-1250,,"all",\1]
vfs.file.regexp[/path/to/file.txt,"C.*\s([0-9]+\.[0-9])$",Windows-1250,,,\1]

我正在解析的行如下所示:

                C:      8195Mb  5879Mb  2316Mb  28.2

我想要提取的值是文件末尾的 28.2。

我目前正在尝试解决的问题是,当我更新文件(从主机上传到 ftp,然后从 ftp 下载到 Zabbix 服务器)时,该值不会更新。

我在开始时只尝试了 log[],但我怀疑 log[] 将文件视为真实日志文件并且不检查相同的行(尽管按照文档,它应该具有“全部”值),所以我也添加了 vfs.file.regexp[] 项。

log[] 过去曾收到过一个值,但并未更新。vfs.file.regexp
[] 到目前为止尚未收到任何值。file.txt
已多次重新上传和重新下载,但情况并未改变。
似乎 log[] 仅读取文件中的新行,它不会检查已捕获的行是否有任何更改。

zabbix_agentd.log 文件没有报告任何与文件访问有关的问题,也没有报告任何与正则表达式构造有关的问题(当我设置有错误时,它确实报告了 log[] 键的“不支持”)。

我对代理使用调试日志记录级别 - 我没有发现有关该问题的任何有趣信息。

我不知道我可能做错了什么,或者我不知道 Zabbix 如何执行这些检查。我看到了 2 个解决方案:向文件中添加更多行而不是创建新行,或者创建新文件并使用 logrt[] 检查它们,但这些都不能满足我的愿望。
任何帮助都将不胜感激。
当然,如果有人要求,我会提供更多信息 - 目前我不知道还有什么可能有用。

答案1

Item log[] 适用于逐行增加大小的文件,因此在您的情况下正确的方法是坚持使用 vfs.file.regexp[]。

使用 vfs.file.regexp[],您所做的一切都是正确的,只是 Zabbix 中有一个错误(报告为ZBX-8248) 可防止正则表达式中的“$”符号匹配 Windows 行尾。

因此,为了使其同时起作用,您应该从正则表达式中省略“$”。

答案2

我没有尝试过 Zabbix 的日志功能,但我的猜测是日志文件在 Zabbix 代理启动期间打开一次,然后保持打开状态。这意味着即使您覆盖文件,旧文件句柄仍保持打开状态,Zabbix 会从那里读取数据。

如果是这样的话,我建议你采取两种解决方案:

1)以某种方式向 Zabbix 代理发送 HUP 信号(以便重新打开文件以供读取)

或者

2) 使用External scriptZabbix 中的功能并创建一个解析文件的 shell 脚本。

相关内容