首页 电商直播

Prometheus+Alertmanager 联动钉钉告警:实战配置与深度避坑

分类:电商直播
字数: (5476)
阅读: (5591)
内容摘要:Prometheus+Alertmanager 联动钉钉告警:实战配置与深度避坑,

在云原生架构中,监控告警是至关重要的一环。Prometheus 作为一款强大的时序数据库,结合 Alertmanager 可以实现灵活的告警管理。本文将深入探讨如何配置 Prometheus+Alertmanager,并通过钉钉机器人实现告警通知,提升运维效率。尤其是在复杂的微服务架构中,例如使用了 Kubernetes 进行容器编排,对服务可用性和性能的监控显得尤为重要。当服务出现故障,例如 CPU 使用率过高、内存溢出、响应时间超长等情况,能够第一时间收到告警信息,对于快速恢复服务至关重要。

1. 环境准备与组件安装

首先,我们需要安装 Prometheus 和 Alertmanager。 这里我们采用 Docker Compose 部署,方便快捷。

version: '3'
services:
  prometheus:
    image: prom/prometheus:v2.45.0 # 使用稳定版本
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml # 挂载 Prometheus 配置文件
    restart: always # 服务故障后自动重启

  alertmanager:
    image: prom/alertmanager:v0.26.0 # 使用稳定版本
    ports:
      - "9093:9093"
    volumes:
      - ./alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml # 挂载 Alertmanager 配置文件
    restart: always # 服务故障后自动重启

确保宿主机安装了 Docker 和 Docker Compose。然后,创建 prometheusalertmanager 目录,并分别放入 prometheus.ymlalertmanager.yml 配置文件。

Prometheus+Alertmanager 联动钉钉告警:实战配置与深度避坑

2. Prometheus 配置

prometheus.yml 中,我们需要配置 Prometheus 的数据抓取规则。例如,我们可以监控 Node Exporter 暴露的服务器指标:

global:
  scrape_interval:     15s # 抓取数据的间隔
  evaluation_interval: 15s # 规则评估的间隔

alerting:
  alertmanagers:
  - static_configs:
    - targets:
      - alertmanager:9093 # Alertmanager 的地址

scrape_configs:
  - job_name: 'node_exporter' # 监控 Node Exporter
    static_configs:
      - targets: ['node_exporter:9100'] # Node Exporter 的地址

确保安装并运行了 Node Exporter,并将 node_exporter:9100 替换为实际的 Node Exporter 地址。

Prometheus+Alertmanager 联动钉钉告警:实战配置与深度避坑

3. Alertmanager 配置与钉钉集成

alertmanager.yml 文件是配置 Alertmanager 的核心。我们需要配置路由规则,将告警发送到钉钉机器人。

global:
  resolve_timeout: 5m # 告警恢复的超时时间

route:
  group_by: ['alertname'] # 根据 alertname 进行分组
  group_wait: 30s # 等待多久发送告警
  group_interval: 5m # 告警发送的间隔
  repeat_interval: 12h # 告警重复发送的间隔
  receiver: 'dingtalk' # 告警接收者

receivers:
- name: 'dingtalk'
  webhook_configs:
  - url: 'https://oapi.dingtalk.com/robot/send?access_token=YOUR_DINGTALK_TOKEN' # 钉钉机器人的 Webhook 地址,替换成你自己的 token
    send_resolved: true # 告警恢复后是否发送通知

templates:
- '/etc/alertmanager/templates/dingtalk.tmpl' # 模板文件路径

注意:YOUR_DINGTALK_TOKEN 替换为你的钉钉机器人 Token。可以在钉钉群中创建自定义机器人,获取 Webhook 地址。

Prometheus+Alertmanager 联动钉钉告警:实战配置与深度避坑

还需要创建一个 dingtalk.tmpl 模板文件,用于自定义钉钉消息的格式。

{{ define "dingtalk.content" }}
{{ if gt (len .Alerts.Firing) 0 }}
  **{{ .CommonAnnotations.summary }}**
  {{ range .Alerts.Firing }}
    - 告警级别: {{ .Labels.severity }}
    - 告警实例: {{ .Labels.instance }}
    - 告警详情: {{ .Annotations.description }}
    - 开始时间: {{ .StartsAt.Format "2006-01-02 15:04:05" }}
  {{ end }}
{{ end }}
{{ if gt (len .Alerts.Resolved) 0 }}
  **告警已恢复**
  {{ range .Alerts.Resolved }}
    - 告警级别: {{ .Labels.severity }}
    - 告警实例: {{ .Labels.instance }}
    - 告警详情: {{ .Annotations.description }}
    - 结束时间: {{ .EndsAt.Format "2006-01-02 15:04:05" }}
  {{ end }}
{{ end }}
{{ end }}

{{ define "dingtalk.text" }}
{
  "msgtype": "text",
  "text": {
    "content": "{{ template \"dingtalk.content\" . }}"
  }
}
{{ end }}

{{ define "dingtalk.markdown" }}
{
  "msgtype": "markdown",
  "markdown": {
    "title": "Prometheus告警",
    "text": "{{ template \"dingtalk.content\" . }}"
  }
}
{{ end }}

{{ define "dingtalk.default" }}{{ template "dingtalk.markdown" . }}{{ end }}

alertmanager.yml 中指定模板路径,例如 /etc/alertmanager/templates/dingtalk.tmpl。确保 Alertmanager 能够读取到该文件。

Prometheus+Alertmanager 联动钉钉告警:实战配置与深度避坑

4. Prometheus 告警规则配置

prometheus.yml 中,我们需要配置告警规则,当满足条件时,Prometheus 会将告警发送给 Alertmanager。

rules:
- alert: HighCPUUsage # 告警名称
  expr: 100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) < 10 # CPU 使用率超过 90%
  for: 1m # 持续 1 分钟触发告警
  labels:
    severity: critical # 告警级别
  annotations:
    summary: "CPU 使用率过高 (实例 {{ $labels.instance }})" # 告警摘要
    description: "CPU 使用率超过 90%,请检查服务器性能。当前值: {{ $value }}"

这个规则表示,当 CPU 使用率持续 1 分钟超过 90% 时,会触发一个 HighCPUUsage 告警,告警级别为 critical

5. 常见问题与避坑指南

  • 钉钉机器人收不到告警:
    • 检查钉钉机器人 Token 是否正确。
    • 检查 Alertmanager 的网络配置,确保能够访问钉钉 API。
    • 检查 Alertmanager 日志,查看是否有错误信息。
  • 告警消息格式不正确:
    • 检查 dingtalk.tmpl 模板文件是否正确。
    • 检查 Alertmanager 的配置文件,确保模板路径正确。
  • 告警频繁触发:
    • 调整告警规则的阈值和持续时间。
    • 优化代码,降低资源消耗。
  • Alertmanager 启动失败:
    • 检查 alertmanager.yml 文件语法是否正确。
    • 检查端口是否被占用。

在实际应用中,可以结合 Grafana 等可视化工具,更加直观地展示监控数据,并设置更加复杂的告警规则,打造完善的监控告警体系。例如,可以使用 Grafana 展示服务器的 CPU、内存、磁盘 IO 等指标,并根据业务需求,设置针对特定服务的告警规则。同时,可以结合日志分析工具,例如 ELK Stack,对日志进行监控和分析,及时发现潜在的问题。

通过以上步骤,我们就可以实现 Prometheus+Alertmanager 联动钉钉告警,及时掌握系统运行状态,保障服务的稳定性和可靠性。

Prometheus+Alertmanager 联动钉钉告警:实战配置与深度避坑

转载请注明出处: 半杯凉茶

本文的链接地址: http://m.acea1.store/blog/064314.SHTML

本文最后 发布于2026-04-14 10:11:37,已经过了13天没有更新,若内容或图片 失效,请留言反馈

()
您可能对以下文章感兴趣
评论
  • 躺平青年 3 天前
    告警模板那块写的很好,我之前都是直接用默认的,告警信息太少了。
  • 扬州炒饭 15 小时前
    学习了,配置钉钉报警这块一直不太稳定,按照这个配置试一下。