温馨提示×

怎样用脚本处理日志

小樊
52
2026-10-21 19:51:22
栏目: 编程语言

用脚本处理日志是非常常见的运维/开发任务。下面我从思路 → 常用工具 → 示例脚本(Shell / Python) → 实用技巧几个层面给你讲清楚。


一、先明确你要“处理”什么

日志处理通常包括:

  • 过滤(只看 ERROR / 某用户 / 某接口)
  • 统计(访问次数、错误数、耗时分布)
  • 提取字段(IP、时间、URL、状态码)
  • 格式化 / 清洗
  • 告警 / 入库

先想清楚目标,再选工具。


二、最常用工具对比

场景 推荐
简单文本过滤 grep / awk / sed
复杂逻辑 Python
超大日志 awk + 流式处理
实时日志 tail -f + 脚本
结构化日志 jq(JSON)

三、Shell 脚本处理日志(最常用)

1️⃣ 过滤 ERROR 日志

grep "ERROR" app.log

2️⃣ 统计每个 IP 的访问次数

awk '{print $1}' access.log | sort | uniq -c | sort -nr

3️⃣ 统计某天的 500 错误

grep "500" access.log | grep "2024-01-21" | wc -l

4️⃣ 提取 URL 和状态码

awk '{print $7, $9}' access.log

5️⃣ 实时监听并报警

tail -F app.log | grep --line-buffered "FATAL" | while read line
do
  echo "$line" | mail -s "FATAL Log" admin@xxx.com
done

四、Python 处理日志(更适合复杂逻辑)

示例:统计 ERROR 数量并输出

from collections import Counter

errors = Counter()

with open("app.log") as f:
    for line in f:
        if "ERROR" in line:
            errors[line.strip()] += 1

for msg, count in errors.most_common(10):
    print(count, msg)

示例:解析 JSON 日志

import json

with open("app.json.log") as f:
    for line in f:
        data = json.loads(line)
        if data["level"] == "ERROR":
            print(data["time"], data["msg"])

五、日志处理通用套路(很重要)

✅ 逐行读取(不要一次性读全文件)
✅ 正则提取字段

import re
pattern = re.compile(r'(\d+\.\d+\.\d+\.\d+) .* "(\w+) (.*?) "')

✅ 输出到新文件 / 数据库 ✅ 加时间窗口(按小时/天统计)


六、进阶建议

  • 日志太大 → 用 awk 或 grep 先筛再给 Python
  • 定期任务 → crontab
  • 生产环境 → 日志轮转(logrotate)
  • 可视化的 → ELK / Grafana

如果你愿意,可以:

  • 发一段真实日志样例
  • 告诉我你想统计什么 / 解决什么问题

我可以直接帮你写一版可用脚本。

0 踩