为了进一步增强完善监控系统,集成 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 数据源
登录 Grafana Web UI。
导航到“Configuration” > “Data Sources”。
点击“Add data source”,然后选择 Prometheus。
在 URL 字段中输入你的 Prometheus 实例地址(例如:
http://localhost:9090
)。
点击“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 和持久化存储整合进你的监控体系中。