![Zabbix 不会使用 log[] 或 vfs.file.regexp[] 项目更新文件中的值](https://linux22.com/image/633205/Zabbix%20%E4%B8%8D%E4%BC%9A%E4%BD%BF%E7%94%A8%20log%5B%5D%20%E6%88%96%20vfs.file.regexp%5B%5D%20%E9%A1%B9%E7%9B%AE%E6%9B%B4%E6%96%B0%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%E5%80%BC.png)
我正在使用 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 script
Zabbix 中的功能并创建一个解析文件的 shell 脚本。