按 Enter 键跳转到正文

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 数据源

  1. 进入 Configuration > Data Sources > Add data source。
  2. 选择 Prometheus,填写 URL http://<PROMETHEUS_IP>:9090。

5.3 导入仪表盘

  1. 进入 Dashboards > Import。
  2. 输入仪表盘 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 数据源

  1. 进入设置:点击左侧侧边栏的 Connections -> Data sources
  2. 添加数据源:点击 Add data source 按钮。
  3. 选择 Prometheus:在列表中选择 Prometheus
  4. 配置 URL
    1. 如果 Prometheus 和 Grafana 在同一个 Docker 网络:填写 http://prometheus:9090。
    2. 如果在同一台机器但不在同一个 Docker 网络:填写 http://宿主机内网IP:9090。
    3. 注意:如果你的 Prometheus 开启了 Basic Auth,请在下方的 Authentication 开启 Basic Auth 并输入账号密码。
  5. 保存测试:滚动到底部点击 Save & test。如果显示绿色对勾“Successfully queried the Prometheus API”,说明连接成功。

第二步:导入现成的仪表盘 (Dashboards)

  1. 进入导入页面:点击左侧菜单的 Dashboards,然后点击右侧的 New -> Import。
  2. 输入 ID 导入:在 “Import via grafana.com” 输入框中输入以下经典 ID,然后点击 Load:
    1. 1860
    2. 监控 MySQL:输入 7362 (MySQL Overview) 或 12132。
    3. 监控 Redis:输入 11835 (Redis Dashboard for Prometheus)。
    4. 监控宿主机 (CPU/内存):输入 1860 (Node Exporter Full)。
  3. 配置数据源:在导入页面的下拉框中选择你刚才第一步创建的 Prometheus 数据源。
  4. 完成:点击 Import,炫酷的图表就会立即显示出来。
  5. 如果出现卡顿可以尝试增加资源 docker update –memory 256m –memory-swap 256m grafana

如果需要更换密码

1docker exec -it grafana grafana-cli admin reset-admin-password 新密码

注意事项:

原生 Prometheus 没有任何内置的登录鉴权功能。 官方的设计哲学是:Prometheus 应该运行在受信任的内网环境中,安全性由网络策略(防火墙)或反向代理来负责。

如果你的 9090 端口直接暴露在公网,任何人都可以通过浏览器查看你的监控指标、甚至通过 API 接口关掉你的 Prometheus 服务。

发表评论