当前位置: 首页 > article >正文

从监控到告警:Prometheus+Grafana+Alertmanager+告警通知服务全链路落地实践

文章目录

    • 一、引言
      • 1.1 监控告警的必要性
      • 1.2 监控告警的基本原理
        • 1.2.1 指标采集与存储
        • 1.2.2 告警规则与触发机制
        • 1.2.3 多渠道通知与闭环
    • 二、技术选型与架构设计
      • 2.1 为什么选择 Prometheus 及其生态
        • 2.1.1 Prometheus 优势分析
        • 2.1.2 Grafana 可视化能力
        • 2.1.3 Alertmanager 灵活告警
        • 2.1.4 对比:主流监控告警方案
      • 2.2 系统整体架构图与组件说明
        • 2.2.1 架构图
        • 2.2.2 组件说明
        • 2.2.3 项目配置举例
    • 三、Prometheus 与 Grafana 配置实践
      • 3.1 被监控服务如何暴露采集数据接口
        • 3.1.1 /metrics 接口规范与实现方式
        • 3.1.2 go-zero 框架的 /metrics 实现
        • 3.1.3 采集指标的设计建议
      • 3.2 Prometheus 配置详解
        • 3.2.1 采集目标配置(scrape_configs)
        • 3.2.2 告警规则配置(rule_files)
        • 3.2.3 数据持久化与性能优化
      • 3.3 Grafana 配置与仪表盘搭建
        • 3.3.1 数据源接入 Prometheus
        • 3.3.2 常用监控大盘模板
        • 3.3.3 自定义告警面板
        • 3.4 流程时序图
    • 四、Alertmanager 告警系统配置
      • 4.1 Alertmanager 的安装与集成
        • 4.1.1 Alertmanager 简介
        • 4.1.2 安装方式
        • 4.1.3 与 Prometheus 集成
      • 4.2 告警规则的编写与管理
        • 4.2.1 告警规则原理
        • 4.2.2 告警规则的管理
        • 4.2.3 优缺点对比
      • 4.3 告警分级与路由策略
        • 4.3.1 路由原理
        • 4.3.2 路由配置示例
        • 4.3.3 分组与抑制
      • 4.4 深入原理与架构分析
        • 4.4.1 Alertmanager 工作流程时序图
    • 五、告警通知多渠道集成实践(以邮件与短信为例)
      • 5.1 邮件告警的配置与实现
        • 5.1.1 邮件告警的原理
        • 5.1.2 邮件发送流程与架构
        • 5.1.3 base 项目邮件发送源码解析
        • 5.1.4 优缺点对比
        • 5.1.5 邮件告警的最佳实践
      • 5.2 短信告警的配置与实现
        • 5.2.1 短信告警的原理
        • 5.2.2 短信发送流程与架构
        • 5.2.3 base 项目短信发送源码解析
        • 5.2.4 优缺点对比
        • 5.2.5 短信告警的最佳实践
      • 5.3 邮件与短信告警的对比与集成建议
    • 六、部署使用步骤
      • 6.1 被监控服务暴露采集数据接口
        • 6.1.1 采集接口标准
        • 6.1.2 集成方式
      • 6.2 调整配置文件
        • 6.2.1 Prometheus 配置
        • 6.2.2 Alertmanager 配置
        • 6.2.3 base 服务配置
      • 6.3 启动监控相关的服务
        • 6.3.1 使用 Docker Compose 启动
        • 6.3.2 手动启动
      • 6.4 查看 Prometheus /targets 页面,各服务的状态
      • 6.5 进入 Grafana 管理页面
      • 6.6 Grafana 管理页面详细配置
        • 6.6.1 增加数据源
        • 6.6.2 新增数据看板(Dashboard)
        • 6.6.3 导入/导出 Dashboard
        • 6.6.4 用户与权限管理
        • 6.6.5 其它常用功能
      • 6.7 进入 Alertmanager 管理页面
      • 6.8 Alertmanager 管理页面使用说明
      • 6.9 其它相关功能操作步骤
    • 七、常见问题
      • 7.1 告警降噪与误报处理
        • 7.1.1 告警降噪的必要性
        • 7.1.2 降噪策略
        • 7.1.3 误报处理
      • 7.2 多渠道告警的优先级与兜底策略
        • 7.2.1 多渠道集成的必要性
        • 7.2.2 优先级与兜底策略
      • 7.3 监控系统的高可用与扩展性
        • 7.3.1 高可用设计
        • 7.3.2 扩展性设计
      • 7.4 常见问题与解决方案
    • 八、总结与展望
      • 8.1 现有方案的优缺点分析
      • 8.2 后续优化方向与新技术展望

一、引言

1.1 监控告警的必要性

在现代分布式系统和微服务架构中,服务数量众多、依赖复杂,任何一个环节的异常都可能影响整体业务的可用性。监控与告警系统的核心价值体现在:

  • 业务连续性保障:及时发现服务异常,减少故障影响时间,提升系统可用性。
  • 故障快速定位与响应:通过自动化告警和丰富的监控指标,第一时间定位问题根因,缩短MTTR(平均修复时间)。
  • 自动化运维与降本增效:自动化监控和告警减少人工巡检,提升运维效率,降低人力成本。

对比:传统 vs. 现代监控告警

方式优点缺点适用场景
人工巡检简单、无门槛延迟高、易遗漏、不可扩展小型、低频变更系统
日志轮询可自动化、实现简单误报多、粒度粗、无实时性早期单体应用
SNMP/Nagios适合基础设施、网络设备监控配置繁琐、扩展性差传统IT运维
Prometheus云原生、自动发现、指标丰富需服务端暴露接口、学习曲线微服务、云原生

1.2 监控告警的基本原理

1.2.1 指标采集与存储

监控系统通过采集各服务暴露的指标(如CPU、内存、QPS、错误率等),并将其存储在时序数据库中。以 Prometheus 为例,服务需暴露 /metrics HTTP 接口,Prometheus 定期拉取数据。

1.2.2 告警规则与触发机制

监控系统根据预设的规则(如“CPU使用率>80% 持续5分钟”),实时评估采集到的指标,若满足条件则触发告警。

1.2.3 多渠道通知与闭环

告警触发后,系统可通过邮件、短信、IM机器人等多种渠道通知相关责任人,实现自动化闭环。


二、技术选型与架构设计

2.1 为什么选择 Prometheus 及其生态

2.1.1 Prometheus 优势分析

Prometheus 是云原生时代的事实标准监控系统,具备如下优势:

  • 拉模式采集:服务端暴露 /metrics,Prometheus 定期拉取,天然适配动态扩缩容。
  • 多维度指标:支持标签(Label)体系,灵活聚合、筛选。
  • 强大的查询语言 PromQL:可自定义复杂的聚合、计算、告警规则。
  • 生态丰富:与 Grafana、Alertmanager、各种 Exporter 无缝集成。
2.1.2 Grafana 可视化能力

Grafana 是业界最流行的可视化平台,支持多数据源(Prometheus、Elasticsearch等),可自定义仪表盘、告警面板,极大提升监控可观测性。

2.1.3 Alertmanager 灵活告警

Alertmanager 支持多种告警路由、分组、抑制、静默等高级特性,并可通过 Webhook 与自定义服务(如本项目的 base 服务)集成,实现多渠道通知。

2.1.4 对比:主流监控告警方案
方案优点缺点适用场景
Zabbix适合基础设施、图形丰富扩展性差、云原生支持弱传统IT运维
Prometheus+Grafana云原生、自动发现、灵活告警需服务端配合、学习曲线微服务、K8s
云厂商监控(如阿里云云监控)免运维、集成度高依赖厂商、定制性弱,收费公有云

2.2 系统整体架构图与组件说明

2.2.1 架构图
通知服务
监控系统
业务服务
/metrics
/metrics
/metrics
/metrics
/metrics
/metrics
指标数据
告警
Webhook
邮件/短信/IM
base服务
邮件/短信/钉钉/企业微信
Prometheus
Grafana
Alertmanager
service1:8894
service2:8893
service3:8898
service4:8895
service5:8892
service6:8890
运维/开发
2.2.2 组件说明
  • Prometheus:定期拉取各服务 /metrics,存储时序数据,评估告警规则。
  • Grafana:连接 Prometheus,展示可视化大盘。
  • Alertmanager:接收 Prometheus 告警,路由、分组、抑制,并通过 Webhook 通知 base 服务。
  • base 服务:实现邮件、短信、钉钉、企业微信等多渠道通知,作为告警通知的统一出口。
2.2.3 项目配置举例

docker-compose.yml 为例,定义了 Prometheus、Grafana、Alertmanager、base 服务的容器编排:

services:prometheus:image: prom/prometheus:latestvolumes:- ./build/prometheus/server/prometheus.yml:/etc/prometheus/prometheus.yml- ./build/prometheus/server/rules.yml:/etc/prometheus/rules.yml- ./data/prometheus/data:/prometheusports:- "8892:9090"networks:- chatgpt-wechat_networkgrafana:image: grafana/grafana:latestports:- "8891:3000"networks:- chatgpt-wechat_networkalertmanager:image: prom/alertmanager:latestvolumes:- ./build/alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.ymlports:- "8896:9093"networks:- chatgpt-wechat_networkbase:build: ./baseports:- "8897:8897"networks:- chatgpt-wechat_network

三、Prometheus 与 Grafana 配置实践

3.1 被监控服务如何暴露采集数据接口

3.1.1 /metrics 接口规范与实现方式

Prometheus 采用“拉模式”采集监控数据。每个被监控服务需通过 HTTP 暴露 /metrics 接口,返回 Prometheus 格式的文本数据。例如:

# HELP go_gc_duration_seconds A summary of the GC invocation durations.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 0.000023
go_gc_duration_seconds{quantile="0.25"} 0.000031
...

每一行代表一个指标(Metric),可带有多维标签(Label),便于后续聚合和筛选。

3.1.2 go-zero 框架的 /metrics 实现

在本项目中,所有被监控服务(如 base、knowledge、wellness 等)均基于 go-zero 框架开发。go-zero 内置了 Prometheus 监控能力,开发者无需手动实现 /metrics,只需在服务启动时开启监控配置即可。

go-zero 的原理简述:

  • go-zero 在服务启动时自动注册 /metrics 路由。
  • 内部集成了 Prometheus 官方的 go client(promhttp),自动采集 Go 运行时指标(如 GC、内存、协程数等)。
  • 支持自定义业务指标埋点(如 QPS、错误率等)。

项目代码举例:

假设 base 服务的 main.go 片段如下(伪代码):

import ("github.com/zeromicro/go-zero/rest""github.com/zeromicro/go-zero/rest/httpx"
)func main() {server := rest.MustNewServer(config.RestConf)defer server.Stop()server.Start()
}

配置文件示例:

# base/etc/base.yaml
Name: base
Host: 0.0.0.0
Port: 8897
DevServer:Enabled: truePort: 8894MetricsPath: /metricsEnableMetrics: true

这样,Prometheus 就可以通过 http://base:8897/metrics 采集到 base 服务的运行时和业务指标。

3.1.3 采集指标的设计建议
  • 运行时指标:如 go_gc_duration_seconds、go_memstats_alloc_bytes、go_goroutines 等,自动采集。
  • 业务指标:如接口 QPS、错误率、延迟分布等。go-zero 支持自定义埋点,可通过 prometheus client 库注册自定义指标。
  • 标签设计:合理使用 label(如 job、app、env、instance),便于多维度聚合和筛选。

3.2 Prometheus 配置详解

3.2.1 采集目标配置(scrape_configs)

Prometheus 通过 scrape_configs 配置采集目标。以项目中 build/prometheus/server/prometheus.yml 为例:

scrape_configs:- job_name: 'base'metrics_path: '/metrics'static_configs:- targets: [ 'base:8897' ]labels:job: baseapp: baseenv: pro
  • job_name:采集任务名,便于分组和查询。
  • metrics_path:采集路径,通常为 /metrics
  • targets:目标服务地址(可为容器名:端口)。
  • labels:为采集到的所有指标自动打标签,便于后续聚合。

项目完整配置片段:

scrape_configs:- job_name: 'knowledge'metrics_path: '/metrics'static_configs:- targets: [ 'knowledge:8894' ]labels:job: knowledgeapp: knowledgeenv: pro# ... 其他服务同理
3.2.2 告警规则配置(rule_files)

Prometheus 支持自定义告警规则,规则文件通过 rule_files 引入。例如:

rule_files:- "rules.yml"

rules.yml 示例(项目中的 build/prometheus/server/rules.yml):

groups:- name: examplerules:- alert: ServiceDownexpr: up == 0for: 1mlabels:severity: criticalannotations:summary: "服务 {{ $labels.job }} 已停止"description: "服务 {{ $labels.job }} 在 {{ $labels.instance }} 已停止超过 1 分钟"
  • expr:PromQL 表达式,up == 0 表示服务不可达。
  • for:持续时间,避免瞬时抖动误报。
  • labels/annotations:自定义标签和告警描述。
3.2.3 数据持久化与性能优化
  • --storage.tsdb.retention.time=15d:数据保留15天。
  • --storage.tsdb.retention.size=10GB:最大占用空间10GB。
  • 建议将数据目录挂载到独立磁盘,提升读写性能。

docker-compose.yml 配置片段:

volumes:- ./data/prometheus/data:/prometheus
command:- '--storage.tsdb.retention.time=15d'- '--storage.tsdb.retention.size=10GB'

3.3 Grafana 配置与仪表盘搭建

3.3.1 数据源接入 Prometheus

Grafana 通过 Web UI 添加 Prometheus 数据源,配置 Prometheus 服务地址(如 http://prometheus:9090)。

3.3.2 常用监控大盘模板
  • 系统资源监控(CPU、内存、磁盘、网络)
  • 服务健康状态(up、QPS、错误率)
  • 告警面板(当前活跃告警、历史告警趋势)
3.3.3 自定义告警面板

Grafana 支持基于 PromQL 查询自定义图表和告警。例如:

sum(rate(http_requests_total{job="base"}[5m]))

可用于展示 base 服务的 QPS。


3.4 流程时序图
Prometheus Service1 Service2 Grafana Alertmanager Base服务 GET /metrics 指标数据 loop [每15秒] GET /metrics 指标数据 loop [每15秒] 提供查询接口 触发告警 Webhook 通知 Prometheus Service1 Service2 Grafana Alertmanager Base服务

四、Alertmanager 告警系统配置

4.1 Alertmanager 的安装与集成

4.1.1 Alertmanager 简介

Alertmanager 是 Prometheus 官方提供的告警管理组件,负责接收 Prometheus 发送的告警信息,并根据配置进行分组、抑制、路由和通知。它支持多种通知方式,如邮件、短信、钉钉、企业微信等。

4.1.2 安装方式

Alertmanager 支持多种部署方式,常见有二进制包、Docker、Kubernetes 等。以 Docker 为例,项目中的 ./build 目录下通常包含 docker-compose.yml,可直接拉起 Prometheus、Alertmanager、Grafana 等服务。

示例:docker-compose.yml 片段

alertmanager:image: prom/alertmanager:v0.25.0container_name: alertmanagervolumes:- ./alertmanager:/etc/alertmanagerports:- "9093:9093"command:- '--config.file=/etc/alertmanager/alertmanager.yml'
4.1.3 与 Prometheus 集成

Prometheus 通过 alerting 配置将告警推送到 Alertmanager。

示例:prometheus.yml 片段

alerting:alertmanagers:- static_configs:- targets:- 'alertmanager:9093'

优缺点对比:

方案优点缺点
内置告警配置简单,集成度高功能有限,扩展性差
Alertmanager支持多渠道、分组、抑制、路由配置复杂,学习成本略高

4.2 告警规则的编写与管理

4.2.1 告警规则原理

Prometheus 通过规则文件(如 alert.rules.yml)定义告警条件,定期评估表达式,满足条件时生成告警事件。

示例:alert.rules.yml

groups:- name: service-statusrules:- alert: ServiceDownexpr: up{job="my-service"} == 0for: 1mlabels:severity: criticalannotations:summary: "服务 {{ $labels.instance }} 宕机"description: "{{ $labels.instance }} 已经宕机超过1分钟"
4.2.2 告警规则的管理
  • 集中管理:所有规则集中在一个或多个 YAML 文件,便于版本控制。
  • 动态加载:Prometheus 支持热加载规则,减少重启带来的监控盲区。
4.2.3 优缺点对比
方式优点缺点
静态规则文件易于版本管理,直观变更需 reload,灵活性差
动态配置灵活,支持自动化复杂度高,易出错

4.3 告警分级与路由策略

4.3.1 路由原理

Alertmanager 通过 alertmanager.yml 配置路由树,根据告警标签(如 severity)分发到不同的通知渠道,实现分级告警和多渠道通知。

核心流程图

严重
一般
低级
Prometheus 触发告警
Alertmanager 接收告警
根据标签路由
邮件通知
钉钉通知
企业微信通知
4.3.2 路由配置示例

示例:alertmanager.yml 片段

route:group_by: ['alertname', 'severity']group_wait: 30sgroup_interval: 5mrepeat_interval: 1hreceiver: 'default'routes:- match:severity: 'critical'receiver: 'mail'- match:severity: 'warning'receiver: 'dingtalk'- match:severity: 'info'receiver: 'wechat'
receivers:- name: 'mail'email_configs:- to: 'ops@example.com'- name: 'dingtalk'webhook_configs:- url: 'http://base:8080/notify/dingtalk'- name: 'wechat'webhook_configs:- url: 'http://base:8080/notify/wechat'
4.3.3 分组与抑制
  • 分组:相同类型告警合并,减少通知风暴。
  • 抑制:如主机宕机时,自动抑制该主机上的其他服务告警,避免重复告警。

4.4 深入原理与架构分析

4.4.1 Alertmanager 工作流程时序图
Prometheus Alertmanager Base服务 用户/运维 发送告警事件 路由、分组、抑制 通过 Webhook 发送通知(邮件/短信/钉钉/企业微信) 发送最终告警消息 Prometheus Alertmanager Base服务 用户/运维

五、告警通知多渠道集成实践(以邮件与短信为例)

5.1 邮件告警的配置与实现

5.1.1 邮件告警的原理

邮件告警是最常见的系统告警通知方式之一。其基本原理是:当监控系统(如 Prometheus + Alertmanager)检测到异常后,通过 Webhook 或 SMTP 协议,将告警信息发送到邮件服务,由邮件服务将告警内容推送到指定收件人邮箱。

在本项目中,邮件发送由 base 服务的 EmailSender 组件实现,Alertmanager 通过 webhook 调用 base 服务的邮件接口,base 服务再通过 SMTP 协议发送邮件。

5.1.2 邮件发送流程与架构

核心流程图

Prometheus Alertmanager base服务 邮件服务器 用户邮箱 触发告警 Webhook调用(POST告警内容) SMTP协议发送邮件 邮件投递 Prometheus Alertmanager base服务 邮件服务器 用户邮箱
5.1.3 base 项目邮件发送源码解析

base/infrastructure/integration/mail/email.go 为例,邮件发送的核心流程如下:

  • 读取配置(发件人、收件人、SMTP服务器等)
  • 构建邮件内容(支持 HTML 格式,主题支持 Base64 编码防止乱码)
  • 通过 TLS 连接 SMTP 服务器,进行认证
  • 发送邮件内容

关键代码片段说明:

// 构建邮件头
headers["From"] = s.SvcCtx.Config.Email.From
headers["To"] = emailTo
headers["Subject"] = "=?UTF-8?B?" + base64.StdEncoding.EncodeToString([]byte(subject)) + "?="
headers["Content-Type"] = "text/html; charset=UTF-8"// 发送邮件
auth := smtp.PlainAuth("", s.SvcCtx.Config.Email.Username, s.SvcCtx.Config.Email.Password, s.SvcCtx.Config.Email.Host)
conn, err := tls.Dial("tcp", fmt.Sprintf("%s:%d", s.SvcCtx.Config.Email.Host, s.SvcCtx.Config.Email.Port), tlsConfig)
client, err := smtp.NewClient(conn, s.SvcCtx.Config.Email.Host)
client.Auth(auth)
client.Mail(s.SvcCtx.Config.Email.From)
client.Rcpt(emailTo)
w, err := client.Data()
w.Write([]byte(message))
w.Close()
5.1.4 优缺点对比
方式优点缺点
邮件告警普及率高,易于追溯,支持富文本可能被忽略,延迟较高,依赖外部邮箱服务
5.1.5 邮件告警的最佳实践
  • 配置多收件人,避免单点失效
  • 邮件内容结构化,便于自动化处理
  • 主题和内容中包含环境、时间、告警级别等关键信息
  • 配置 SMTP 认证和 TLS,保障安全性

5.2 短信告警的配置与实现

5.2.1 短信告警的原理

短信告警适用于紧急、强提醒场景。其原理是:监控系统触发告警后,通过 webhook 调用 base 服务,base 服务再调用第三方短信平台(如腾讯云短信)API,将告警内容发送到指定手机号。

5.2.2 短信发送流程与架构

核心流程图

Prometheus Alertmanager base服务 短信平台 用户手机 触发告警 Webhook调用(POST告警内容) 调用短信API 发送短信 Prometheus Alertmanager base服务 短信平台 用户手机
5.2.3 base 项目短信发送源码解析

base/infrastructure/integration/sms/tencent.go 为例,短信发送的核心流程如下:

  • 读取配置(手机号、签名、模板ID、API密钥等)
  • 构造请求体,序列化为 JSON
  • 设置鉴权头,调用第三方短信平台 API
  • 解析响应,判断发送结果

关键代码片段说明:

requestBody := map[string]interface{}{"mobiles":     mobiles,"sign_name":   s.SvcCtx.Config.MSG.SignName,"template_id": s.SvcCtx.Config.MSG.TemplateId,
}
jsonData, err := json.Marshal(requestBody)
headers := map[string]string{"Content-Type": "application/json","X-Auth-Key":   s.SvcCtx.Config.MSG.Key,
}
response, err := util.Post(s.SvcCtx.Config.MSG.Url, jsonData, headers)
json.Unmarshal(response, &result)
if code, ok := result["code"].(float64); ok && code != 0 {return errors.New("message send error")
}
5.2.4 优缺点对比
方式优点缺点
短信告警及时性强,强提醒,适合紧急场景成本高,内容有限,依赖第三方平台
5.2.5 短信告警的最佳实践
  • 只对高优先级、紧急告警发送短信,避免骚扰
  • 配置多手机号,支持多运维人员轮值
  • 监控短信发送状态,失败时自动重试或切换渠道
  • 合理设置短信模板,简明扼要传达关键信息

5.3 邮件与短信告警的对比与集成建议

维度邮件告警短信告警
及时性一般
成本
内容丰富度高(支持富文本)低(仅文本)
适用场景日常、非紧急告警紧急、核心告警
易用性易于追溯、归档适合即时提醒

集成建议:

  • 日常告警优先邮件,紧急告警短信+邮件双通道
  • 可通过 Alertmanager 路由策略灵活配置不同级别告警的通知方式

六、部署使用步骤

6.1 被监控服务暴露采集数据接口

6.1.1 采集接口标准

被监控服务需暴露 Prometheus 兼容的 HTTP metrics 接口(如 /metrics),输出格式为纯文本,内容为各类监控指标。

示例:

# HELP http_requests_total The total number of HTTP requests.
# TYPE http_requests_total counter
http_requests_total{method="post",code="200"} 1027
6.1.2 集成方式
  • Go 服务可用 prometheus/client_golang 集成,go-zero框架默认会集成
  • 其它语言均有官方/社区支持

6.2 调整配置文件

6.2.1 Prometheus 配置

编辑 prometheus.yml,添加被监控服务的 scrape 配置:

scrape_configs:- job_name: 'my-service'static_configs:- targets: ['my-service:8080']
6.2.2 Alertmanager 配置

编辑 alertmanager.yml,配置通知路由、接收人等(详见前文第四章)。

6.2.3 base 服务配置

在 base 服务的配置文件(如 etc/base.yaml)中,填写邮件、短信等通知渠道的参数。


6.3 启动监控相关的服务

6.3.1 使用 Docker Compose 启动

build 目录下执行:

docker-compose up -d

会自动启动 Prometheus、Alertmanager、Grafana、base 服务等。

6.3.2 手动启动

也可分别进入各服务目录,使用二进制或源码启动。


6.4 查看 Prometheus /targets 页面,各服务的状态

在这里插入图片描述

  1. 浏览器访问 http://localhost:9090/targets
  2. 检查所有被监控服务的状态是否为“UP”
  3. 若有异常,检查服务是否暴露 /metrics,网络连通性,配置文件是否正确

6.5 进入 Grafana 管理页面

  1. 浏览器访问 http://localhost:3000/
  2. 默认账号密码通常为 admin/admin,首次登录需修改密码

6.6 Grafana 管理页面详细配置

6.6.1 增加数据源

在这里插入图片描述

  1. 进入左侧菜单“Connections”图标 → “Data Sources”
  2. 点击“Add nw data source”
  3. 选择“Prometheus”
  4. 在“URL”中填写 Prometheus 地址(如 http://prometheus:9090
  5. 点击“Save & Test”确保连接成功
6.6.2 新增数据看板(Dashboard)

在这里插入图片描述

  1. 左侧菜单点击“Dashboard”
  2. 点击“new”
  3. 在“Query”栏选择数Metric,Label 等
  4. 点击查询,就能看到图片
  5. 右边可以配置图表类型(折线、柱状、饼图等),设置标题、单位、阈值等
  6. 点击“Save dashboard”保存面板
  7. 可通过“Settings”设置 Dashboard 的共享、导出、定时刷新等
6.6.3 导入/导出 Dashboard
  • 导入:点击“+” → “Import”,粘贴 JSON 或上传文件
  • 导出:Dashboard 页面右上角“设置” → “JSON Model” → “Export”
6.6.4 用户与权限管理

在这里插入图片描述

  • “Administration” → “Users and access” → ”Users” 可添加/管理用户
  • “Configuration” → “Users and access” → “Teams” 可分组管理权限
6.6.5 其它常用功能

在这里插入图片描述

  • 设置告警规则(Alert):在面板中配置阈值,触发时可联动通知
  • 定时快照、邮件报告等

6.7 进入 Alertmanager 管理页面

在这里插入图片描述

  1. 浏览器访问 http://localhost:9093/
  2. 可查看当前活跃告警、历史告警、分组、路由等信息

6.8 Alertmanager 管理页面使用说明

  • Silence(静默):可临时屏蔽某类告警,避免重复通知
  • Status:查看 Alertmanager 集群状态、配置加载情况
  • Receivers:查看所有通知渠道配置
  • 告警详情:点击告警可查看标签、注释、发送历史等

6.9 其它相关功能操作步骤

在这里插入图片描述

  • Prometheus 查询与调试:在 Prometheus 页面 /query 输入 PromQL 查询,实时查看指标数据
  • 日志排查:各服务容器/进程日志可用于排查启动、采集、通知等问题
  • 配置热加载:Prometheus、Alertmanager 支持 SIGHUP 信号或 API 热加载配置,无需重启
  • 备份与恢复:定期备份配置文件、Grafana Dashboard JSON,便于迁移和恢复

七、常见问题

7.1 告警降噪与误报处理

7.1.1 告警降噪的必要性

在实际生产环境中,监控系统如果配置不当,极易出现“告警风暴”——即短时间内大量重复、无效或低价值告警,导致运维人员疲于应付,甚至忽略真正的核心问题。

7.1.2 降噪策略
  • 告警分组:通过 Alertmanager 的 group_bygroup_wait 等参数,将同一类告警合并,减少通知次数。
  • 抑制规则:如主机宕机时,自动抑制该主机上其他服务的告警,避免重复提醒。
  • 告警级别划分:将告警分为 critical、warning、info 等不同级别,仅对高优先级告警采用强提醒(如短信)。
  • 告警恢复通知:配置告警恢复通知,便于追踪问题全生命周期。

流程图:告警降噪处理

原始告警流
分组
抑制
分级路由
最终通知
7.1.3 误报处理
  • 合理设置阈值:避免因短暂波动触发告警,可通过 for 参数设置持续时间。
  • 定期回顾告警规则:结合历史数据,优化和调整不合理的告警规则。
  • 自动化测试告警规则:上线前通过模拟数据验证告警准确性。

7.2 多渠道告警的优先级与兜底策略

7.2.1 多渠道集成的必要性

单一渠道(如仅邮件或仅短信)存在被忽略、服务不可用等风险。多渠道集成可提升告警的可靠性和到达率。

7.2.2 优先级与兜底策略
  • 主渠道+备份渠道:如优先短信,短信失败自动切换邮件或钉钉。
  • 分级通知:高优先级多渠道并发,低优先级仅邮件。
  • 失败重试与告警确认:base 服务可实现通知失败自动重试,或通过接口回调确认告警已被处理。

时序图:多渠道兜底流程

Alertmanager base服务 短信平台 邮件服务器 发送告警 发送短信 发送邮件 alt [短信发送失败] Alertmanager base服务 短信平台 邮件服务器

7.3 监控系统的高可用与扩展性

7.3.1 高可用设计
  • Prometheus 多实例部署:主备或联邦集群,避免单点故障。
  • Alertmanager 集群:支持多节点 HA,状态自动同步。
  • base 服务冗余部署:多实例+负载均衡,保障通知服务可用性。
7.3.2 扩展性设计
  • 插件化通知渠道:base 服务采用接口抽象,便于后续扩展钉钉、企业微信等新渠道。
  • 配置中心与动态热加载:支持在线变更告警规则和通知配置,提升运维效率。

7.4 常见问题与解决方案

问题类型现象解决建议
告警延迟邮件/短信到达慢检查网络、SMTP/短信平台状态
告警丢失未收到告警检查路由配置、收件人、API限流
误报频发大量无效告警优化规则、增加抑制、调整阈值
通知失败邮件/短信发送接口报错增加重试、切换备份渠道

八、总结与展望

8.1 现有方案的优缺点分析

优点

  • 灵活性高:Prometheus+Alertmanager+base 服务架构,支持多种通知渠道,易于扩展。
  • 解耦性强:监控、告警、通知分层设计,便于独立维护和升级。
  • 自动化程度高:支持自动分组、抑制、分级路由,减少人工干预。

不足

  • 配置复杂:多组件协作,初期配置和调优成本较高。
  • 依赖外部服务:如邮件、短信平台,需关注其可用性和限流策略。
  • 告警泛滥风险:规则设计不当易导致告警风暴,需要持续优化。

8.2 后续优化方向与新技术展望

  • 更多通知渠道集成:如钉钉、企业微信、飞书 等,提升多样性和可靠性。
  • 智能告警:引入机器学习/异常检测算法,自动识别异常模式,减少误报。
  • 自愈与自动化运维:告警触发自动化脚本,实现部分问题的自愈闭环。
  • 可观测性一体化:与日志、链路追踪等系统集成,形成全栈可观测平台。
  • 可视化与报表:增强告警统计、趋势分析和报表功能,辅助运维决策。

完整项目地址

相关文章:

从监控到告警:Prometheus+Grafana+Alertmanager+告警通知服务全链路落地实践

文章目录 一、引言1.1 监控告警的必要性1.2 监控告警的基本原理1.2.1 指标采集与存储1.2.2 告警规则与触发机制1.2.3 多渠道通知与闭环 二、技术选型与架构设计2.1 为什么选择 Prometheus 及其生态2.1.1 Prometheus 优势分析2.1.2 Grafana 可视化能力2.1.3 Alertmanager 灵活告…...

AUTOSAR图解==>AUTOSAR_EXP_AIADASAndVMC

AUTOSAR高级驾驶辅助系统与车辆运动控制接口详解 基于AUTOSAR R22-11标准的ADAS与VMC接口规范解析 目录 1. 引言2. 术语和概念说明 2.1 坐标系统2.2 定义 2.2.1 乘用车重心2.2.2 极坐标系统2.2.3 车辆加速度/推进力方向2.2.4 倾斜方向2.2.5 方向盘角度2.2.6 道路变量2.2.7 曲率…...

WPF【09】WPF基础入门 (三层架构与MVC架构)

9-2 【操作】WPF 基础入门 新建一项目 Create a new project - WPF Application (A project for creating a .NET Core WPF Application) - Next - .NET 5.0 (Current) - Create 项目创建完成,VS自动打开 GUI用户界面,格式是 .xaml文件,跟xm…...

macOS 风格番茄计时器:设计与实现详解

macOS 风格番茄计时器:设计与实现详解 概述 本文介绍一款采用 macOS 设计语言的网页版番茄计时器实现。该计时器完全遵循苹果的人机界面指南(HIG),提供原汁原味的 macOS 使用体验,同时具备响应式设计和深色模式支持。 核心特性 原生 macOS…...

中文NLP with fastai - Fastai Part4

使用fastai进行自然语言处理 在之前的教程中,我们已经了解了如何利用预训练模型并对其进行微调,以执行图像分类任务(MNIST)。应用于图像的迁移学习原理同样也可以应用于NLP任务。在本教程中,我们将使用名为AWD_LSTM的预训练模型来对中文电影评论进行分类。AWD_LSTM是LSTM…...

oracle goldengate实现远程抽取postgresql 到 postgresql的实时同步【绝对无坑版,亲测流程验证】

oracle goldengate实现postgresql 到 postgresql的实时同步 源端:postgresql1 -> postgresql2 流复制主备同步 目标端:postgresql 数据库版本:postgresql 12.14 ogg版本:21.3 架构图: 数据库安装以及流复制主备…...

【MYSQL】索引篇(一)

1.为什么要有索引 索引的本质是一种数据结构,她的作用其实就是更好更快的帮我们找到数据库中存储的数据,就好比一本书,你想要找到指定的内容,但是如果在没有目录的情况下,你只能一页页的进行寻找,这样效率…...

ISCC-2025-web-wp

web 校赛 校赛靠着ENOCH师傅发力,也是一路躺进了区域赛,E师傅不好意思发这抽象比赛的wp(这比赛确实啥必到让人大开眼界,反正明年我是肯定不会打了),我就顺手要过来连着区域赛的一起发了 web 150分 按照提示进入/includes/fla…...

鸿蒙分辨率

鸿蒙手机App界面开发,UI元素应该以什么哪种屏幕尺寸为基准?换言之,做鸿蒙手机APP UI设计时,应该以哪种屏 PX转VP 华为开发者问答 | 华为开发者联盟 各单位换算API 华为开发者问答 | 华为开发者联盟 开源鸿蒙更改DPI 如何在Op…...

@Docker Compose 部署 Pushgateway

文章目录 Docker Compose 部署 Pushgateway1. 目的2. 适用范围3. 先决条件4. 部署步骤4.1 创建项目目录4.2 创建 docker-compose.yml 文件4.3 启动 Pushgateway 服务4.4 验证服务运行状态4.5 测试 Pushgateway 访问 5. 配置 Prometheus 采集 Pushgateway 数据6. 日常维护6.1 查…...

我们来学mysql -- 从库重启,是否同步主库数据

从库重启后,通常不需要重新复制主库的全部数据,然后再开启复制。MySQL 的主从复制机制设计了优雅的恢复流程,可以在从库重启后继续从上次中断的位置继续复制,前提是相关的日志和状态信息完整。 以下是详细解释: 从库…...

King3399(ubuntu文件系统)iic(i2c)功能测试

0 引言 前面两篇博文简要介绍了板子上uart部分的内容,但在驱动开发时,我们遇到的外设更多的是以i2c或spi进行通信,本文将对king3399的i2c进行测试并对硬件电路、设备树与驱动程序进行分析 如果使用的i2c设备不是mma8452,建议先看…...

德思特新闻 | 德思特与es:saar正式建立合作伙伴关系

德思特新闻 2025年5月9日,德思特科技有限公司(以下简称“德思特”)与德国嵌入式系统专家es:saar GmbH正式达成合作伙伴关系。此次合作旨在将 es:saar 的先进嵌入式开发与测试工具引入中国及亚太市场,助力本地客户提升产品开发效率…...

基于原生JavaScript前端和 Flask 后端的Todo 应用

Demo地址:https://gitcode.com/rmbnetlife/todo-app-js-flask.git Python Todo 应用 这是一个使用Python Flask框架开发的简单待办事项(Todo)应用,采用前后端分离架构。本项目实现了待办事项的添加、删除、状态切换等基本功能,并提供了直观…...

一些Dify聊天系统组件流程图架构图

分享一些有助于深入理解Dify聊天模块的架构图 整体组件架构图 #mermaid-svg-0e2XalGLqrRbH1Jy {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-0e2XalGLqrRbH1Jy .error-icon{fill:#552222;}#mermaid-svg-0e2XalGLq…...

jq处理日志数据

介绍 jq 是一个轻量级且灵活的命令行 JSON 处理器。它允许你使用简单的过滤器来处理 JSON 数据,提取、操作和转换 JSON 文档。jq 是处理 JSON 数据的强大工具,特别适合在命令行环境中使用。 简单将就是:专门处理 json结构的字符串的工具 我…...

Matlab程序设计基础

matlab程序设计基础 程序设计函数文件1.函数文件的基本结构2.创建并使用函数文件的示例3.带多个输出的函数示例4.包含子函数的函数文件 流程控制1. if 条件语句2. switch 多分支选择语句3. try-catch 异常处理语句ME与lasterr 4. while 循环语句5. for 循环语句break和continue…...

MIT 6.S081 2020 Lab6 Copy-on-Write Fork for xv6 个人全流程

文章目录 零、写在前面一、Implement copy-on write1.1 说明1.2 实现1.2.1 延迟复制与释放1.2.2 写时复制 零、写在前面 可以阅读下 《xv6 book》 的第五章中断和设备驱动。 问题 在 xv6 中,fork() 系统调用会将父进程的整个用户空间内存复制到子进程中。**如果父…...

第304个Vulnhub靶场演练攻略:digital world.local:FALL

digital world.local:FALL Vulnhub 演练 FALL (digitalworld.local: FALL) 是 Donavan 为 Vulnhub 打造的一款中型机器。这款实验室非常适合经验丰富的 CTF 玩家,他们希望在这类环境中检验自己的技能。那么,让我们开始吧,看看如何…...

Unity 模拟高度尺系统开发详解——实现拖动、范围限制、碰撞吸附与本地坐标轴选择

内容将会持续更新,有错误的地方欢迎指正,谢谢! Unity 模拟高度尺系统开发详解——实现拖动、范围限制、碰撞吸附与本地坐标轴选择 TechX 坚持将创新的科技带给世界! 拥有更好的学习体验 —— 不断努力,不断进步,不…...

万字详解RTR RTSP SDP RTCP

目录 1 RTSP1.1 RTSP基本简介1.2 RSTP架构1.3 重点内容分析 2 RTR2.1 RTR简介2.2 RTP 封装 H.2642.3 RTP 解封装 H.2642.4 RTP封装 AAC2.5 RTP解封装AAC 3 SDP3.1 基础概念3.2 SDP协议示例解析3.3 重点知识 4 RTCP4.1 RTCP基础概念4.2 重点 5 总结 1 RTSP 1.1 RTSP基本简介 一…...

云服务器如何自动更新系统并保持安全?

云服务器自动更新系统是保障安全、修补漏洞的重要措施。下面是常见 Linux 系统(如 Ubuntu、Debian、CentOS)和 Windows 服务器自动更新的做法和建议: 1. Linux 云服务器自动更新及安全维护 Ubuntu / Debian 系统 手动更新命令 sudo apt up…...

训练中常见的运动强度分类

概述 有氧运动是耐力基础,乳酸阈值是耐力突破的关键,提升乳酸阈值可以延缓疲劳,无氧运动侧重速度和力量,混氧和最大摄氧量用于细化训练强度和评估潜力。 分类强度供能系统乳酸浓度训练目标有氧运动低(60%-80% HR&…...

java 递归地复制文件夹及其所有子文件夹和文件

java 递归地复制文件夹及其所有子文件夹和文件 根据你的需求,下面是一个 Java 代码示例,用于递归地复制文件夹及其所有子文件夹和文件。由于你提到文件夹是数据层面的,这里假设你可以通过 folderById 来获取文件夹的相关信息,并且…...

[paddle]paddle2onnx无法转换Paddle3.0.0的json格式paddle inference模型

使用PDX 3.0rc1 训练时序缺陷检测后导出的模型无法转换 Informations (please complete the following information): Inference engine for deployment: PD INFERENCE 3.0-->onnxruntime Why convert to onnx:在端侧设备上部署 Paddle2ONNX Version: 1.3.1 解…...

React项目在ios和安卓端要做一个渐变色背景,用css不支持,可使用react-native-linear-gradient

以上有个模块是灰色逐渐到白的背景色过渡 如果是css,以下代码就直接搞定 background: linear-gradient(180deg, #F6F6F6 0%, #FFF 100%);但是在RN中不支持这种写法,那应该写呢? 1.引入react-native-linear-gradient插件,我使用的是…...

【数据分析】特征工程-特征选择

【数据分析】特征工程-特征选择 (一)方差过滤法1.1 消除方差为0的特征1.2 保留一半的特征1.3 特征是二分类时 (二)相关性过滤法2.1 卡方过滤2.2 F检验2.3 互信息法 (三)其他3.1 包装法3.2 嵌入法3.3 衍生特…...

第4节 Node.js NPM 使用介绍

本文介绍了 Node.js 中 NPM 的使用,我们先来了解什么是 NPM。 NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种: 允许用户从NPM服务器下载别人编写的第三方包到本地使用。允许…...

RK3399 Android7.1增加应用安装白名单机制

通过设置应用包名白名单的方式限制未授权的应用软件安装。 diff --git a/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java b/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java index af9a533..ca…...

uni-app 安卓消失的字符去哪里了?maxLength失效了!

前情提要 皮一下~这个标题我还蛮喜欢的嘿嘿嘿【附上一个自行思考的猥琐的笑容】 前段时间不是在开发uni-app的一个小应用嘛,然后今天测试发现,有一个地方在苹果是没有问题的,但是在安卓上出现了问题,附上安卓的截图 在这里我是有限制maxLength=50的,而且,赋值字符串到字…...