跳到主内容

本地日志统计小工具 - 免费选个日志文件,10 秒看清状态码分布与最慢接口(其它工具)

免费下载本地日志统计小工具 v1.0.0
平台:Windows 10/11 (64位),单文件 exe,双击即用大小:10.7 MB版本:v1.0.0更新:2026-10-09
提取码:eb46(如提示需要,请输入)
下载地址 ▾
解压后双击即可运行,无需安装任何运行环境,不联网、不上传数据。
服务日志几百万行,只想看状态码分布和最慢的接口,用命令行拼管道太费劲

本地日志统计小工具 运行界面

软件名称本地日志统计小工具
版本v1.0.0
授权免费(可自由使用与转发)
运行方式本地运行,不上传数据
所属分类其它工具

这个工具解决什么问题

线上接口被用户投诉「有时候特别慢」,你手上只有一份几百 MB 的 Nginx 访问日志。想知道到底哪个接口慢、慢到什么程度,第一反应是敲 awk 拼管道:先把状态码捞出来 sort | uniq -c,再按接口分组算平均耗时——这一步就得写脚本了,还得处理 URL 上那些带 id 的查询串,不然每个 id 都会被算成一个「不同接口」,Top 榜直接被淹没。等你终于把脚本调通,天已经亮了,而隔壁同事问的「5xx 集中在哪个时段」又是另一个脚本。一份日志反复折腾一晚上,结论还没成型。

  • 原来的做法:grep / awk / sort / uniq 手拼管道,每换一个问题就要重写一次命令;按接口分组统计必须自己写脚本;URL 带参数时分组会碎成几千个「接口」;结果还要再粘进 Excel 才能给别人看。
  • 用这个工具:打开工具 → 选日志文件 → 点「开始分析」。五个标签页分别给出:总体概览、状态码分布(带中文含义)、最慢接口 Top 榜(已按平均耗时排序、标出错误数)、调用最多的接口、24 小时时段分布与来源 IP。URL 查询串自动去掉,同一个接口不会被拆成几千条。
  • 省下来的:把「写脚本 + 调脚本 + 反复换问题」压缩成「点一次按钮」。原来半小时起步、还得会写脚本的活,现在 10 秒出结论。

技术实现

整体是「内核 + 界面」两层。内核 log_core.py 只做纯计算:流式解析日志、累加统计、渲染文本/CSV,完全不依赖 tkinter,可以脱离界面单独调用和测试。界面 log_watch.py 只负责画控件和把结果贴到屏幕上。分层的原因是 tkinter 的单线程限制——分析几百万行会卡死界面,所以内核跑在后台线程,用 queue 把进度消息送回主线程刷新进度条。

  • 流式逐行读取,内存不随日志增长:用 for line in fh 迭代而不是 readlines()。几个 GB 的日志若一次性读进内存会直接吃满,逐行迭代时内存占用只跟单行长度有关。实测 6.9 MB / 8 万行日志耗时 3.1 秒(约 2.5 万行/秒),内存平稳。读取时带 errors='replace',日志里混进非法字节(比如被截断的 GBK 中文)只会让那一行变成替换字符,不会抛异常把整个分析打断。
  • 四种日志格式自动识别,不用用户选:按 JSON → Nginx/Apache 组合格式 → 简化文本 → Key=Value 的顺序尝试,命中即用。JSON 特征最明确所以放第一位;组合格式的正则最严格放第二位;后两种约束松,用于兜底。字段名支持常见别名归一化:status / status_code / code / http_status 都认,url / uri / path / endpoint 都认,response_time / duration / elapsed / latency / cost 都认。这样用户换个日志库(比如把 go-http 换成 zerolog)字段名变了工具也不会废。
  • 路径归一:去掉 URL 查询串:统计前先 strip_query() 把 /api/user?id=3&page=2 归成 /api/user。不做这一步的话,每个带不同 id 的请求都会被算成「另一个接口」,Top 榜会被同一批 URL 的无数变体淹没,反而看不出哪个接口真的慢。这是日志统计里最容易踩、也最容易被忽略的坑。
  • 分位数与速度分桶:除了平均值,还给出 P50 / P95 / P99 三个分位数——平均耗时会被少数极慢请求拉偏,分位数才能反映大多数用户的真实体感。速度分桶(<100ms / 100-300ms / 300ms-1s / 1-3s / >3s)用左闭右开区间,唯独「>3s」这一桶含 3 秒,让正好卡在边界上的请求落进「1-3s」而不被误判成慢请求。分位数最多保留 20000 个样本、超出按步长抽样,保持内存恒定。
  • 最慢榜的统计门槛:只被调用过一两次的接口不参与「最慢接口」排名(默认要求至少 3 次,可在界面上调)。原因是:出现 1 次、恰好碰上一次超时的接口,平均耗时就是那次超时的值,会毫无意义地霸占榜首,把真正的问题接口挤下去。界面上这个阈值是可改的,调小就能看到长尾。
  • 时区折算用内置偏移表兜底:服务器日志常是 UTC,而运维脑子里的「几点」是本地时间,看时段分布会差好几个小时。这里提供时区折算,并特意做了兜底:Windows 上的 Python 默认不带 tzdata,直接用 ZoneInfo('Asia/Shanghai') 会抛 ZoneInfoNotFoundError。工具内置了一张固定偏移表覆盖常用时区,有 tzdata 时优先用 zoneinfo(能处理夏令时),没有时退回固定偏移,保证零依赖、离线可用、永不报错。

技术栈:Python 3.8+、tkinter 图形界面、流式逐行分析、零依赖免安装

已知局限:只处理单文件,不支持多文件合并统计;不做日志的实时追尾监控;不做关键字检索(那用 grep 更合适);日志格式只覆盖主流的四类,私有格式需要改代码加分支。分位数在大日志下是抽样计算的,会有极小误差。

操作教程

  1. 选择日志文件
    双击打开程序,点「选择日志文件…」,在文件对话框里挑一个 .log / .txt / .json / .gz 文件。也可以把日志文件直接拖到程序图标上,程序会自动载入并开始分析。
    预期结果:顶部显示所选文件的完整路径与文件大小。
  2. 确认统计选项
    「时区」默认「本地」;服务器日志是 UTC 的话选 Asia/Shanghai,时段分布会折算成北京时间。「榜单条数」默认 10 条。
    预期结果:不调整也能直接跑,默认值对大多数场景够用。
  3. 开始分析
    点「开始分析」。分析在后台进行,界面不会卡死,底部进度条按已读字节推进。
    预期结果:状态栏实时显示「已读取 xx 行(xx MB / xx MB)」。中途想停就点「中止」,已读部分的结果仍会展示。
  4. 看「概览」标签页
    分析完成后自动停在概览页:总行数、解析成功/失败数、解析成功率、平均与分位响应时间、流量合计、速度分布柱状图。解析失败的行会列出最多 5 条样本,值不值得关注一眼就知道。
    预期结果:拿到全局体感:日志干不干净、整体快不快。
  5. 看「状态码分布」标签页
    每个状态码的次数与占比,并附中文含义(比如 502 = 网关错误,后端没起来),下方按 2xx/3xx/4xx/5xx 汇总。
    预期结果:判断 5xx 占比是否异常、有没有被限流(429)或大面积 404。
  6. 看「最慢接口」标签页
    按平均响应时间排序的 Top 榜,同时列出最大耗时、调用次数、错误数。有错误的接口会标「← 有错误」。
    预期结果:定位到具体哪个接口慢,以及它是不是同时也在报错(慢 + 错的接口优先排查)。
  7. 导出报告
    点「导出文本报告」得到一份排版好的纯文本报告;点「导出 CSV」得到 Excel 可直接打开的结果表(已带 UTF-8 BOM,中文不会乱码)。
    预期结果:弹出「导出成功」并显示保存路径,文件可以直接发给同事或贴进工单。

常见问题

Q:我的日志格式和上面说的都不一样,能用吗?A:先试一下。工具会自动尝试四种格式,只要日志里有「请求路径 + 状态码」这两个要素,或者有 key=value 形式的结构化字段,基本都能认出来。完全不认的行不会让程序出错,它们会被计入「解析失败」并列出样本,方便你判断。如果确实不支持,可以把日志样本发给站长,加一个格式分支即可。
Q:为什么「最慢接口」榜单是空的?A:因为没有一个接口达到「最少调用次数」(默认 3 次)。这是刻意设计——只调过一两次的接口平均耗时没有参考价值,一次超时就能霸榜。把选项里的「最慢榜最少调用次数」调小(比如改成 1),就能看到长尾接口了。
Q:几百 MB 的日志会不会卡死或者爆内存?A:不会。工具是流式逐行读取的,内存占用不随日志大小增长,分析跑在后台线程里,界面也不会假死。实测 8 万行 / 6.9 MB 耗时 3 秒左右。如果中途不想等了,点「中止」即可,已读部分的结果照样展示。
Q:日志是 .gz 压缩包,要先解压吗?A:不用。直接选 .gz 文件即可,工具会边解压边流式分析,不会先解出一个大文件占硬盘。.bz2 同理。
Q:导出的 CSV 用 Excel 打开中文变成乱码怎么办?A:正常情况不会——导出的 CSV 带 UTF-8 BOM 头,Excel 会正确识别编码。如果你用的是很老的 Excel 版本仍显示乱码,用「数据 → 从文本/CSV 导入」并手动选 UTF-8 即可。
Q:时段分布看起来不对,和我印象里的高峰不一样?A:优先检查时区选项。服务器日志通常记的是 UTC,而你想看的是本地时间,两者差 8 小时。把时区改成 Asia/Shanghai 再看一次就会对上。
Q:会把我服务器的日志传到网上吗?A:不会。工具全程在本地运行,不联网、不上传任何数据,也不修改你的日志源文件。可以用防火墙或抓包自行验证。
Q:支持统计多个日志文件吗?A:目前一次一个文件。如果要把一周的日志合起来看,可以先把若干份纯文本日志首尾拼成一个文件再分析(纯文本日志直接首尾相接即可,不需要额外工具)。多文件批量分析是后续的扩展方向。
Q:我想统计的接口数据在数据库里,不在日志文件里A:那是另一个场景。这个工具专注「把日志文件变统计表」。如果你需要把数据库数据也做成同样的分析视图,可以通过站点联系,按需定制一个数据源适配版本。

技术实现与后续维护

工具分为内核与界面两层:log_core.py 负责全部计算,log_watch.py 负责界面。任何统计口径的改动都在内核里,改完跑一遍 tests/selftest.py 即可回归——自测里的期望值是手算写死的,能真实反映口径变化。运行环境要求很低:Windows 10/11 64 位,不需要装 Python,不需要联网。后续可扩展方向包括多文件批量分析、自定义正则解析、告警阈值、实时追尾模式等,详见开发文档第六节。需要在此基础上做定制(比如适配私有日志格式、对接内网监控系统),可以联系站长进行二次开发。

技术构成:

  • src/log_core.py —— 分析内核:四种格式解析、统计累加、分位数与分桶、文本与 CSV 渲染。不依赖 tkinter,可脱离界面独立调用。
  • src/log_watch.py —— tkinter 图形界面:文件选择、选项控件、后台线程调度、进度刷新、五个结果标签页、导出对话框。
  • tests/selftest.py —— 自测脚本,183 项断言,分 12 组覆盖解析 / 统计 / 流式 / 导出 / 静态检查。
  • DOCS/开发文档.md —— 开发文档:设计取舍、技术要点、两个已知坑的成因与处置、扩展方向、维护约定。

运行环境:

环境:Python 3.8+(需带 tkinter)。打包命令:pyinstaller --onefile --noconsole --name 本地日志统计小工具 src/log_watch.py。必须带 --noconsole,否则会带黑色控制台窗口;必须用带 tkinter 的 Python,某些精简发行版不带 tkinter 也能编译通过,但打出的 exe 一运行就报 No module named tkinter。

可扩展方向:

  • 多文件 / 整目录批量分析:界面加目录选择,循环调用 analyze_file 后合并多个 Stats
  • 自定义正则解析:给用户一个输入框写自己的正则与命名分组,覆盖内置四类之外的私有日志格式
  • 慢接口告警阈值:平均耗时超过设定值就在界面上高亮或弹提示
  • 实时追尾模式:定时重跑并只统计文件新增的字节,做成滚动监控
  • 结果表格可点表头排序(把 Text 换成 Treeview)
  • 导出 HTML 报告,内嵌柱状图,方便直接发出去

本工具免费提供使用,但不对外分发源码。如果你需要在本工具基础上做功能调整、对接内部系统或长期维护,可以联系我们做二次开发,源码与工程文档可在定制合作中一并交付。

需要其它功能?可以定制

这个工具只做一件事:服务日志几百万行,只想看状态码分布和最慢的接口,用命令行拼管道太费劲。如果你的场景还需要别的处理,可以联系我们做二次开发,按你的实际数据格式和流程定制。

常见的定制需求:

  • 适配你们公司自己的私有日志格式(加一个解析分支)
  • 把分析结果直接写进你们的监控系统或数据库
  • 换成从多个日志文件 / 多个服务器汇总统计
  • 按业务维度(比如租户 ID、订单号)分组做 Top 榜
  • 加上「慢接口连续出现就告警」的阈值判断
  • 联系方式:https://www.biyeyuanma.cn
  • 定制说明:请附上你的数据样例(脱敏即可)和期望结果,方便快速评估工作量
  • 交付形式:定制项目可交付可执行程序,按需一并交付源码与工程文档,支持长期维护

使用说明与免责声明

  • 本工具在本地运行,不联网、不上传任何数据到服务器。
  • 涉及文件改写的功能,请在使用前备份原始文件。
  • 软件完全免费,可自由使用与转发,请勿用于倒卖。
  • 因误操作造成的数据问题请自行承担。
免费下载本地日志统计小工具 v1.0.0
平台:Windows 10/11 (64位),单文件 exe,双击即用大小:10.7 MB版本:v1.0.0更新:2026-10-09
提取码:eb46(如提示需要,请输入)
下载地址 ▾
解压后双击即可运行,无需安装任何运行环境,不联网、不上传数据。
分享到:

本文链接:https://www.biyeyuanma.cn/post/300.html

服务热线

加我微信

加我微信