Get the FREE Ultimate OpenClaw Setup Guide →
npx machina-cli add skill chaterm/terminal-skills/log-analysis --openclaw
Files (1)
SKILL.md
5.7 KB

日志分析与处理

概述

日志聚合、分析工具、告警配置等技能。

日志查看

基础命令

# 实时查看
tail -f /var/log/syslog
tail -f /var/log/nginx/access.log

# 多文件同时查看
tail -f /var/log/nginx/*.log
multitail /var/log/nginx/access.log /var/log/nginx/error.log

# 查看最后N行
tail -n 100 /var/log/syslog

# 查看开头
head -n 100 /var/log/syslog

# 分页查看
less /var/log/syslog
less +F /var/log/syslog             # 类似 tail -f

按时间过滤

# 使用 sed 按时间范围
sed -n '/2024-01-15 10:00/,/2024-01-15 11:00/p' /var/log/app.log

# 使用 awk
awk '/2024-01-15 10:/ && /2024-01-15 11:/' /var/log/app.log

# 使用 journalctl
journalctl --since "2024-01-15 10:00" --until "2024-01-15 11:00"
journalctl --since "1 hour ago"
journalctl --since today

文本搜索

grep

# 基础搜索
grep "error" /var/log/syslog
grep -i "error" /var/log/syslog     # 忽略大小写
grep -r "error" /var/log/           # 递归搜索

# 正则表达式
grep -E "error|warning" /var/log/syslog
grep -P "\d{4}-\d{2}-\d{2}" /var/log/syslog  # Perl 正则

# 上下文
grep -A 3 "error" /var/log/syslog   # 后3行
grep -B 3 "error" /var/log/syslog   # 前3行
grep -C 3 "error" /var/log/syslog   # 前后3行

# 统计
grep -c "error" /var/log/syslog     # 计数
grep -l "error" /var/log/*.log      # 只显示文件名

# 排除
grep -v "debug" /var/log/syslog     # 排除包含 debug 的行

ripgrep (rg)

# 更快的搜索
rg "error" /var/log/
rg -i "error" /var/log/             # 忽略大小写
rg -C 3 "error" /var/log/           # 上下文
rg --type log "error"               # 按文件类型

文本处理

awk

# 打印特定列
awk '{print $1, $4}' /var/log/nginx/access.log

# 条件过滤
awk '$9 == 500' /var/log/nginx/access.log
awk '$9 >= 400 && $9 < 500' /var/log/nginx/access.log

# 统计
awk '{sum += $10} END {print sum}' /var/log/nginx/access.log
awk '{count[$9]++} END {for (c in count) print c, count[c]}' /var/log/nginx/access.log

# 自定义分隔符
awk -F: '{print $1}' /etc/passwd
awk -F'[ :]' '{print $1, $2}' /var/log/syslog

sed

# 替换
sed 's/old/new/g' file.log
sed -i 's/old/new/g' file.log       # 原地修改

# 删除行
sed '/pattern/d' file.log
sed '1,10d' file.log                # 删除前10行

# 提取行
sed -n '10,20p' file.log            # 打印10-20行
sed -n '/start/,/end/p' file.log    # 打印匹配范围

sort & uniq

# 排序
sort file.log
sort -r file.log                    # 逆序
sort -n file.log                    # 数字排序
sort -k2 file.log                   # 按第2列排序

# 去重统计
sort file.log | uniq
sort file.log | uniq -c             # 计数
sort file.log | uniq -c | sort -rn  # 按频率排序

Nginx 日志分析

常用分析

# 访问量统计
wc -l /var/log/nginx/access.log

# IP 访问排行
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -20

# 状态码统计
awk '{print $9}' access.log | sort | uniq -c | sort -rn

# URL 访问排行
awk '{print $7}' access.log | sort | uniq -c | sort -rn | head -20

# 每小时访问量
awk '{print substr($4,14,2)}' access.log | sort | uniq -c

# 慢请求(响应时间 > 1s)
awk '$NF > 1' access.log | head -20

# 404 错误
awk '$9 == 404 {print $7}' access.log | sort | uniq -c | sort -rn

# 带宽统计
awk '{sum += $10} END {print sum/1024/1024 " MB"}' access.log

GoAccess 实时分析

# 安装
apt install goaccess

# 实时分析
goaccess /var/log/nginx/access.log -c

# 生成 HTML 报告
goaccess /var/log/nginx/access.log -o report.html --log-format=COMBINED

# 实时 HTML
goaccess /var/log/nginx/access.log -o /var/www/html/report.html --real-time-html

日志轮转

logrotate 配置

# /etc/logrotate.d/myapp
/var/log/myapp/*.log {
    daily                           # 每天轮转
    rotate 7                        # 保留7个
    compress                        # 压缩
    delaycompress                   # 延迟压缩
    missingok                       # 文件不存在不报错
    notifempty                      # 空文件不轮转
    create 0640 www-data www-data   # 创建新文件
    sharedscripts
    postrotate
        systemctl reload nginx > /dev/null 2>&1 || true
    endscript
}

手动轮转

# 测试配置
logrotate -d /etc/logrotate.d/myapp

# 强制轮转
logrotate -f /etc/logrotate.d/myapp

常见场景

场景 1:错误日志分析

# 统计错误类型
grep -E "ERROR|WARN|FATAL" /var/log/app.log | \
    awk '{print $3}' | sort | uniq -c | sort -rn

# 最近1小时的错误
awk -v date="$(date -d '1 hour ago' '+%Y-%m-%d %H')" \
    '$0 ~ date && /ERROR/' /var/log/app.log

场景 2:性能分析

# 响应时间分布
awk '{print int($NF)}' access.log | sort -n | uniq -c | \
    awk '{printf "%ds: %d\n", $2, $1}'

# 慢请求 Top 10
awk '{print $NF, $7}' access.log | sort -rn | head -10

场景 3:安全分析

# 失败登录尝试
grep "Failed password" /var/log/auth.log | \
    awk '{print $(NF-3)}' | sort | uniq -c | sort -rn

# 可疑 IP
awk '$9 ~ /4[0-9][0-9]/ {print $1}' access.log | \
    sort | uniq -c | sort -rn | head -20

故障排查

问题排查方法
日志太大配置 logrotate、按时间过滤
搜索慢使用 ripgrep、建立索引
格式不统一使用 awk 自定义解析
实时监控tail -f、GoAccess
历史分析ELK Stack、Loki

Source

git clone https://github.com/chaterm/terminal-skills/blob/main/server/log-analysis/SKILL.mdView on GitHub

Overview

log-analysis 提供从基础查看到深入分析的完整能力。你可以实时监控日志、按时间范围提取事件、统计错误与性能指标,并通过日志轮转与告警配置维持稳定的观测能力。它结合了常用工具(tail、rg/grep、awk、sed、journalctl、GoAccess)以及对 Nginx 日志的分析范式,适用于服务器端的监控与运营场景。

How This Skill Works

你以管道式的命令链对日志源进行操作:使用 tail -f 或 multitail 实时查看日志,利用 rg/grep 进行高效文本筛选,用 awk 提取字段并进行统计,借助 sed 进行必要的替换或提取,借助 sort/uniq 汇总结果,若需要时间范围过滤则用 journalctl 或按时间戳在日志文件中筛选。对于 Nginx 日志,你可以直接从访问日志中统计 IP、状态码、URL、带宽等指标,并可借助 GoAccess 生成实时或离线报表;日志轮转通过 logrotate 保持长期稳定的观测。

When to Use It

  • 实时监控和快速告警的场景(tail -f、multitail 的使用)
  • 需要历史日志的时间范围分析(--since/--until、历史区间筛选)
  • 错误与异常的类型统计与定位(error/warn/fatal、404 等)
  • Nginx/应用层性能分析(访问量、慢请求、带宽、IP 排行等)
  • 安全分析与登录尝试监控(失败登录、可疑 IP)

Quick Start

  1. 1) 选定日志源,例如 /var/log/nginx/access.log 或 /var/log/syslog。
  2. 2) 启动实时监控,先看基本输出:tail -f /var/log/nginx/access.log。
  3. 3) 进行快速定位:rg -i "error|timeout|slow" /var/log/nginx/access.log。
  4. 4) 做简单统计:awk '{print $9}' access.log | sort | uniq -c | sort -rn。

Best Practices

  • 统一并规范日志格式(尽量使用固定字段、固定分隔符与时间格式)以便用 awk/sed 提取字段
  • 在大日志上优先使用 ripgrep(rg) 代替 grep,以提升搜索速度
  • 将复杂分析拆分为小的阶段:查看、筛选、提取字段、聚合,最后输出报告
  • 对历史数据使用时间筛选(journalctl --since/--until 或按时间戳范围过滤)以避免全量扫描
  • 对产出结果使用简单的导出格式(CSV/TSV)以便后续集成监控或告警系统

Example Use Cases

  • 示例 1:统计最近1小时的错误事件并按类型排序:awk '$0 >= "2024-01-15 10:00:00" && $0 <= "2024-01-15 11:00:00" {print}' /var/log/app.log | rg -i "error|warn|fatal" | sort | uniq -c | sort -rn

Frequently Asked Questions

Add this skill to your agents

Related Skills

Sponsor this space

Reach thousands of developers