本文将分享 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)
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缩写)
写在最后
本文环境只针对两个监控项展开讨论,实际还有更多的使用方式,希望大家可以举一反三