Zabbix 随笔:监控目录的文件信息

2022-02-16 18:42:23 浏览数 (1)

本文将分享 Zabbix 如何监控目录下的文件及文件详情~

正文

思路就是使用 javascript 预处理功能将文件 list 转换成 LLD 格式(json)。文件 list 可以通过用户参数(UserParameter)的方式获取到。

本文环境

  • CentOS 8.5.2109
  • Zabbix 6.0 beta2

模拟环境

模拟环境,仅供参考,不建议在文件数目过多的目录下监控,会生成很多的监控项

代码语言:javascript复制
mkdir /tmp/kasar
cd /tmp/kasar
touch 1.txt 
touch 2.txt

命令列出文件类别

代码语言:javascript复制
find /tmp/kasar/* -maxdepth 0 -type f

该条命令为列出该目录下的文件列表,maxdepth 0 最大深度为0,也就是当前目录,type 后的 f为文件。

创建 UserParameter 文件

格式为 UserParameter = 键值(key),命令(command)

代码语言:javascript复制
vim /etc/zabbix/zabbix_agent2.d/file.conf
UserParameter = file,find /tmp/kasar/* -maxdepth 0 -type f

测试该值效果

代码语言:javascript复制
zabbix_agent2 -t file

这个 file 为刚才的 UserParameter 里的 key ,回显正常即可

记得需要重启 Zabbix agent

代码语言:javascript复制
systemctl restart zabbix-agent2

创建自动发现规则(LLD)

进入主机选项,找到目标机器,点击自动发现,进入自动发现界面,点击创建自动发现规则。

下面的界面,关键点在于键值的填写,写 UserParameter 里的 key 值就好了。

接下来选择图中的进程(中文翻译别扭,实际为预处理),并在预定步骤点击添加,名称选择JavaScript,右边参数点击编辑图标,输入以下参数

代码语言:javascript复制
var lld = [];
var lines = value.split("n");
var lines_num = lines.length;
for (i = 0; i < lines_num; i  )
{
 var row = {};
 row["{#FILE}"] = lines[i]
 lld.push(row);
}
return JSON.stringify(lld);

创建监控原型

以检查文件的 MD5 值为例,键值选择 vfs.file.cksum[file,<mode>],需要注意的是这里的 file 一定要换成 {#FILE}。 另外需要在进程里需要添加一个 Discard unchanged with heartbeat,这个意思是在规定时间内丢掉相同值。

效果

添加触发器原型

还是进入到自动发现规则,点击触发器原型,点击创建触发器原型。由于 6.0 取消了 diff 函数,所以采用last的方式,#1 代表第一个,#2 代表第二个,组合起来的意思为第一个取值和 第二个取值不同就告警,最后启用可以关闭问题

代码语言:javascript复制
{HOST.NAME}:{#FILE}文件发生了修改,请注意!
代码语言:javascript复制
last(/Zabbix server/vfs.file.cksum[{#FILE},md5],#1)<>last(/Zabbix server/vfs.file.cksum[{#FILE},md5],#2)

修改数据查看效果

添加文件大小监控

单位为 B(byte缩写)

写在最后

本文环境只针对两个监控项展开讨论,实际还有更多的使用方式,希望大家可以举一反三

0 人点赞