【Prometheus】Grafana、Alertmanager集成

发布于:2025-07-06 ⋅ 阅读:(19) ⋅ 点赞:(0)

为了进一步增强完善监控系统,集成 Grafana、Alertmanager 和持久化存储是非常好的选择。以下是每个组件的集成步骤:

1. 集成 Grafana

Grafana 是一个开源的分析和监控平台,可以与 Prometheus 完美集成。

下载并安装 Grafana
cd /opt
sudo wget https://dl.grafana.com/oss/release/grafana-10.2.0.linux-amd64.tar.gz
sudo tar -zxvf grafana-10.2.0.linux-amd64.tar.gz
sudo mv grafana-10.2.0 grafana
启动 Grafana
cd /opt/grafana
./bin/grafana-server web
# 或后台启动
nohup ./bin/grafana-server web > /var/log/grafana.log 2>&1 &

默认情况下,Grafana 将在 http://localhost:3000 上运行,登录凭据是 admin/admin

在 Grafana 中添加 Prometheus 数据源
  1. 登录 Grafana Web UI。

  2. 导航到“Configuration” > “Data Sources”。

  3. 点击“Add data source”,然后选择 Prometheus。

  4. 在 URL 字段中输入你的 Prometheus 实例地址(例如:http://localhost:9090)。
    在这里插入图片描述

  5. 点击“Save & Test”。

2. 集成 Alertmanager

Alertmanager 处理由 Prometheus 发出的警报,并将它们发送给指定的通知接收器。

下载并安装 Alertmanager
cd /opt
sudo wget https://github.com/prometheus/alertmanager/releases/download/v0.26.0/alertmanager-0.26.0.linux-amd64.tar.gz
sudo tar -zxvf alertmanager-0.26.0.linux-amd64.tar.gz
sudo mv alertmanager-0.26.0.linux-amd64 alertmanager
配置 Alertmanager

编辑 simple.yml 文件来配置通知方式(如电子邮件、Slack等)。

global:
  resolve_timeout: 5m
route:
  receiver: 'default-receiver'
receivers:
- name: 'default-receiver'
  email_configs:
  - to: 'your-email@example.com' 
    from: 'alertmanager@example.com'
    smarthost: 'smtp.example.com:587' # smtp.163.com:465
    auth_username: 'user' # 邮箱地址
    auth_password: 'password'

在这里插入图片描述

启动 Alertmanager
cd /opt/alertmanager
./alertmanager --config.file=simple.yml

默认监听端口为 9093,可以通过浏览器访问 http://<ECS_IP>:9093 查看 Alertmanager 页面。

配置 Prometheus 使用 Alertmanager

编辑 Prometheus 的配置文件 prometheus.yml 添加以下内容:

alerting:
  alertmanagers:
  - static_configs:
    - targets: ['localhost:9093']

rule_files:
  - "alert_rules.yml"  # 这里是你定义告警规则的文件路径

确保你已经创建了 alert_rules.yml 并定义了一些告警规则。
alert_rules.yml示例:

groups:
  - name: instance-health
    rules:
      # 实例宕机告警(持续5分钟无心跳)
      - alert: InstanceDown
        expr: up == 0
        for: 5m
        labels:
          severity: page
        annotations:
          summary: "Instance {{ $labels.instance }} 已离线"
          description: "Prometheus 无法抓取实例 {{ $labels.instance }} 超过 5 分钟"

      # 高CPU使用率告警(适用于node_cpu_seconds_total指标)
      - alert: HighCpuUsage
        expr: (100 - (avg by (instance) (rate(node_cpu_seconds_total{mode!="idle"}[5m])) * 100)) > 80
        for: 2m
        labels:
          severity: warning
        annotations:
          summary: "实例 {{ $labels.instance }} CPU 使用率过高"
          description: "CPU 使用率超过 80% (当前值: {{ $value }}%)"

      # 高内存使用率告警
      - alert: HighMemoryUsage
        expr: (node_memory_MemTotal_bytes - node_memory_MemFree_bytes - node_memory_Buffers_bytes - node_memory_Cached_bytes) / node_memory_MemTotal_bytes * 100 > 80
        for: 2m
        labels:
          severity: warning
        annotations:
          summary: "实例 {{ $labels.instance }} 内存使用率过高"
          description: "内存使用率超过 80% (当前值: {{ $value }}%)"

      # 磁盘空间低告警(根分区)
      - alert: DiskWillFillSoon
        expr: (node_disk_io_time_seconds_total{device!~"loop.*|ram.*"} offset 5m) < (node_disk_io_time_seconds_total{device!~"loop.*|ram.*"})
        for: 10m
        labels:
          severity: warning
        annotations:
          summary: "实例 {{ $labels.instance }} 磁盘即将填满"
          description: "检测到磁盘写入速率下降,可能磁盘已满"

      # Pushgateway 数据未更新(长时间未推送)
      - alert: PushgatewayMissingData
        expr: absent(push_time_seconds{job="some_job"})
        for: 10m
        labels:
          severity: warning
        annotations:
          summary: "Pushgateway 上 job=some_job 的数据未更新"
          description: "Pushgateway 没有接收到 job=some_job 的最新数据,请检查是否任务失败或未推送"
      - alert: FlinkTest
        expr: (flink_taskmanager_job_task_operator_countgroup_failedjson{}) > 80
        for: 2m
        labels:
          severity: warning
        annotations:
          summary: "实例 {{ $labels.deploymentId }} failedjson 过高"
          description: "failedjson超过 80 (当前值: {{ $value }}%)"
验证告警是否生效

启动 Prometheus 和 Alertmanager。
登录 Prometheus Web UI(默认地址:http://<ECS_IP>:9090)。
导航到 “Alerts” 页面查看告警状态。
在这里插入图片描述
登录 Alertmanager Web UI(默认地址:http://<ECS_IP>:9093)查看是否收到告警通知
在这里插入图片描述
登录邮箱,查看是否有收到邮件
在这里插入图片描述

3. 持久化存储

对于 Prometheus 来说,持久化数据可以通过本地磁盘或远程存储解决方案实现。这里我们介绍如何使用本地磁盘进行简单持久化。

修改 Prometheus 的启动命令以指定数据目录:

./prometheus --config.file=prometheus.yml --storage.tsdb.path="/data/prometheus" --web.listen-address=:9090

其中 /data/prometheus 是你希望保存 Prometheus 数据的目录,请确保该目录具有适当的权限以便 Prometheus 进程能够读写。

此外,对于更高级的持久化需求,比如高可用性设置或长期存储,可以考虑使用 Thanos 或 Cortex 等远程存储解决方案。

通过以上步骤,你应该能够成功地将 Grafana、Alertmanager 和持久化存储整合进你的监控体系中。