zabbix自动发现监控日志异常字段

公司服务器出现java应用内存溢出的情况,导致应用异常;之前监控做的不完善,现在通过读取每个工程的日志来检测异常字段进行内存溢出报警;

zabbix监控日志的原理

zabbix自动发现监控日志异常字段_第1张图片

通过使用log函数来操作

log文件的item解释

log[file,,,,,,]

file - 日志文件的全路径。 
regexp - 过滤日志的正则表达式。 
encoding - 字符编码,默认为英文单字节SBCS(Single-Byte Character Set)。 
maxlines - agent每秒发送给server(或proxy)的数据的最大行数,这个参数会覆盖掉zabbix_agentd.conf配置文件里的’MaxLinesPerSecond’参数。 
mode - 可填参数:all(默认),skip(跳过旧数据)。 
output - 自定义格式化输出,默认输出regexp匹配的整行数据;转义字符’\0’表示regexp,只输出regexp匹配的字段。 
maxdelay-The ‘maxdelay’ parameter in log items allows ignoring some older lines from log files in order to get the most recent lines analyzed within the ‘maxdelay’ seconds.(这一句我翻译不准,所以上上英文~)
备注:我推荐大家使用第二个参数,如果只使用第一个参数,将会导致日志文件里的内容统统丢给zabbix_server记录。加上第二个参数时,过滤后的日志内容才会传给zabbix server,大大减少了日志内容占用的空间。

1、先写脚本获取每个工程的日志文件的绝对路径

cat log_collect.py

#!/usr/bin/python3
# -*- coding: utf-8 -*-

'''此脚本文件用于获取需要监控的日志文件的绝对路径'''
import os, json

filenamelist = []
def collect_log(path):
    direc_list = os.listdir(path)

    for direc in direc_list:
        filepath = os.path.join(path, direc)
        if os.path.isdir(filepath):
            file = filepath + '/logs/' + direc + '.info.log'
            filenamelist.append((file,direc))

if __name__ == '__main__':

    filelog = collect_log('/opt/app')
    a = {"data": []}
    for filename in filenamelist:
        b = {}
        b["{#FILELOG}"] = filename[0]
        b["{#FILENAME}"] = filename[1]
        a["data"].append(b)
    print(json.dumps(a))

执行脚本打印出来的是json格式的字符串,如下示例:

{"data": [{"{#FILELOG}": "/opt/app/chanpy-web-user/logs/chanpy-web-user.info.log", "{#FILENAME}": "chanpy-web-user"}]}

这个是zabbix要求的固定格式;{#GILELOG}这个是日志文件的绝对路径,{#FILENAME}这个是工程名;为了便于在zabbix界面中配置自动发现规则时用到它们,zabbix界面中将这两个变量定义为$1,$2;但是在监控原型和触发器中只能使用{#FILELOG}和{#FILENAME}这两个变量,不能使用$1和$2;

2、配置zabbix agent

cat /etc/zabbix/zabbix_agentd.conf

UserParameter=filelog,/usr/bin/python /etc/zabbix/scripts/log_collect.py # filelog是自定义的发现规则的键值

3、zabbix界面中配置

创建一个模版 :QK_Log_Collect
在这个模版里创建一个应用集:Log
创建自动发现规则

自动发现规则的名称不能使用{#FILENAME}和{#FILELOG},只能使用$1和$2;
zabbix自动发现监控日志异常字段_第2张图片

监控项原型和触发器的名称不能使用$1和$2,只能使用{#FILELOG}和{#FILENAME}
zabbix自动发现监控日志异常字段_第3张图片

zabbix自动发现监控日志异常字段_第4张图片

4、结果显示

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

zabbix自动发现监控日志异常字段_第5张图片

当出现异常字段将告警

你可能感兴趣的:(日常运维)