Python中想写一个日志分析工具,有没有好的轮子推荐?

主要内容就是,分析应用重启阶段的日志,判断是否有异常之类的。

要正则匹配关键字处理么? 看了几个都是这样简单的处理的。

大家有什么好想法么, 或者有什么现成的轮子用。


Python中想写一个日志分析工具,有没有好的轮子推荐?
16 回复

多大的日志,试试 logstash


对于日志分析,Python生态里确实有几个很成熟的轮子。

如果只是基础分析,用内置的re模块做正则匹配就够用了。比如提取特定错误信息:

import re

log_content = "2023-10-01 ERROR: Database connection failed"
pattern = r'ERROR: (.+)'
match = re.search(pattern, log_content)
if match:
    print(f"Found error: {match.group(1)}")

需要更复杂的解析时,logparser库能处理各种日志格式:

# 需要先安装:pip install logparser
from logparser import Drain

log_format = '<Date> <Time> <Level> <Component>: <Content>'
parser = Drain.LogParser(log_format, indir='./logs/', outdir='./result/')
parser.parse('your_log_file.log')

要是做实时监控,logging模块配合watchdog可以监听文件变化:

import logging
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler

class LogHandler(FileSystemEventHandler):
    def on_modified(self, event):
        if event.src_path.endswith('.log'):
            with open(event.src_path) as f:
                new_lines = f.readlines()[-10:]  # 读取最后10行
                for line in new_lines:
                    if 'ERROR' in line:
                        logging.error(f"Found error: {line}")

observer = Observer()
observer.schedule(LogHandler(), path='./logs/', recursive=False)
observer.start()

对于大规模日志分析,pandas是必备的:

import pandas as pd

df = pd.read_csv('app.log', sep=' ', names=['timestamp', 'level', 'message'])
error_df = df[df['level'] == 'ERROR']
print(f"Total errors: {len(error_df)}")

简单来说,根据你的需求选合适的工具就行。

一般都是几 M 到几十 M 应用的重启日志,spring bot,weblogic,tomcat,等中间件的日志

我先看下 谢谢

ELK 或者用 EL + Grafana

感觉有些庞大了,现在的工具是远程执行重启命令,打印出来的内容会保存在本地,然后分析这份重启日志判断应用是否正常启动。有没有轻量级的推荐,主要想要的就是,给一个 log 文件,分析是否有报错,谢谢

filebeat+es+kibana logstash 实在是太重了

只是需要分析报错的话,要不试试 sentry ?

轻量的 graylog 了解一下,elk 实在太笨重,数据量不大没必要

senty,elk 都挺好的

就这么简单的事情还要轮子。

直接用 python 撸个脚本就可以了,直接 os.popen(‘grep -E “regex” filename’) 或者 os.popen(‘zgrep -e “regex” filename.gz’)

其实这样弄比直接用 python 处理要快得多,grep/zgrep 是 C 写的还支持文件通配。

推荐 open falcon,ELK

我自己是准备这样搞得,就想看看有没有好轮子用

Get-Item ‘你的日志文件’ | Select-String ‘你的正则表达式’ | Out-GridView

回到顶部