
用 AI 做智能日志分析——自动从海量日志中提取错误根因服务器日志动辄几千行人工排查耗时费力。这篇文章教你做一个 AI 日志分析工具自动从日志中提取关键错误信息、分析根因、给出修复建议。项目结构logai/ ├── logai.py # CLI 主程序 ├── analyzer.py # AI 日志分析 └── requirements.txt核心实现# analyzer.pyimportrefromcollectionsimportCounterfromopenaiimportOpenAIimportosfromdotenvimportload_dotenv load_dotenv()clientOpenAI(api_keyos.getenv(DEEPSEEK_API_KEY),base_urlhttps://api.deepseek.com/v1,)defextract_errors(log_content:str)-dict:从日志中提取错误信息。lineslog_content.split(\n)errors[]error_patterns[(r(ERROR|FATAL|CRITICAL|Exception|Traceback).*,错误),(r\d{3}\s(Internal Server Error|Bad Gateway|Service Unavailable),HTTP错误),(r(timeout|timed out|connection refused),超时/连接),(r(OutOfMemory|MemoryError|OOM),内存),(r(Permission denied|Access denied|Forbidden),权限),]forlineinlines:forpattern,categoryinerror_patterns:ifre.search(pattern,line,re.IGNORECASE):errors.append({line:line.strip()[:200],category:category})break# 统计错误类型categoriesCounter(e[category]foreinerrors)return{total_lines:len(lines),error_count:len(errors),categories:dict(categories),sample_errors:errors[:20],}defanalyze_root_cause(log_content:str,stats:dict)-str:AI 分析根因和建议。# 取日志的前 2000 字符 错误样本samplelog_content[:2000]errors\n.join(f[{e[category]}]{e[line][:150]}foreinstats[sample_errors][:10])promptf你是运维专家。分析以下日志找出根本原因和修复建议。 ## 统计信息 总行数{stats[total_lines]}错误数{stats[error_count]}错误分布{stats[categories]}## 日志样本{sample}## 错误详情{errors}请按以下格式输出 1. 根本原因一句话指出最可能的问题 2. 影响范围影响了哪些服务或功能 3. 修复建议具体可操作的修复步骤 4. 预防措施如何避免类似问题 respclient.chat.completions.create(modeldeepseek-chat,messages[{role:user,content:prompt}],temperature0.2,max_tokens1500,)returnresp.choices[0].message.content#!/usr/bin/env python3# logai.pyimportsysimportclickfrompathlibimportPathfromanalyzerimportextract_errors,analyze_root_causeclick.group()defcli():passcli.command()click.argument(filepath,typeclick.Path(existsTrue))click.option(--errors-only,-e,is_flagTrue,help只显示错误统计)defanalyze(filepath,errors_only):分析日志文件。withopen(filepath,r,encodingutf-8,errorsignore)asf:contentf.read()statsextract_errors(content)click.echo(f 日志分析{filepath})click.echo(f 总行数{stats[total_lines]})click.echo(f 错误数{stats[error_count]})click.echo(f 错误分布{stats[categories]})iferrors_only:returnclick.echo(\n AI 分析中...)resultanalyze_root_cause(content,stats)click.echo(f\n{result})if__name____main__:cli()使用方式# 分析日志python logai.py analyze /var/log/app.log# 日志分析/var/log/app.log# 总行数8342# 错误数47# 错误分布{错误: 23, 超时/连接: 12, 内存: 8, 权限: 4}## 1. 根本原因数据库连接池耗尽导致请求超时# 2. 影响范围API 服务的用户认证和订单查询接口# 3. 修复建议增加连接池大小到 20添加连接超时回收机制# 只看统计python logai.py analyze /var/log/app.log --errors-only成本分析一次约 1000-3000 token费用不到 1 分钱。用 AI 分析比手工排查快 20 倍。扩展# 支持标准输入方便管道使用cli.command()click.argument(filepath,requiredFalse)deftail(filepath):分析最新的 500 行日志。iffilepath:linesPath(filepath).read_text().split(\n)[-500:]else:linessys.stdin.read().split(\n)[-500:]# ... 同上分析逻辑tail-n500/var/log/app.log|python logai.pytail总结AI 日志分析工具核心三步正则提取错误信息和分类统计把统计 样本喂给 AIAI 输出根因分析 修复建议比人工排查快 20 倍比 grep 看日志准得多。本文由 Zyentor智元界原创发布本文发布于 Zyentor智元界 —— AI 开发者社区原文链接https://www.zyentor.com/news/4246