1.1 Alertmanager 简介

什么是 Alertmanager

Alertmanager 是 Prometheus 监控系统的重要组成部分,专门负责处理由 Prometheus 服务器发送的告警。它提供了告警的去重、分组、路由和通知功能,是现代化监控体系中不可或缺的组件。

主要功能特性

1. 告警去重:自动识别和合并重复的告警 2. 告警分组:将相关告警组织在一起,减少通知噪音 3. 告警路由:根据标签将告警路由到不同的接收器 4. 通知管理:支持多种通知渠道(邮件、Slack、Webhook等) 5. 告警抑制:在特定条件下抑制某些告警 6. 静默管理:临时禁用特定告警的通知 7. 高可用性:支持集群部署,确保服务可靠性

应用场景

- 基础设施监控:服务器、网络设备告警管理 - 应用程序监控:业务指标异常告警 - 容器化环境:Kubernetes 集群监控告警 - 微服务架构:分布式系统告警协调 - DevOps 流程:CI/CD 流水线告警集成

1.2 核心概念与术语

告警(Alert)

告警是 Prometheus 根据告警规则生成的事件,包含以下关键信息: “`yaml

告警示例

alert: labels: alertname: “HighCPUUsage” instance: “server-01:9100” job: “node-exporter” severity: “warning” annotations: summary: “High CPU usage detected” description: “CPU usage is above 80% for more than 5 minutes” startsAt: “2024-01-15T10:30:00Z” endsAt: “0001-01-01T00:00:00Z” # 0值表示告警仍在触发 generatorURL: “http://prometheus:9090/graph?g0.expr=…” “`

标签(Labels)

标签是键值对,用于标识和分类告警: - alertname:告警规则名称 - instance:告警来源实例 - job:监控任务名称 - severity:告警严重程度 - team:负责团队 - service:相关服务

注解(Annotations)

注解提供告警的描述性信息: - summary:告警摘要 - description:详细描述 - runbook_url:处理手册链接 - dashboard_url:相关仪表板链接

接收器(Receiver)

接收器定义了告警的通知目标和方式: yaml receivers: - name: 'web-team' email_configs: - to: 'web-team@company.com' subject: 'Alert: {{ .GroupLabels.alertname }}' slack_configs: - api_url: 'https://hooks.slack.com/services/...' channel: '#web-alerts'

路由(Route)

路由决定告警如何分发到不同的接收器: yaml route: group_by: ['alertname', 'cluster'] group_wait: 10s group_interval: 10s repeat_interval: 1h receiver: 'default' routes: - match: team: web receiver: 'web-team' - match: severity: critical receiver: 'oncall-team'

分组(Grouping)

分组将相关告警合并,减少通知数量: - group_by:分组依据的标签 - group_wait:等待同组告警的时间 - group_interval:同组告警的发送间隔 - repeat_interval:重复发送间隔

抑制(Inhibition)

抑制规则防止在特定条件下发送某些告警: yaml inhibit_rules: - source_match: severity: 'critical' target_match: severity: 'warning' equal: ['alertname', 'instance']

静默(Silence)

静默临时禁用匹配条件的告警通知: yaml silence: matchers: - name: "alertname" value: "HighCPUUsage" - name: "instance" value: "server-01:9100" startsAt: "2024-01-15T10:00:00Z" endsAt: "2024-01-15T18:00:00Z" createdBy: "admin@company.com" comment: "Planned maintenance"

1.3 架构设计与工作原理

整体架构

mermaid graph TB subgraph "Prometheus Ecosystem" P[Prometheus Server] AM[Alertmanager] G[Grafana] end subgraph "Data Sources" NE[Node Exporter] CE[Container Exporter] AE[Application Exporter] end subgraph "Notification Channels" EMAIL[Email] SLACK[Slack] WH[Webhook] SMS[SMS] end subgraph "Alert Rules" AR1[CPU Alert] AR2[Memory Alert] AR3[Disk Alert] end NE --> P CE --> P AE --> P P --> AR1 P --> AR2 P --> AR3 AR1 --> AM AR2 --> AM AR3 --> AM AM --> EMAIL AM --> SLACK AM --> WH AM --> SMS P --> G

工作流程

1. 告警生成:Prometheus 根据告警规则评估指标数据 2. 告警发送:Prometheus 将触发的告警发送给 Alertmanager 3. 告警接收:Alertmanager 接收并验证告警 4. 去重处理:识别和合并重复告警 5. 分组处理:根据配置将告警分组 6. 路由匹配:根据标签匹配路由规则 7. 抑制检查:检查是否有抑制规则适用 8. 静默检查:检查是否有静默规则适用 9. 通知发送:向匹配的接收器发送通知 10. 状态管理:跟踪告警状态和通知历史

数据流图

mermaid sequenceDiagram participant P as Prometheus participant AM as Alertmanager participant R as Receiver P->>AM: Send Alert AM->>AM: Deduplicate AM->>AM: Group Alerts AM->>AM: Apply Routes AM->>AM: Check Inhibition AM->>AM: Check Silence AM->>R: Send Notification R->>AM: Acknowledge Note over P,R: Alert Resolution P->>AM: Send Resolved Alert AM->>R: Send Resolution Notification

核心组件

1. API 服务器

- 接收来自 Prometheus 的告警 - 提供 REST API 接口 - 处理静默和配置管理

2. 通知管理器

- 管理通知发送逻辑 - 处理重试和失败恢复 - 跟踪通知状态

3. 配置管理器

- 加载和验证配置文件 - 支持配置热重载 - 提供配置验证

4. 存储引擎

- 存储告警状态 - 管理静默规则 - 持久化通知历史

1.4 与 Prometheus 的集成

Prometheus 配置

在 Prometheus 配置文件中指定 Alertmanager: “`yaml

prometheus.yml

alerting: alertmanagers: - static_configs: - targets: - alertmanager-01:9093 - alertmanager-02:9093 timeout: 10s api_version: v2 rule_files: - “alert_rules/*.yml” “`

告警规则示例

“`yaml

alert_rules/node_alerts.yml

groups: - name: node_alerts rules: - alert: HighCPUUsage expr: 100 - (avg by(instance) (irate(node_cpu_seconds_total{mode=“idle”}[5m])) * 100) > 80 for: 5m labels: severity: warning team: infrastructure annotations: summary: “High CPU usage on {{ $labels.instance }}” description: “CPU usage is {{ $value }}% on {{ $labels.instance }}” runbook_url: “https://wiki.company.com/runbooks/high-cpu” - alert: HighMemoryUsage expr: (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100 > 90 for: 10m labels: severity: critical team: infrastructure annotations: summary: “High memory usage on {{ $labels.instance }}” description: “Memory usage is {{ $value }}% on {{ $labels.instance }}” runbook_url: “https://wiki.company.com/runbooks/high-memory” - alert: DiskSpaceLow expr: (node_filesystem_size_bytes - node_filesystem_free_bytes) / node_filesystem_size_bytes * 100 > 85 for: 15m labels: severity: warning team: infrastructure annotations: summary: “Low disk space on {{ $labels.instance }}” description: “Disk usage is {{ $value }}% on {{ $labels.instance }} ({{ $labels.mountpoint }})” runbook_url: “https://wiki.company.com/runbooks/disk-space” “`

集成验证

验证 Prometheus 与 Alertmanager 的连接: “`bash

检查 Prometheus 目标状态

curl http://prometheus:9090/api/v1/targets | jq ‘.data.activeTargets[] | select(.job==“alertmanager”)’

检查告警规则

curl http://prometheus:9090/api/v1/rules | jq ‘.data.groups[].rules[] | select(.type==“alerting”)’

检查活跃告警

curl http://prometheus:9090/api/v1/alerts “`

1.5 部署模式

单实例部署

适用于小规模环境或测试环境: “`yaml

docker-compose.yml

version: ‘3.8’ services: alertmanager: image: prom/alertmanager:latest ports: - “9093:9093” volumes: - ./alertmanager.yml:/etc/alertmanager/alertmanager.yml - alertmanager-data:/alertmanager command: - ‘–config.file=/etc/alertmanager/alertmanager.yml’ - ‘–storage.path=/alertmanager’ - ‘–web.external-url=http://localhost:9093’ volumes: alertmanager-data: “`

高可用集群

适用于生产环境: “`yaml

集群配置示例

version: ‘3.8’ services: alertmanager-01: image: prom/alertmanager:latest ports: - “9093:9093” volumes: - ./alertmanager.yml:/etc/alertmanager/alertmanager.yml command: - ‘–config.file=/etc/alertmanager/alertmanager.yml’ - ‘–storage.path=/alertmanager’ - ‘–web.external-url=http://alertmanager-01:9093’ - ‘–cluster.listen-address=0.0.0.0:9094’ - ‘–cluster.peer=alertmanager-02:9094’ - ‘–cluster.peer=alertmanager-03:9094’ alertmanager-02: image: prom/alertmanager:latest ports: - “9094:9093” volumes: - ./alertmanager.yml:/etc/alertmanager/alertmanager.yml command: - ‘–config.file=/etc/alertmanager/alertmanager.yml’ - ‘–storage.path=/alertmanager’ - ‘–web.external-url=http://alertmanager-02:9093’ - ‘–cluster.listen-address=0.0.0.0:9094’ - ‘–cluster.peer=alertmanager-01:9094’ - ‘–cluster.peer=alertmanager-03:9094’ alertmanager-03: image: prom/alertmanager:latest ports: - “9095:9093” volumes: - ./alertmanager.yml:/etc/alertmanager/alertmanager.yml command: - ‘–config.file=/etc/alertmanager/alertmanager.yml’ - ‘–storage.path=/alertmanager’ - ‘–web.external-url=http://alertmanager-03:9093’ - ‘–cluster.listen-address=0.0.0.0:9094’ - ‘–cluster.peer=alertmanager-01:9094’ - ‘–cluster.peer=alertmanager-02:9094’ “`

1.6 性能特性

处理能力

- 告警吞吐量:单实例可处理数千个告警/秒 - 并发连接:支持数百个并发 HTTP 连接 - 内存使用:基础运行需要 64MB,建议 256MB+ - 存储需求:告警状态和静默数据通常 < 100MB

扩展性

- 水平扩展:支持多实例集群部署 - 负载均衡:Prometheus 可配置多个 Alertmanager 实例 - 数据同步:集群间自动同步告警状态和静默 - 故障转移:自动处理实例故障和恢复

可靠性

- 持久化存储:告警状态持久化到磁盘 - 优雅关闭:支持优雅关闭和重启 - 配置验证:启动时验证配置文件 - 健康检查:提供健康检查端点

1.7 版本演进

主要版本特性

v0.15.x

  • 引入 API v2

  • 改进 Web UI

  • 增强集群功能

    v0.20.x

  • 支持 UTF-8 标签

  • 改进模板系统

  • 增强安全特性

    v0.24.x(当前稳定版)

  • 改进性能和稳定性

  • 增强监控指标

  • 优化内存使用

    v0.25.x(最新版)

  • 支持新的通知渠道

  • 改进 API 功能

  • 增强配置验证

    兼容性

  • 向后兼容:配置文件格式保持向后兼容

  • API 版本:支持 v1 和 v2 API

  • Prometheus 集成:与 Prometheus 2.x 完全兼容

    本章小结

    本章介绍了 Alertmanager 的基础概念和架构设计:

    核心要点

  1. 功能定位:Alertmanager 是 Prometheus 生态系统中的告警管理组件

  2. 核心概念:掌握告警、标签、路由、接收器等基本概念

  3. 架构设计:理解组件架构和数据流程

  4. 集成方式:了解与 Prometheus 的集成配置

  5. 部署模式:支持单实例和高可用集群部署

    关键特性

  • 智能处理:去重、分组、路由功能

  • 灵活配置:丰富的配置选项和规则

  • 多渠道通知:支持多种通知方式

  • 高可用性:集群部署和故障转移

  • 可扩展性:支持自定义开发和集成

    下一步学习

    在下一章中,我们将学习如何安装和部署 Alertmanager,包括:

  • 单机部署方法

  • 容器化部署

  • Kubernetes 部署

  • 高可用集群配置 — 下一章: 安装部署与环境配置