使用zabbix LLD来对不确定目录下的日志监控

自动发现(LLD)

自动发现(LLD)提供了一种在计算机上为不同实体自动创建监控项,触发器和图形的方法。例如,Zabbix可以在你的机器上自动开始监控文件系统或网络接口,而无需为每个文件系统或网络接口手动创建监控项。并且可以配置定期执行自动发现,以此来移除一些不需要的监控项。

在Zabbix中,支持六种类型的发现项目:

  • 系统文件的发现;
  • 网络接口的发现;
  • CPU和CPU内核的发现
  • SNMP OID的发现
  • 使用ODBC SQL查询的发现
  • Windows服务的发现

创建发现规则

使用 system.run[] 执行一个脚本输出目录列表

1
system.run["cat /opt/log_dir_list.conf"]

其中 /opt/log_dir_list.conf 文件内容每行是一个需要监控的目录路径:

1
2
3
4
5
6
7
/opt/1panel/apps/qinglong/qinglong/data/log/6dylan6_jdpro_jd_dailysign_81
/opt/1panel/apps/qinglong/qinglong/data/log/6dylan6_jdpro_jd_hssign_80
/opt/1panel/apps/qinglong/qinglong/data/log/6dylan6_jdpro_jd_taskop_32
/opt/1panel/apps/qinglong/qinglong/data/log/6dylan6_jdpro_jd_vu50_88
/opt/1panel/apps/qinglong/qinglong/data/log/6dylan6_jdpro
...

预处理

使用javascript预处理步骤将文件list转换成LLD格式

1
2
3
4
5
6
7
8
9
10
11
12
var lld = [];
var lines = value.split("\n");
for (var i = 0; i < lines.length; i++) {
// 去除行首尾可能存在的空格或换行符
var line = lines[i].trim();
if (line !== "") {
var row = {};
row["{#DIRPATH}"] = line; // `{#DIRPATH}` 将成为宏变量名
lld.push(row);
}
}
return JSON.stringify(lld);

通过测试可以查看处理后的数据

也可以通过shell创建自定义监控来将目录转换为LLD模式,通过创建自定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/bin/bash

dir_list=$(find /opt/1panel/apps/qinglong/qinglong/data/log/ -maxdepth 1 -type d -name "6dylan6*"|xargs)
echo $dir_list
length=${#dir_list[@]}

printf "{\n"
printf "\t\"data\":[\n"

index=0
for i in ${dir_list[@]}
do
index=$[ $index + 1 ]
if [ ${index} -eq ${length} ]
then
printf "\t\t{\"{#DIRPATH}\":\"${i}\"}\n"
else
printf "\t\t{\"{#DIRPATH}\":\"${i}\"},\n"
fi
done
printf "\t]\n"
printf "}\n"

zabbix_agentd.conf中创建自定义监控

1
UserParameter=dir_list,/etc/zabbix/dir_discovery.sh

在自动发现规则中添加相应的键值来获取文件信息。

创建监控项原型

监控项原型对自动发现的目录进行监控

通过logrt对自动发现下的目录日志文件进行特定关键字的监控

1
logrt["{#DIRPATH}/[0-9]{4}-[0-9]{2}-[0-9]{2}.*log","已失效|用户未登陆|获取TOKEN失败|JD_COOIKE|Response code 401",UTF-8,,skip]

创建触发器原型

添加nodata(2m)以用于自动恢复,当日志在输出特定信息告警后,两分钟日志无刷新日志将触发告警

1
{100.112.176.58:logrt["{#DIRPATH}/[0-9]{4}-[0-9]{2}-[0-9]{2}.*log","已失效|用户未登陆|获取TOKEN失败|JD_COOIKE|Response code 401",UTF-8,,skip].strlen()}>0 and {100.112.176.58:logrt["{#DIRPATH}/[0-9]{4}-[0-9]{2}-[0-9]{2}.*log","已失效|用户未登陆|获取TOKEN失败|JD_COOIKE|Response code 401",UTF-8,,skip].nodata(2m)}=0

监控项原型和触发器原型根据自动发现规则发现的目录进行监控