Prometheus + Grafana + Alertmanager轻量级监控告警系统
Prometheus + Grafana + Alertmanager轻量级监控告警系统
一、工具简介与官网
| 工具 | 作用 | 官网文档地址 |
|---|---|---|
| Prometheus | 指标采集、存储与告警规则管理 | prometheus.io/docs |
| Node Exporter | 暴露服务器硬件/OS指标 | github.com/prometheus/node_exporter |
| Alertmanager | 告警聚合与通知发送 | prometheus.io/docs/alerting |
| Grafana | 数据可视化与仪表盘 | grafana.com/docs |
二、安装与配置
1. Prometheus 安装
1.1 下载与解压
1
2wget https://github.com/prometheus/prometheus/releases/download/v2.51.0/prometheus-2.51.0.linux-amd64.tar.gz
3tar xvf prometheus-2.51.0.linux-amd64.tar.gz
4cd prometheus-2.51.0.linux-amd64
1.2 配置监控目标
编辑 prometheus.yml:
1global:
2 scrape\_interval: 15s
3 evaluation\_interval: 15s
4
5scrape\_configs:
6 \- job\_name: "prometheus" \# 监控自身
7 static\_configs:
8 \- targets: \["localhost:9090"\]
9 \- job\_name: "node" \# 监控服务器
10 static\_configs:
11 \- targets: \["<NODE\_IP>:9100"\] \# 替换为Node Exporter的IP
1.3 启动 Prometheus
1./prometheus \--config.file\=prometheus.yml
访问 http://<PROMETHEUS_IP>:9090 验证。
2. Node Exporter 安装(被监控服务器)
2.1 下载与启动
1
2wget https://github.com/prometheus/node\_exporter/releases/download/v1.7.0/node\_exporter-1.7.0.linux-amd64.tar.gz
3tar xvf node\_exporter-1.7.0.linux-amd64.tar.gz
4cd node\_exporter-1.7.0.linux-amd64
5./node\_exporter
默认端口 9100,访问 http://<NODE_IP>:9100/metrics 查看指标。
2.2(可选)配置为系统服务
创建 /etc/systemd/system/node_exporter.service:
1\[Unit\]
2Description\=Node Exporter
3\[Service\]
4ExecStart\=/path/to/node\_exporter
5\[Install\]
6WantedBy\=multi-user.target
启动服务:
1
2sudo systemctl enable \--now node\_exporter
3. Alertmanager 安装
3.1 下载与解压
1
2wget https://github.com/prometheus/alertmanager/releases/download/v0.27.0/alertmanager-0.27.0.linux-amd64.tar.gz
3tar xvf alertmanager-0.27.0.linux-amd64.tar.gz
4cd alertmanager-0.27.0.linux-amd64
3.2 配置邮件告警
编辑 alertmanager.yml:
1
2route:
3 receiver: 'email-alerts'
4receivers:
5\- name: 'email-alerts'
6 email\_configs:
7 \- to: 'your-email@example.com'
8 from: 'alertmanager@example.com'
9 smarthost: 'smtp.example.com:587'
10 auth\_username: 'user@example.com'
11 auth\_password: 'your-password'
3.3 启动 Alertmanager
1
2./alertmanager \--config.file\=alertmanager.yml
访问 http://<ALERTMANAGER_IP>:9093 管理告警。
4. 配置 Prometheus 告警规则
4.1创建告警规则文件
在 Prometheus 目录下创建 alert.rules.yml:
1groups:
2- name: server-alerts
3 rules:
4 - alert: HighCPUUsage
5 expr: 100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[1m])) * 100 > 80
6 for: 5m
7 labels:
8 severity: warning
9 annotations:
10 summary: "High CPU usage on {{ $labels.instance }}"
11 description: "CPU usage is {{ $value }}%"
4.2 修改 prometheus.yml 加载规则
1rule_files:
2 - 'alert.rules.yml'
3
4alerting:
5 alertmanagers:
6 - static_configs:
7 - targets: ['<ALERTMANAGER_IP>:9093'] # 替换为 Alertmanager 的 IP
4.3 重启 Prometheus
1pkill prometheus
2./prometheus --config.file=prometheus.yml
5. 安装 Grafana
5.1 下载与安装
1wget https://dl.grafana.com/oss/release/grafana-10.4.3.linux-amd64.tar.gz
2tar xvf grafana-10.4.3.linux-amd64.tar.gz
3cd grafana-10.4.3
4./bin/grafana-server
访问 http://<GRAFANA_IP>:3000(默认账号 admin/admin)。
5.2 添加 Prometheus 数据源
- 进入 Configuration > Data Sources > Add data source。
- 选择 Prometheus,填写 URL http://<PROMETHEUS_IP>:9090。
5.3 导入仪表盘
- 进入 Dashboards > Import。
- 输入仪表盘 ID 1860(Node Exporter 官方模板),点击 Load。
三、使用示例
1. PromQL 查询
在 Prometheus 的 Web UI 中尝试查询:
* CPU 使用率:
```promql
100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[1m])) * 100
```
* 内存剩余:
```promql
node_memory_MemAvailable_bytes / 1024 / 1024 # MB
```
2. 告警测试
触发 HighCPUUsage 告警后,检查邮箱是否收到通知。
Grafana 仪表盘
优化与扩展
- 长期存储:集成 Thanos 或 VictoriaMetrics。
- 监控更多服务:
- 数据库:mysqld_exporter、postgres_exporter。
- 高可用:部署多副本 Prometheus + Alertmanager。
四、常见问题
1. Prometheus 无数据:检查 targets 页面(http://<PROMETHEUS_IP>:9090/targets)是否显示 UP。
2. 告警未触发:确认 alert.rules.yml 语法正确,且 Alertmanager 配置无误。
3. Grafana 无图表:检查数据源是否连接成功。
通过以上步骤,可以搭建一个完整的 轻量级监控告警系统,覆盖服务器指标采集、可视化、告警全流程!
五、低资源占用用Docker 部署方案及优化策略。
1# Prometheus 是资源占用大户,我们通过减少数据保留天数、限制内存以及禁用不需要的操作来压榨资源。
2docker run -d \
3 --name prometheus \
4 -p 9090:9090 \
5 -v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
6 -v /opt/prometheus/data:/prometheus \
7 --memory="256m" \
8 --cpus="0.5" \
9 prom/prometheus:v2.45.0 \
10 --config.file=/etc/prometheus/prometheus.yml \
11 --storage.tsdb.path=/prometheus \
12 --storage.tsdb.retention.time=7d \
13 --storage.tsdb.retention.size=2GB \
14 --query.max-concurrency=2 \
15 --web.enable-lifecycle
16
17#部署 Grafana (最低资源配置)
18 docker run -d \
19 --name grafana \
20 -p 3000:3000 \
21 --memory="256m" \
22 --cpus="0.3" \
23 -e "GF_SERVER_ROOT_URL=http://192.168.0.2:3000" \
24 -e "GF_LIVE_ALLOWED_ORIGINS=http://192.168.0.2:3000" \
25 -e "GF_ANALYTICS_REPORTING_ENABLED=false" \
26 -e "GF_AUTH_ANONYMOUS_ENABLED=false" \
27 grafana/grafana-oss:latest
28
29# 部署极简 Node Exporter (监控服务器 CPU/内存)
30 docker run -d \
31 --name node-exporter \
32 -p 9100:9100 \
33 --memory="30m" \
34 --net="host" \
35 --pid="host" \
36 -v "/:/host:ro,rslave" \
37 prom/node-exporter:v1.6.0 \
38 --path.rootfs=/host
39
40# mysql
41CREATE USER 'exporter'@'%' IDENTIFIED BY 'your_password';
42GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'%';
43 # 监控mysql
44docker run -d \
45 --name mysql-exporter \
46 -p 9104:9104 \
47 --memory="50m" \
48 -e DATA_SOURCE_NAME="exporter:你的密码@(内网IP:3306)/" \
49 prom/mysqld-exporter:v0.15.0
50
51# 监控redis
52docker run -d \
53 --name redis-exporter \
54 -p 9121:9121 \
55 --memory="50m" \
56 oliver006/redis_exporter:latest \
57 --redis.addr=redis://宿主机IP:6379 \
58 --redis.password=你的密码
配置 Prometheus 拉取数据
prometheus.yml 示例内容:
1global:
2 scrape_interval: 30s # 降低频率省资源
3
4scrape_configs:
5 - job_name: 'node'
6 static_configs:
7 - targets: ['localhost:9100']
8
9 - job_name: 'mysql'
10 static_configs:
11 - targets: ['宿主机IP:9104']
12
13 - job_name: 'redis'
14 static_configs:
15 - targets: ['宿主机IP:9121']
16
17 - job_name: 'hyperf'
18 static_configs:
19 - targets: ['宿主机IP:9501']
正常情况下访问ip:3000 会出现Grafana的web页面。
登录到 Grafana 后,你需要完成三个核心步骤:添加数据源(Prometheus)、导入仪表盘(Dashboard)、以及设置告警(可选)。
第一步:关联 Prometheus 数据源
- 进入设置:点击左侧侧边栏的 Connections -> Data sources。
- 添加数据源:点击 Add data source 按钮。
- 选择 Prometheus:在列表中选择 Prometheus。
- 配置 URL:
- 如果 Prometheus 和 Grafana 在同一个 Docker 网络:填写 http://prometheus:9090。
- 如果在同一台机器但不在同一个 Docker 网络:填写 http://宿主机内网IP:9090。
- 注意:如果你的 Prometheus 开启了 Basic Auth,请在下方的 Authentication 开启 Basic Auth 并输入账号密码。
- 保存测试:滚动到底部点击 Save & test。如果显示绿色对勾“Successfully queried the Prometheus API”,说明连接成功。
第二步:导入现成的仪表盘 (Dashboards)
- 进入导入页面:点击左侧菜单的 Dashboards,然后点击右侧的 New -> Import。
- 输入 ID 导入:在 “Import via grafana.com” 输入框中输入以下经典 ID,然后点击 Load:
- 1860
- 监控 MySQL:输入 7362 (MySQL Overview) 或 12132。
- 监控 Redis:输入 11835 (Redis Dashboard for Prometheus)。
- 监控宿主机 (CPU/内存):输入 1860 (Node Exporter Full)。
- 配置数据源:在导入页面的下拉框中选择你刚才第一步创建的 Prometheus 数据源。
- 完成:点击 Import,炫酷的图表就会立即显示出来。
- 如果出现卡顿可以尝试增加资源 docker update –memory 256m –memory-swap 256m grafana
如果需要更换密码
1docker exec -it grafana grafana-cli admin reset-admin-password 新密码
注意事项:
原生 Prometheus 没有任何内置的登录鉴权功能。 官方的设计哲学是:Prometheus 应该运行在受信任的内网环境中,安全性由网络策略(防火墙)或反向代理来负责。
如果你的 9090 端口直接暴露在公网,任何人都可以通过浏览器查看你的监控指标、甚至通过 API 接口关掉你的 Prometheus 服务。
发表评论