在 RHEL 6.4 上使用 Zabbix v2.4
目标
我想在多个系统中跟踪文件的校验和,这些系统中目录不变,但文件名略有不同。在我们的例子中,文件名包含软件的版本号,并且我们有多个不同版本的站点。(因此名称不同。)
问题与收获
我是否可以使用内置的正则表达式支持创建一个可以解释这些不同文件名的单个模板项?
- 无法修改文件名来删除版本号。
- 对代理配置没有太多的控制权,因此添加用户参数将需要付出相当大的努力。
文件名示例:
- 1234_文件.jar
- 1254_文件.jar
我尝试过的方法
Zabbix 具有内置正则表达式支持,但我找不到其在项目键中的良好使用示例。正则表达式页面说
在引用时可能导致误解的情况下(例如,项目键的参数中的逗号),整个引用可以放在引号中,如下所示
这意味着它们可以在键中使用,但可能不是我想要使用的方式。
我将自定义 RE 定义为“FileName”,并使用适当的逻辑表达式来匹配我的文件名(测试检查正常),我的密钥如下:
vfs.file.cksum[/path/to/file/@FileName]
但是当我查看代理日志时,它说“检查‘vfs.file.cksum[/path/to/file/@FileName]’不受支持”并且“没有这样的文件或目录”,所以看起来键并没有扩展/匹配,这意味着我可能误解了如何在键中使用自定义 RE(或者它们只在某些键类型中工作)。
答案1
根据物料文档,vfs.file.cksum[]
接受文件名作为第一个参数(与logrt[]
item 不同),因此正则表达式在那里不起作用。
一种可能的方法是使用用户宏并定义项目如下:
vfs.file.cksum[/path/to/file/12{$VERSION}4_file.jar]
{$VERSION}
然后为每个主机定义适当的宏。
或者,您可以使用低级发现来发现您想要的文件,但这需要编写 UserParameter,而您最好避免这种情况。同时,有一个关于内置文件发现的功能请求,网址为ZBXNEXT-712您可以投票。