温馨提示×

怎样用脚本分析日志

小樊
34
2026-09-25 14:00:54
栏目: 编程语言

用脚本分析日志,核心思路一般是:读取日志 → 过滤/解析 → 统计或提取关键信息 → 输出结果。下面按常见场景给你一个实用指南,涵盖 Shell、Python 和 awk 三种最常用方式。


一、先明确你要分析什么

常见日志分析目标:

  • 统计访问量(PV/UV)
  • 查找错误(ERROR / 500 / Exception)
  • 按时间分布统计
  • 提取特定字段(IP、URL、耗时)
  • 实时监控日志变化

二、Shell 脚本(最常用、最快)

1. 统计 ERROR 出现次数

grep -c "ERROR" app.log

2. 统计每个 IP 的访问次数(Nginx 日志)

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

3. 统计某时间段错误日志

grep "2024-01-21 10:" app.log | grep "ERROR"

4. 简单日志分析脚本示例

#!/bin/bash
LOG=$1

echo "总日志行数:"
wc -l < $LOG

echo "错误数量:"
grep -c "ERROR" $LOG

echo "Top 5 IP:"
awk '{print $1}' $LOG | sort | uniq -c | sort -nr | head -5

三、awk(日志分析神器)

按小时统计访问量

awk '{print substr($4, 2, 14)}' access.log | uniq -c

统计响应时间 > 1s 的请求

awk '$10 > 1 {print $0}' access.log

四、Python 脚本(适合复杂分析)

示例:分析 Nginx 日志

from collections import Counter

ip_counter = Counter()

with open("access.log") as f:
    for line in f:
        ip = line.split()[0]
        ip_counter[ip] += 1

for ip, count in ip_counter.most_common(10):
    print(ip, count)

用正则解析日志

import re

pattern = re.compile(r'(\d+\.\d+\.\d+\.\d+).*?"(\w+) (.*?) HTTP')
with open("access.log") as f:
    for line in f:
        m = pattern.search(line)
        if m:
            ip, method, url = m.groups()

五、实时日志分析

tail -f app.log | grep "ERROR"

或 Python:

import time

with open("app.log") as f:
    f.seek(0, 2)
    while True:
        line = f.readline()
        if "ERROR" in line:
            print(line)
        time.sleep(0.1)

六、进阶建议

  • 日志量大 → 用 awk / grep 先过滤,再给 Python
  • 结构化日志(JSON)→ 直接用 jq 或 Python json
  • 长期分析 → 转存到 Elasticsearch / ClickHouse

如果你能发一段日志样例 + 想分析的目标,我可以直接帮你写一整段可用脚本。

0 踩