云计算百科
云计算领域专业知识百科平台

Prometheus发现故障只是第一步,把告警送到钉钉才是真正的闭环

前言

很多团队搭建Prometheus监控的时候,都会把重点放在指标采集和可视化上。

服务器CPU、内存、磁盘、容器状态、数据库性能,各种监控大盘做得越来越漂亮。Grafana里的曲线实时跳动,看起来整个系统都尽在掌握之中。但真正经历过线上故障的人都知道,监控系统最大的价值,从来不是展示数据,而是在出现异常时第一时间通知到人。

否则再精准的监控,也只是一个高级仪表盘。

凌晨三点数据库连接数暴涨、核心业务服务异常退出、磁盘空间即将耗尽,这些问题Prometheus可能早就发现了。但如果告警只是静静躺在Alertmanager里,没有及时送到运维人员、开发人员或者值班群里,那么故障依然会继续扩大。很多线上事故并不是因为没有监控,而是因为没人及时看到告警。

对于国内企业来说,钉钉几乎已经成为日常协作的基础工具。项目沟通在钉钉、值班通知在钉钉、工作审批也在钉钉。如果Prometheus告警能够直接进入运维群、开发群甚至值班群,那么从故障发现到问题响应之间的链路就会被大幅缩短。

但实际部署时,很多人很快会发现一个问题:Alertmanager并不原生支持钉钉通知。Webhook怎么配置、机器人怎么创建、恢复告警为什么收不到、多个团队怎么分组推送,这些都是部署过程中最容易踩坑的地方。

而prometheus-webhook-dingtalk正是解决这个问题的关键组件。它负责打通Prometheus与钉钉之间的最后一公里,让监控系统真正具备及时触达和快速响应能力,把原本停留在监控平台里的告警信息,准确送到最应该收到的人手里。

downloaded-image

1.为什么将Prometheus告警推送到钉钉?

将Prometheus告警推送到钉钉,不仅是技术集成的一步,更是提升团队运维效率与系统可靠性的关键实践。以下是几个核心原因:

  • 告警触达更及时,响应更迅速
  • 钉钉作为国内企业广泛使用的即时通讯工具,几乎全员在线、消息必达。将告警直接推送至运维群或值班群,能确保问题在第一时间被看到,大幅缩短MTTR,避免小故障演变为大事故。

  • 统一告警入口,避免信息碎片化
  • 传统方式可能依赖邮件、短信、Slack等多种渠道,容易造成告警分散、遗漏或重复处理。通过钉钉集中接收所有Prometheus告警,团队可在一个平台完成告警确认、讨论与协同处置,提升协作效率。

  • 支持富文本与结构化展示,信息更清晰
  • 借助prometheus-webhook-dingtalk等中间件,告警消息可渲染为卡片式富文本,清晰展示:

    • 告警名称(如HighCPUUsage)
    • 严重等级(critical / warning)
    • 故障实例(instance=192.168.1.10:9100)
    • 触发时间与持续时长
    • 快速跳转链接(直达 Grafana或Prometheus UI)

    相比纯文本邮件,钉钉消息一目了然,减少信息解读成本。

  • 低成本、高可用的告警通道
  • 相比短信或电话告警,钉钉推送零成本、无额度限制,且依托阿里云基础设施,服务稳定可靠。对于大多数非P0级别告警,钉钉是性价比极高的通知渠道。

    2.前提条件

  • 本机已经部署prometheus和alertmanager

  • 具备一个可用的钉钉群,并拥有管理员权限

  • 可创建钉钉自定义机器人

  • 部署节点具备外网访问能力

  • Alertmanager与webhook服务网络互通

    • Alertmanager所在主机必须能通过HTTP/HTTPS访问prometheus-webhook-dingtalk服务的地址
    • 若两者部署在同一主机,注意Docker网络隔离问题(避免使用127.0.0.1,建议用宿主机IP或Docker自定义网络)。
  • 安装必要工具(用于部署与调试)
    • Docker(推荐方式部署webhook服务)或systemd(二进制部署)

    • curl / jq(用于测试API和解析JSON)

    • 文本编辑器(如vim、nano)用于编写配置文件

      示例:检查Docker是否安装

    docker –version

    3.prometheus配置alertmanager

    进入到prometheus配置文件,编辑配置文件,按照如图设置:

    image-20260325140225186

    编辑后,重启prometheus:

    systemctl restart prometheus

    4.获取钉钉Webhook URL

    打开钉钉群 → 点击右上角设置:

    image-20260325141357694

    找到智能群助手 → 添加机器人:

    image-20260325141635253

    image-20260325141712706

    添加自定义机器人:

    image-20260325141746662

    点击添加:

    image-20260325141818703

    给机器人起个名字,我这里是“prometheus告警”:

    image-20260325141957303

    设置发消息关键词,因为现在钉钉对安全严格,所以需要设置限制,,也可以设置加签或者IP地址:

    image-20260325143147879

    点击完成后,复制生成的Webhook,留着备用:

    image-20260325143249017

    5.部署prometheus-webhook-dingtalk服务

    创建配置文件dingtalk.yaml:

    cat > dingtalk.yaml <<EOF
    targets:
    webhook1:
    url: https://oapi.dingtalk.com/robot/send?access_token=你的_access_token
    EOF

    启动容器(假设配置文件在当前目录):

    docker run -d \\

    –name dingtalk-webhook \\

    -p 8060:8060 \\

    -v $(pwd)/dingtalk.yaml:/etc/prometheus-webhook-dingtalk/config.yml \\

    –restart always \\

    timonwong/prometheus-webhook-dingtalk:latest

    edb5258534ad70b0059e6ef4aece042c

    6.配置Alertmanager告警

    配置Alertmanager配置文件,配置到告警自动发送到钉钉:

    vi alertmanager.yml

    global:
    resolve_timeout: 2m

    route:
    group_by: ['alertname']
    group_wait: 10s
    group_interval: 10s
    repeat_interval: 1h
    receiver: 'dingtalk-webhook'

    receivers:
    – name: 'dingtalk-webhook'
    webhook_configs:
    – url: 'http://<你的服务器IP> :8060/dingtalk/webhook1/send'
    send_resolved: true

    systemctl restart alertmanager

    替换 <你的服务器IP> 为运行prometheus-webhook-dingtalk的主机IP(如果是本机且Alertmanager也在本机,可用127.0.0.1,但注意Docker网络)

    8b5efd3a6b5c099b9a18a08320456238

    告警成功!

    image-20260325155305070

    7.告警多个钉钉群(拓展)

    配置多个钉钉群告警,是为了实现告警的精准投递与职责分离——让不同团队(如运维、开发、安全)只接收与其相关的告警,避免信息过载,提升响应效率,并支持告警分级、环境隔离和故障升级等高级运维场景,从而构建高效、可靠、可扩展的监控告警体系。

    获取另一个群的webhook(步骤和第4章节一致)。

    配置文件dingtalk.yaml,添加两个钉钉群链接:

    vi dingtalk.yaml

    targets:
    ops-team:
    url: https://oapi.dingtalk.com/robot/send?access_token=a391180a72b3c35f9308bbe1097dd5a29ca0cc440c6f1ee33601f8d5739ff6aa
    secret: secret1
    dev-team:
    url: https://oapi.dingtalk.com/robot/send?access_token=3e373b6623264d1c71098acde924328d0e16753820a17475aa95bd6655111e04
    secret: secret2

    启动docker容器:

    docker run -d \\
    –name dingtalk-webhook \\
    -p 8060:8060 \\
    -v $(pwd)/dingtalk.yaml:/etc/prometheus-webhook-dingtalk/config.yml \\
    –restart always \\
    timonwong/prometheus-webhook-dingtalk:latest

    image-20260325155734143

    配置Alertmanager的alertmanager.yml:

    vi alertmanager.yml

    global:
    resolve_timeout: 2m

    # 主路由:所有告警走这个路径
    route:
    group_by: ['alertname']
    group_wait: 10s
    group_interval: 10s
    repeat_interval: 1h
    receiver: 'broadcast' # ← 指向一个组合 receiver

    # 定义 receivers
    receivers:
    – name: 'broadcast'
    webhook_configs:
    # 发给 ops 钉钉群
    – url: 'http://<你的服务器IP>/dingtalk/ops-team/send'
    send_resolved: true
    # 发给 dev 钉钉群
    – url: 'http://<你的服务器IP>/dingtalk/dev-team/send'
    send_resolved: true

    image-20260325160237379

    配置完成后,重启alertmanager服务:

    systemctl restart alertmanager

    image-20260325160248346

    等响应一会就可以在两个群聊中都看见告警啦!

    image-20260325155221003

    在典型的云原生监控架构中,Prometheus负责采集指标并触发告警规则,而Alertmanager则运行在独立节点上,专职处理告警的去重、分组与通知。然而,在实际部署中,我们常常面临一个现实挑战:Prometheus与Alertmanager并不在同一个局域网内——例如,Prometheus部署在企业内网或私有云环境中,而Alertmanager可能托管在另一台隔离的服务器、边缘节点,甚至临时调试机上。

    由于内网环境通常无法被外部直接访问,Prometheus默认通过HTTP向 http://:9093/api/v1/alerts推送告警时,会因网络不通而失败,导致“告警静默”,严重削弱监控系统的可靠性。此时,我们需要一种安全、轻量且无需复杂网络配置(如公网IP、端口映射、NAT穿透或 VPN)的方式来打通内外网通信。内网穿透工具Cpolar正是为此而生——它能将Alertmanager所在内网的服务,通过加密隧道暴露到公网,生成一个临时或固定的公网地址,让Prometheus无论身处何地,都能稳定推送告警。接下来,我们将演示如何借助Cpolar,轻松实现跨网络的Prometheus-Alertmanager告警链路。

    8.安装cpolar实现随时随地开发

    8.1 什么是cpolar?

    cpolar是一款安全高效的内网穿透工具,无需公网IP或复杂配置,只需一条命令,即可将本地服务器、Web服务或任意端口映射到公网,让你随时随地远程访问内网应用,特别适合开发调试、远程运维和应急部署等场景。

    8.2 部署cpolar

    cpolar 可以将你本地电脑中的服务(如 SSH、Web、数据库)映射到公网。即使你在家里或外出时,也可以通过公网地址连接回本地运行的开发环境。

    ❤️以下是安装cpolar步骤:

    使用一键脚本安装命令:

    sudo curl https://get.cpolar.sh | sh

    image-20250725104019896

    安装完成后,执行下方命令查看cpolar服务状态:(如图所示即为正常启动)

    sudo systemctl status cpolar

    22e5adfaf290a17fc3384bb296055259

    Cpolar安装和成功启动服务后,在浏览器上输入虚拟机主机IP加9200端口即:【http://ip:9200】访问Cpolar管理界面,使用Cpolar官网注册的账号登录,登录后即可看到cpolar web 配置界面,接下来在web 界面配置即可:

    打开浏览器访问本地9200端口,使用cpolar账户密码登录即可,登录后即可对隧道进行管理。

    8a6698b1bf26d64ba3645827fbfb1c29

    9.配置公网地址

    通过配置,你可以在本地WSL或Linux系统上运行SSH服务,并通过Cpolar将其映射到公网,从而实现从任意设备远程连接开发环境的目的。

    • 隧道名称:可自定义,本例使用了:alertmanager,注意不要与已有的隧道名称重复
    • 协议:tcp
    • 本地地址:9093
    • 端口类型:随机临时TCP端口
    • 地区:China Top

    image-20260325161910375

    创建成功后,打开左侧在线隧道列表,可以看到刚刚通过创建隧道生成了公网地址,接下来就可以在其他电脑或者移动端设备(异地)上,使用任意一个地址在终端中访问即可。

    • tcp 表示使用的协议类型
    • 2.tcp.cpolar.top是 Cpolar 提供的域名
    • 10409是随机分配的公网端口号

    image-20260325161931137

    在prometheus上使用不同局域网的alertmanager,修改prometheus的配置文件:

    vi prometheus.yml

    alerting:
    alertmanagers:
    – static_configs:
    – targets: ["2.tcp.cpolar.top:10409"]

    image-20260325162215809

    重启服务:

    systemctl restart alertmanager

    重启服务后,钉钉仍在告警:

    image-20260325162344783

    10.保留固定TCP公网地址

    使用cpolar为其配置TCP地址,该地址为固定地址,不会随机变化。

    image-20251210160529622

    选择区域和描述:有一个下拉菜单,当前选择的是“China VIP”。 右侧输入框,用于填写描述信息。 保留按钮:在右侧有一个橙色的“保留”按钮,点击该按钮可以保留所选的TCP地址。 列表中显示了一条已保留的TCP地址记录。

    • 地区:显示为“China Top”。

    • 地址:显示为“3.tcp.cpolar.top:11755”。

      image-20260325162516682

    登录cpolar web UI管理界面,点击左侧仪表盘的隧道管理——隧道列表,找到所要配置的隧道ssh,点击右侧的编辑。

    image-20260325162631384

    修改隧道信息,将保留成功的TCP端口配置到隧道中。

    • 端口类型:选择固定TCP端口
    • 预留的TCP地址:填写保留成功的TCP地址

    点击更新。

    image-20260325162718936

    创建完成后,打开在线隧道列表,此时可以看到随机的公网地址已经发生变化,地址名称也变成了保留和固定的TCP地址。

    image-20260325162736247

    这样我们的TCP地址就固定成功啦!

    总结

    Alertmanager真正解决的问题,并不是告警产生,而是告警分发。一个成熟的监控体系不仅要能够发现问题,更要能够确保问题被正确的人及时看到。只有当告警真正触达责任团队时,监控才算完成闭环。

    本文完整演示了Prometheus、Alertmanager、prometheus-webhook-dingtalk以及钉钉机器人的集成流程。从Webhook获取、服务部署到路由配置、多群组推送和恢复通知设置,构建了一套适用于生产环境的钉钉告警方案。对于运维团队和开发团队来说,都具有很高的落地价值。

    结合cpolar提供的公网访问能力之后,即使Prometheus和Alertmanager部署在不同网络环境中,也能够实现跨局域网通信和稳定告警推送。这对于远程办公、多地机房以及混合云架构场景来说,能够有效解决网络隔离带来的告警链路问题。

    对于很多团队来说,监控系统建设到最后,真正决定价值的往往不是图表有多漂亮,而是故障发生时能否第一时间通知到人。当Prometheus负责发现问题,Alertmanager负责组织告警,而钉钉负责把消息送到责任团队时,一套完整的运维告警体系才算真正建立起来。


    🍄程序山海,以像素为砖,以算法为梁,搭建未有的世界。一个探索和分享的有趣博主,点击了解!

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » Prometheus发现故障只是第一步,把告警送到钉钉才是真正的闭环
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!