自动发现脚本

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# 此脚本文件用于获取需要监控的日志文件的绝对路径
import os
import json


def collect_log(path):
    logfiles = []
    direc_list = os.listdir(path)
    for direc in direc_list:
        filepath = os.path.join(path, direc)
        if os.path.isdir(filepath):
            file = filepath + '/error.log'
            logfiles.append((file, direc))
    return logfiles


def main():
    current_logfiles = collect_log('/data/logs/')
    a = {"data": []}
    for filename in current_logfiles:
        b = dict()
        b["{#FILELOG}"] = filename[0]
        b["{#FILENAME}"] = filename[1]
        a["data"].append(b)
    print(json.dumps(a))


if __name__ == '__main__':
    main()

该脚本用于获取每个服务器所需路径下的所有日志文件的绝对路径,脚本执行打印的示例如下:

$ ./log.py
{"data": [{"{#FILENAME}": "8123", "{#FILELOG}": "/data/logs/8123/error.log"}, {"{#FILENAME}": "8323", "{#FILELOG}": "/data/logs/8323/error.log"}, {"{#FILENAME}": "8423", "{#FILELOG}": "/data/logs/8423/error.log"}, {"{#FILENAME}": "8223", "{#FILELOG}": "/data/logs/8223/error.log"}]}

打印的格式是是 zabbix 要求的。其中 {#FILELOG} 这个是日志文件的绝对路径,{#FILENAME} 为该日志文件的名字

zabbix agent 配置

$ cat /usr/local/etc/zabbix_agentd/log.conf
UserParameter=log.discovery,/usr/local/scripts/log.py  # log.discovery 为 zabbix 页面中设置自定义发现规则的键值

zabbix web 页面配置

创建模板及自动发现规则

创建一个自动发现 log 的日志目录:Template Socket error log 模板里创建一个应用集:Log 创建自动发现规则 主动发现规则.png

配置自动发现的监控项

自动发现监控项.png

配置自动发现的触发器

自动发现触发器.png

应用自动发现的模板到主机上

将创建好的模版应用到主机上,可以看到会自动发现监控项: 自动发现模板应用到主机.png

参考链接:https://blog.csdn.net/qq_36357820/article/details/102895410