日志分析Skill log-analysis

日志分析技能采用分区优先方法论,用于日志搜索、错误分析和模式查找,支持 Datadog、CloudWatch 或 Kubernetes 日志,适用于 DevOps、云计算和系统运维,提升监控和故障排除效率。关键词:日志分析、错误分析、DevOps、云计算、Kubernetes、Datadog、CloudWatch。

DevOps 0 次安装 0 次浏览 更新于 3/16/2026

name: 日志分析 description: 分区优先的日志分析方法论。用于日志搜索、错误分析、跨 Datadog、CloudWatch 或 Kubernetes 日志的模式查找。

日志分析方法论

核心哲学:分区优先

绝不从阅读原始日志样本开始。

日志可能令人不知所措。分区优先的方法防止:

  • 只见树木不见森林
  • 浪费时间在不相关数据上
  • 用噪音淹没上下文

四步过程

步骤1:获取统计信息

在任何日志搜索之前,了解情况:

CloudWatch Insights:

# 有多少错误?
filter @message like /ERROR/
| stats count(*) as total

# 随时间错误率
filter @message like /ERROR/
| stats count(*) by bin(5m)

# 错误类型?
filter @message like /ERROR/
| parse @message /(?<error_type>[\w.]+Exception)/
| stats count(*) by error_type
| sort count desc

Datadog:

# 按服务错误分布
service:* status:error | stats count by service

# 错误类型
service:myapp status:error | stats count by @error.kind

要回答的问题:

  • 错误总量是多少?
  • 是增加、稳定还是减少?
  • 有哪些独特错误类型?
  • 哪些服务/主机受影响?

步骤2:识别模式

寻找相关性:

时间模式:

  • 错误是否在特定时间开始?
  • 是否有周期性(每小时、每天)?
  • 与部署或流量峰值相关?

服务模式:

  • 是否有一个服务是源头?
  • 错误是否跨服务传播?

错误模式:

  • 最常见的错误是什么?
  • 错误是聚集还是分散?

步骤3:策略采样

只有现在才阅读实际日志样本:

从异常中采样:

  • 获取峰值错误时间的日志
  • 获取正常时间的日志进行比较

按错误类型采样:

  • 获取每种不同错误类型的示例
  • 限制为每种5-10个

围绕事件采样:

  • 部署前/后的日志
  • 特定事件时间戳周围的日志

步骤4:与事件关联

将日志连接到系统变更:

# 使用 git_log 查找最近部署
git_log --since="2小时前"

# 为 K8s 使用 get_deployment_history
get_deployment_history deployment=api-server

# 比较变更前后的日志模式

平台特定提示

CloudWatch Insights

最佳实践:

# 始终包含时间过滤器
filter @timestamp > ago(1h)

# 使用 parse 进行结构化提取
parse @message /status=(?<status>\d+)/

# 显示前聚合
stats count(*) by status | sort count desc | limit 10

常用查询:

# 延迟分布
filter @type = "REPORT"
| stats avg(@duration) as avg,
        pct(@duration, 95) as p95,
        pct(@duration, 99) as p99

# 带上下文的错误消息
filter @message like /ERROR/
| fields @timestamp, @message
| sort @timestamp desc
| limit 20

Datadog 日志

查询语法:

# 按服务和状态过滤
service:api-gateway status:error

# 字段查询
@http.status_code:>=500

# 通配符
@error.message:*timeout*

# 时间比较
service:api (now-1h TO now) vs (now-25h TO now-24h)

Kubernetes 日志

明智使用 get_pod_logs:

  • 始终指定 tail_lines(默认: 100)
  • 过滤到多容器pod中的特定容器
  • 先使用 get_pod_events 处理崩溃/重启

要避免的反模式

  1. 转储所有日志 - 绝不请求无限制日志查询
  2. 从样本开始 - 始终先获取统计信息
  3. 忽略时间窗口 - 缩小到事件窗口
  4. 缺失关联 - 始终连接到部署/变更
  5. 单服务焦点 - 检查上游/下游服务

调查模板

## 日志分析报告

### 统计信息
- 时间窗口: [开始] 到 [结束]
- 总日志量: X 事件
- 错误计数: Y 事件 (Z%)
- 错误率趋势: [增加/稳定/减少]

### 顶级错误类型
1. [错误类型1]: N 次发生 - [描述]
2. [错误类型2]: M 次发生 - [描述]

### 时间模式
- 错误开始于: [时间戳]
- 相关性: [部署 X / 流量峰值 / 外部事件]

### 样本错误
[引用2-3个代表性错误消息]

### 根本原因假设
[基于模式,可能的原因是什么?]