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 的基础概念和架构设计:
核心要点
功能定位:Alertmanager 是 Prometheus 生态系统中的告警管理组件
核心概念:掌握告警、标签、路由、接收器等基本概念
架构设计:理解组件架构和数据流程
集成方式:了解与 Prometheus 的集成配置
部署模式:支持单实例和高可用集群部署
关键特性
智能处理:去重、分组、路由功能
灵活配置:丰富的配置选项和规则
多渠道通知:支持多种通知方式
高可用性:集群部署和故障转移
可扩展性:支持自定义开发和集成
下一步学习
在下一章中,我们将学习如何安装和部署 Alertmanager,包括:
单机部署方法
容器化部署
Kubernetes 部署
高可用集群配置 — 下一章: 安装部署与环境配置