news 2026/8/8 12:18:40

Prometheus + Grafana + AlertManager 监控体系搭建:Docker 一把梭

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Prometheus + Grafana + AlertManager 监控体系搭建:Docker 一把梭

📝 摘要:基于 Docker 一把梭搭建 Prometheus + Grafana + AlertManager + PrometheusAlert 完整监控告警体系,覆盖主机、Redis、MySQL、ES、Kafka 等 15 种组件的指标采集与可视化,打通告警路由、抑制去重到飞书、钉钉、企微通知,附全部 docker run 命令与 Grafana 看板 ID,四个容器半小时落地。

服务器挂了你不知道、接口慢了没人发现、Redis 被打爆了才后知后觉……

这些问题的根源只有一个:没有监控

本文基于 Docker,手把手搭建一套完整的监控告警体系:Prometheus(指标采集 + 存储)+ AlertManager(告警路由)+ PrometheusAlert(飞书/钉钉通知)+ Grafana(看板),所有命令可直接复制执行。


一、架构总览

组件作用端口
Prometheus指标采集、存储、告警规则评估9090
AlertManager告警路由、分组、抑制、静默9093
PrometheusAlert将告警转发到飞书/钉钉/企微8087
Grafana数据可视化看板3000

二、部署 Prometheus

1. 创建目录

mkdir-p/data/prometheus/{config,data,rules}# Prometheus 容器内以 nobody(65534) 运行chown-R65534:65534 /data/prometheus/data

2. 配置文件

创建/data/prometheus/config/prometheus.yml

global:scrape_interval:15s# 告警配置alerting:alertmanagers:-static_configs:-targets:-10.0.1.1:9093# 告警规则文件rule_files:-"/prometheus/rules/*.yml"# 采集配置scrape_configs:# ---- Prometheus 自身 -----job_name:'prometheus'static_configs:-targets:['10.0.1.1:9090']# ---- 应用监控(Spring Boot Actuator) -----job_name:'app'scrape_interval:1mmetrics_path:'/actuator/prometheus'static_configs:-targets:['10.0.1.2:7000','10.0.1.2:8000']# ---- 主机监控(Node Exporter) -----job_name:'node-exporter'static_configs:-targets:['10.0.1.1:9100']labels:instance:'mw-server'nodename:'mw-server'-targets:['10.0.1.2:9100']labels:instance:'api-server'nodename:'api-server'-targets:['10.0.1.3:9100']labels:instance:'bd-server'nodename:'bd-server'# ---- Redis Cluster(每个节点一个 Exporter) -----job_name:'redis-cluster-1'static_configs:-targets:['10.0.1.1:9121']labels:{instance:'redis1:6379'}-job_name:'redis-cluster-2'static_configs:-targets:['10.0.1.1:9122']labels:{instance:'redis2:6380'}-job_name:'redis-cluster-3'static_configs:-targets:['10.0.1.1:9123']labels:{instance:'redis3:6381'}# ... 根据实际节点数继续添加# ---- MySQL -----job_name:'mysql'static_configs:-targets:['10.0.1.1:9104']labels:{instance:'master'}# ---- MongoDB -----job_name:'mongodb'static_configs:-targets:['10.0.1.1:9220']labels:{instance:'mongo-primary'}# ---- Elasticsearch -----job_name:'elasticsearch'scrape_interval:60sscrape_timeout:30sstatic_configs:-targets:['10.0.1.1:9114']# ---- ClickHouse -----job_name:'clickhouse'static_configs:-targets:['10.0.1.3:9363']# ---- RocketMQ -----job_name:'rocketmq'static_configs:-targets:['10.0.1.1:5557']# ---- Kafka -----job_name:'kafka-exporter'static_configs:-targets:['10.0.1.3:9308']# ---- ZooKeeper -----job_name:'zookeeper'static_configs:-targets:['10.0.1.1:9141']metric_relabel_configs:-source_labels:[zk_host]target_label:instance# ---- Flink -----job_name:'flink-jm'static_configs:-targets:['10.0.1.3:9020']labels:{group:jm}-job_name:'flink-tm'static_configs:-targets:['10.0.1.3:9021']labels:{group:tm}# ---- DolphinScheduler -----job_name:'dolphinscheduler'metrics_path:'/dolphinscheduler/actuator/prometheus'static_configs:-targets:['10.0.1.3:12345']labels:{service:dolphinscheduler}metric_relabel_configs:-source_labels:[application]target_label:app-regex:'application'action:labeldrop# ---- Jenkins -----job_name:'jenkins'metrics_path:'/prometheus/'static_configs:-targets:['10.0.1.4:12123']# ---- AlertManager 自身 -----job_name:'alertmanager'static_configs:-targets:['10.0.1.1:9093']# ---- PrometheusAlert 自身 -----job_name:'prometheusalert'static_configs:-targets:['10.0.1.1:8087']

这份配置覆盖了15 种组件的监控,按需保留或删除即可。

各 Exporter 的部署方式不在本文展开(每个都是一条docker run),可参考文末系列文章中各中间件的专项搭建指南。

3. 告警规则示例

创建/data/prometheus/rules/basic-rules.yml

groups:-name:基础告警rules:-alert:CPU 使用率过高expr:100-(avg by (instance)(irate(node_cpu_seconds_total{mode="idle"}[5m]))) * 100>90for:1mlabels:severity:warningannotations:summary:"{{ $labels.instance }} CPU 使用率 {{ printf \"%.1f\" $value }}%"description:"CPU 使用率超过 90%,持续 1 分钟"

更多告警规则可参考系列文章中 Redis、ZooKeeper、RocketMQ 的专项告警配置。

4. 启动 Prometheus

dockerrun-d\--name=prometheus\-p9090:9090\--restart=always\-v/data/prometheus/config/prometheus.yml:/etc/prometheus/prometheus.yml\-v/data/prometheus/data:/prometheus/data\-v/data/prometheus/rules:/prometheus/rules\prom/prometheus:v3.5.0\--config.file=/etc/prometheus/prometheus.yml\--storage.tsdb.path=/prometheus/data\--web.enable-lifecycle

验证:

# 访问 Web UIcurlhttp://localhost:9090/-/healthy# 输出 Prometheus Server is Healthy# 查看已注册的 targetscurl-shttp://localhost:9090/api/v1/targets|python3-mjson.tool|head-20

--web.enable-lifecycle开启后可以通过curl -X POST http://localhost:9090/-/reload热加载配置,不用重启容器。


三、部署 AlertManager

AlertManager 负责将 Prometheus 触发的告警进行分组、路由、抑制,然后转发给通知渠道。

1. 配置文件

创建/data/prometheus/config/alertmanager.yml

global:resolve_timeout:5mroute:receiver:'default-receiver'group_by:['alertname','job','severity']group_wait:30s# 新分组首次发送前等待group_interval:5m# 同一分组内告警发送间隔repeat_interval:3h# 重复告警最小间隔(防刷屏)routes:# critical 级别单独处理,缩短重复间隔-match:severity:criticalreceiver:'notify-critical'repeat_interval:1hreceivers:# 默认接收器:通过 PrometheusAlert 转发到飞书-name:'default-receiver'webhook_configs:-url:'http://10.0.1.1:8087/prometheusalert?type=fs&tpl=prometheus-fs&fsurl=https://open.feishu.cn/open-apis/bot/v2/hook/YOUR_WEBHOOK_TOKEN&at=all'send_resolved:true# Critical 告警:同样走 PrometheusAlert,缩短重复间隔-name:'notify-critical'webhook_configs:-url:'http://10.0.1.1:8087/prometheusalert?type=fs&tpl=prometheus-fs&fsurl=https://open.feishu.cn/open-apis/bot/v2/hook/YOUR_WEBHOOK_TOKEN&at=all'send_resolved:true# 抑制规则:同一 instance 出现 critical 时,抑制 warninginhibit_rules:-source_match:severity:'critical'target_match:severity:'warning'equal:['instance']

2. 启动

dockerrun-d\--namealertmanager\-p9093:9093\--restart=always\-v/data/prometheus/config/alertmanager.yml:/etc/alertmanager/alertmanager.yml\prom/alertmanager\--config.file=/etc/alertmanager/alertmanager.yml\--web.external-url=http://10.0.1.1:9093

验证:

curlhttp://localhost:9093/-/healthy

四、部署 PrometheusAlert(飞书/钉钉通知)

AlertManager 原生只支持邮件和 Webhook,要发飞书/钉钉/企微,需要一个消息转发中间件。PrometheusAlert 就是干这个的。

1. 启动

# 先启动一次,拷贝 db 文件(模板数据)dockerrun-d\--nameprometheusalert-init\-p8087:8080\-ePA_LOGIN_USER=admin\-ePA_LOGIN_PASSWORD=YourPassword\-ePA_TITLE=Prometheus告警\-ePA_OPEN_FEISHU=1\-ePA_FSURL="https://open.feishu.cn/open-apis/bot/v2/hook/YOUR_WEBHOOK_TOKEN"\--restart=always\feiyu563/prometheus-alert:latest# 拷贝 db 数据到宿主机,实现持久化mkdir-p/data/PrometheusAlertdockercpprometheusalert-init:/app/db /data/PrometheusAlert/dbdockerrm-fprometheusalert-init# 正式启动(挂载 db 目录)dockerrun-d\--nameprometheusalert\-p8087:8080\-ePA_LOGIN_USER=admin\-ePA_LOGIN_PASSWORD=YourPassword\-ePA_TITLE=Prometheus告警\-ePA_OPEN_FEISHU=1\-ePA_FSURL="https://open.feishu.cn/open-apis/bot/v2/hook/YOUR_WEBHOOK_TOKEN"\-v/data/PrometheusAlert/db:/app/db\--restart=always\feiyu563/prometheus-alert:latest

2. 验证

访问http://10.0.1.1:8087,用 admin / YourPassword 登录,可以管理告警模板。

告警实例:


五、部署 Grafana

1. 创建目录

mkdir-p/data/grafana/data# Grafana 容器内以 uid 472 运行chown-R472:472 /data/grafana/data

2. 启动

dockerrun-d\--namegrafana\-p3000:3000\--restart=always\-eTZ=Asia/Shanghai\-eGF_SECURITY_ADMIN_PASSWORD=YourPassword\-v/data/grafana/data:/var/lib/grafana\grafana/grafana:latest

3. 配置数据源

  1. 访问http://10.0.1.1:3000,用admin/YourPassword登录
  2. 左侧菜单 → Connections → Data sources → Add data source
  3. 选择Prometheus
  4. URL 填http://10.0.1.1:9090
  5. 点击Save & Test

4. 导入看板

推荐的 Dashboard ID:

监控目标Dashboard ID说明
主机(Node Exporter)1860最经典的主机监控看板
Redis11835Redis 集群看板
MySQL14057MySQL 看板
MongoDB12079MongoDB 看板
Elasticsearch2322ES 集群看板
RocketMQ14612RocketMQ 看板
ClickHouse13606ClickHouse 看板
Spring Boot4701应用 JVM + HTTP 看板
Kafka21078Kafka 看板
Flink14911Flink 看板
DolphinScheduler24841调度器看板

导入方式:仪表板 → 新建 →导入→ 输入 Dashboard ID → 加载 → 选择 Prometheus 数据源 → Import。

实例:


六、完整部署清单

步骤组件命令验证
1Prometheusdocker run ... prom/prometheus:v3.5.0curl localhost:9090/-/healthy
2AlertManagerdocker run ... prom/alertmanagercurl localhost:9093/-/healthy
3PrometheusAlertdocker run ... feiyu563/prometheus-alert访问localhost:8087
4Grafanadocker run ... grafana/grafana访问localhost:3000

四个容器,四条命令,半小时搞定一套完整的监控告警体系。

部署完只是起点,真正有用的是告警规则。各中间件的专项告警规则可参考:

  • Redis 集群从裸奔到全副武装:搭建、可视化、监控、告警、看板一条龙
  • ZooKeeper 从裸奔到全副武装:搭建、可视化、监控、告警、看板一条龙
  • RocketMQ 5.x 从裸奔到全副武装:监控、告警、看板一条龙
  • MinIO 监控一条龙:看板全是「无数据」?Prometheus + Grafana 从搭建到告警
  • Flink 1.20 基于 Docker 单机部署实战指南
  • ClickHouse 25.4 基于 Docker 单机部署实战指南
  • DolphinScheduler 挂了没人知道?Prometheus + Grafana 监控兜底方案,亲测可用
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/8 12:18:37

Prompt版本管理:AI应用开发中的工程化实践与挑战

1. 项目概述:为什么Prompt也需要版本管理?在AI应用开发,尤其是大语言模型(LLM)驱动的项目中,Prompt(提示词)早已不是一句简单的指令。它已经演变成了一个复杂的、包含系统指令、上下…

作者头像 李华
网站建设 2026/8/8 12:15:42

服务器巡检自动化框架:硬件_端口_日志_磁盘内存一键巡检+告警

服务器巡检自动化框架:硬件 / 端口 / 日志 / 磁盘内存一键巡检 + 告警 摘要 在企业级服务器运维场景中,覆盖硬件状态、服务端口、日志异常、磁盘内存的全维度巡检,是保障业务高可用的核心基础。传统人工巡检方式存在效率低下、覆盖不全、告警滞后、无法溯源等痛点,本文将…

作者头像 李华
网站建设 2026/8/8 12:15:25

信号处理与AI中的卷积的关系

一、卷积 在前面的文章中引用了知乎上的经典说明“卷积就是平移、叠加”,其物理意义就是加权叠加。卷积的数学定义如下: (f∗g)(t)∫f(τ)g(t−τ)dτ 它包含两个步骤即反转(将g(τ)变为g(-τ))和平移相乘再求和(积分…

作者头像 李华
网站建设 2026/8/8 12:15:11

罗技鼠标宏压枪脚本终极指南:5步轻松提升PUBG射击精度

罗技鼠标宏压枪脚本终极指南:5步轻松提升PUBG射击精度 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg 绝地求生(PUBG)作为一款高精度…

作者头像 李华
网站建设 2026/8/8 12:12:09

从色彩三要素到实战调色:掌握HSL与曲线工具,打造高级感照片

1. 项目概述:为什么“读懂色彩”是调色的第一步每次看到别人拍的照片,色彩通透、情绪饱满,再看看自己手机里那些要么灰蒙蒙、要么颜色怪异的照片,是不是总觉得差了点什么?你可能会想,是不是得买更贵的相机&…

作者头像 李华