13.3场景2 错误率突然上升

分类: 故障排查 Troubleshooting 实战

场景 2:错误率突然上升

欢迎回到第 13 章的学习。在上一节,我们学习了 API 响应慢的排查方法。现在我们要学习场景 2:错误率突然上升。

本节将学习:告警触发、错误分类统计、查看错误 Traces、分析错误 Logs、识别错误模式、以及修复验证。

告警触发

告警触发的作用是什么? 及时发现错误率异常,快速响应问题。

如何查看告警? 在 Grafana Alerting 中查看活跃的告警,了解告警详情。

告警规则示例:

groups:
  - name: error_rate_alerts
    rules:
      - alert: HighErrorRate
        expr: sum(rate(http_requests_total{status=~"5.."}[5m])) / sum(rate(http_requests_total[5m])) > 0.01
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "The error rate exceeds 1%"
          description: "Current error rate: {{ $value }}"

错误分类统计

错误分类统计的作用是什么? 统计不同类型的错误,识别主要错误类型。

如何进行错误分类统计? 在 Grafana Dashboard 中查看错误分类:

  • HTTP 错误(4xx、5xx)
  • 数据库错误
  • 业务逻辑错误
  • 外部服务错误

错误分类查询:

# HTTP 5xx 错误率
sum(rate(http_requests_total{status=~"5.."}[5m])) by (status, endpoint)

# 数据库错误
sum(rate(db_errors_total[5m])) by (error_type)

# 业务逻辑错误
sum(rate(business_errors_total[5m])) by (error_code)

查看错误 Traces

查看错误 Traces 的作用是什么? 使用 Trace 查看错误发生的完整链路,了解错误上下文。

如何查看错误 Traces? 在 Grafana Tempo 中使用 TraceQL 查询错误 Trace。

TraceQL 查询示例:

# The query status is incorrect Trace
{status="error"}

# Querying for a specific type of error Trace
{error.type="database_error"}

# Querying errors for specific services Trace
{service.name="order-service"} && {status="error"}

分析错误 Logs

分析错误 Logs 的作用是什么? 通过 Logs 分析错误的详细信息,找到错误的根本原因。

如何分析错误 Logs? 使用 LogQL 查询错误日志:

LogQL 查询示例:

# 查询错误堆栈
{level="error"} | json | line_format "{{.stack}}"

# 查询错误消息
{level="error"} | json | line_format "{{.message}}"

# 查询错误上下文
{level="error"} && {service="order-service"} | json

识别错误模式

识别错误模式的作用是什么? 识别错误的发生模式,找出错误的共同特征。

如何识别错误模式? 分析错误的:

  • 发生时间模式
  • 发生位置模式
  • 错误类型模式
  • 用户影响模式

错误模式分析:

# 错误时间分布
sum(rate(http_requests_total{status=~"5.."}[5m])) by (hour)

# 错误位置分布
sum(rate(http_requests_total{status=~"5.."}[5m])) by (endpoint)

# 错误类型分布
sum(rate(errors_total[5m])) by (error_type)

修复验证

修复验证的作用是什么? 实施修复方案后,验证错误是否已解决。

如何验证修复? 监控错误率趋势,确认错误率已恢复正常。

验证查询:

# 错误率趋势
sum(rate(http_requests_total{status=~"5.."}[5m])) / sum(rate(http_requests_total[5m]))

本节小结

在本节中,我们学习了场景 2:错误率突然上升:

第一个是告警触发。 及时发现错误率异常,快速响应问题。

第二个是错误分类统计。 统计不同类型的错误,识别主要错误类型。

第三个是查看错误 Traces。 使用 Trace 查看错误发生的完整链路,了解错误上下文。

第四个是分析错误 Logs。 通过 Logs 分析错误的详细信息,找到错误的根本原因。

第五个是识别错误模式。 识别错误的发生模式,找出错误的共同特征。

第六个是修复验证。 实施修复方案后,验证错误是否已解决。

故障排查流程: 告警触发 → 错误分类统计 → 查看错误 Traces → 分析错误 Logs → 识别错误模式 → 实施修复 → 验证修复效果。

这就是场景 2:错误率突然上升。通过场景 2 的学习,我们掌握了错误率突然上升的排查方法。

在下一节,我们将学习场景 3:数据库连接池耗尽。学习如何排查连接池问题。