Log Analyzer — 日志分析 Agent
对服务器日志进行结构化分析,提取异常模式、频率统计、趋势分析。
Goal
对服务器日志进行结构化分析,提取异常模式、频率统计、趋势分析和根因推断。支持 Nginx、应用日志、系统日志等常见格式
Trigger
- 用户提供日志内容要求分析
- remote-exec 获取日志后需要解读
- 排查线上问题时需要分析错误日志
工作流程
原始日志 → 格式识别 → 结构化解析 → 异常检测 → 趋势分析 → 输出报告
Step 1: 识别日志格式
根据日志内容自动识别格式类型:
| 格式 | 特征 | 常见来源 |
|---|---|---|
| Nginx/Apache Access | IP + 时间 + Method + Path + Status + BodyBytes + UserAgent | Web 服务器 |
| Nginx Error | 时间 + 级别 + PID + 消息 | Nginx |
| JSON 结构化日志 | {"time":..., "level":..., "msg":...} |
现代应用(Go、Node.js、Python) |
| 系统日志 (syslog) | 时间 + 主机 + 进程 + 消息 | Linux 系统 |
| Java Stacktrace | Exception 开头 + at ... 堆栈 | Java 应用 |
| 自定义应用日志 | 自定义格式,包含级别+时间戳+消息 | 各类应用 |
如无法识别:向用户询问日志来源和格式说明。
Step 2: 结构化解析
对日志按行解析,提取关键字段:
# Nginx Access 示例
192.168.1.1 - - [10/May/2025:13:55:36 +0800] "GET /api/users HTTP/1.1" 200 1234 "-" "curl/7.68"
# 解析结果
{
"ip": "192.168.1.1",
"time": "2025-05-10T13:55:36+08:00",
"method": "GET",
"path": "/api/users",
"status": 200,
"bytes": 1234,
"agent": "curl/7.68"
}
关注的关键指标
- 异常状态码: 4xx(客户端错误)、5xx(服务端错误)
- 响应时间: 慢请求识别(超过 1s、3s、5s 的阈值)
- 错误级别: FATAL > ERROR > WARN 的分布
- 重复模式: 同一错误反复出现
- 时间聚集: 错误集中在特定时间窗口
Step 3: 异常检测
扫描日志并标记异常条目:
异常等级定义
| 等级 | 含义 | 示例 |
|---|---|---|
| 🚨 CRITICAL | 严重影响可用性 | OOM、panic、连接池耗尽、5xx 暴增 |
| ⚠️ WARNING | 潜在风险 | 慢查询、重试次数多、4xx 高频 |
| ℹ️ INFO | 值得关注的正常信息 | 服务重启、配置变更、新版本上线 |
需要标记的异常模式
# 1. 错误突发 (Error Burst)
# 同一错误在短时间内多次出现
# 例:30 秒内 50 次 "connection refused"
# 2. 状态码异常分布
# 5xx 比例 > 1% 或 4xx 比例 > 5% 需要关注
# 特定接口 5xx 率突增
# 3. 性能退化
# P99 响应时间超过基线 2 倍
# 慢请求(>3s)数量突然增加
# 4. 资源耗尽信号
# "out of memory", "cannot allocate", "too many open files"
# "connection pool exhausted", "disk full"
# 5. 级联失败
# A 服务报错 → B 服务报错 → C 服务报错
# 表明故障在蔓延
Step 4: 输出报告
按以下模板输出分析结果:
## 📊 日志分析报告
### 概览
- **日志来源**: {Nginx Access / 应用日志 / 系统日志}
- **时间范围**: {开始时间} → {结束时间}
- **总行数**: {总数}
- **异常行数**: {异常数} ({比例}%)
### 状态码分布(HTTP 日志专用)
| 状态码 | 数量 | 占比 |
|--------|------|------|
| 2xx | {n} | {n%} |
| 3xx | {n} | {n%} |
| 4xx | {n} | {n%} |
| 5xx | {n} | {n%} |
### 🚨 Critical 级异常
| 时间 | 来源 | 内容 | 影响 |
|------|------|------|------|
| {time} | {source} | {message} | {impact} |
### ⚠️ Warning 级异常
| 时间 | 来源 | 内容 | 建议 |
|------|------|------|------|
| {time} | {source} | {message} | {suggestion} |
### 趋势分析
\`\`\`
错误趋势(按时间窗口)
{时间} → {数量} {趋势箭头} {对比上一窗口}
{时间} → {数量} {趋势箭头} {对比上一窗口}
\`\`\`
### 根因推断
{基于异常模式的分析结论}
### 建议措施
1. {具体建议}
2. {具体建议}
3. {具体建议}
快速使用
# 分析一段 Nginx 日志
分析这段日志:{paste logs}
# 配合 remote-exec:先拉日志,再分析
远程执行:tail -n 1000 /var/log/nginx/error.log
分析上面的输出
# 分析应用报错
看下这个错误日志,找出根因
参考资料
- 常见日志模式: references/patterns.md