13.11告警和通知配置

分类: 故障排查 Troubleshooting 实战

告警和通知配置

欢迎回到第 13 章的学习。在上一节,我们学习了使用 LogQL 进行日志分析。现在我们要学习告警和通知配置。

本节将学习:告警规则设计、通知渠道配置、告警分组、以及告警抑制。

告警规则设计

告警规则设计的作用是什么? 设计合理的告警规则,及时发现问题,避免误报和漏报。

告警规则设计原则包括哪些呢?

第一个:明确的告警条件。 告警条件应该明确,易于理解。

第二个:合理的阈值设置。 阈值应该基于实际情况设置,避免过于敏感或迟钝。

第三个:告警级别划分。 根据问题严重程度划分告警级别。

第四个:告警持续时间。 设置告警持续时间,避免瞬时波动触发告警。

告警规则示例:

groups:
  - name: api_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
          service: order-service
        annotations:
          summary: "API The error rate exceeds 1%"
          description: "serving {{ $labels.service }} The error rate is {{ $value | humanizePercentage }}"
      
      - alert: SlowResponseTime
        expr: histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket[5m])) by (le, service)) > 1
        for: 10m
        labels:
          severity: warning
        annotations:
          summary: "API P95 Response time exceeds 1 secs"
          description: "serving {{ $labels.service }} ofthe P95 Response time is {{ $value }}s"

通知渠道配置

通知渠道配置的作用是什么? 配置告警通知渠道,确保告警能够及时送达。

通知渠道包括哪些呢?

第一个:邮件通知。 发送告警邮件。

第二个:Slack 通知。 发送到 Slack 频道。

第三个:PagerDuty 通知。 发送到 PagerDuty。

第四个:Webhook 通知。 发送到自定义 Webhook。

通知渠道配置示例:

# Grafana Alerting Notification channel configuration
receivers:
  - name: email_receiver
    email_configs:
      - to: team@example.com
        from: alerts@example.com
        smarthost: smtp.example.com:587
        auth_username: alerts@example.com
        auth_password: password
  
  - name: slack_receiver
    slack_configs:
      - api_url: https://hooks.slack.com/services/xxx
        channel: '#alerts'
        title: 'alarm notification'
        text: '{{ .CommonAnnotations.summary }}'
  
  - name: webhook_receiver
    webhook_configs:
      - url: http://webhook.example.com/alerts
        http_config:
          bearer_token: token

告警分组

告警分组的作用是什么? 将相关告警分组,减少告警噪音,提高告警可读性。

如何进行告警分组? 根据告警的:

  • 服务分组
  • 环境分组
  • 严重程度分组
  • 时间分组

告警分组配置:

route:
  group_by: ['service', 'environment', 'severity']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 12h
  receiver: 'default-receiver'
  routes:
    - match:
        severity: critical
      receiver: 'critical-receiver'
      group_by: ['service']

告警抑制

告警抑制的作用是什么? 抑制重复或相关的告警,避免告警风暴。

如何配置告警抑制? 配置告警抑制规则:

  • 抑制重复告警
  • 抑制相关告警
  • 抑制低级别告警(当高级别告警触发时)

告警抑制配置:

inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['service', 'environment']
  
  - source_match:
      alertname: 'ServiceDown'
    target_match:
      alertname: 'HighErrorRate'
    equal: ['service']

本节小结

在本节中,我们学习了告警和通知配置:

第一个是告警规则设计。 设计合理的告警规则,及时发现问题,避免误报和漏报。

第二个是通知渠道配置。 配置告警通知渠道,确保告警能够及时送达。

第三个是告警分组。 将相关告警分组,减少告警噪音,提高告警可读性。

第四个是告警抑制。 抑制重复或相关的告警,避免告警风暴。

告警和通知配置流程: 设计告警规则 → 配置通知渠道 → 设置告警分组 → 配置告警抑制 → 测试验证。

这就是告警和通知配置。通过告警和通知配置,我们可以及时发现和响应问题。

在下一节,我们将学习故障演练(Runbook)。学习如何创建和维护 Runbook。