内容概览

模块

核心内容

01 Prometheus架构

核心组件、架构图解、与Zabbix对比

02 环境部署

二进制部署、WebUI访问

03 监控Linux主机

node-exporter部署、Prometheus配置、热加载

04 PromQL语句

数据类型、操作符、常用函数

05 Grafana展示

安装配置、数据源添加、Dashboard导入

06 监控中间件

Windows、Docker(cAdvisor)、MySQL

07 监控流程

标准化监控步骤


一、Prometheus概述

1.1 什么是Prometheus?

Prometheus是一款开源的监控系统,可以监控主流的中间件、操作系统、硬件设备、网络设备等。

对比项

Zabbix

Prometheus

强项

传统基础设施监控

容器、微服务监控

数据模型

关系型数据库

时序数据库

发现机制

手动配置/自动注册

服务发现(K8s/Consul)

查询语言

较简单

PromQL(功能强大)

1.2 Prometheus架构图

┌─────────────────────────────────────────────────────────────────┐
│                         Prometheus 架构                          │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  ┌─────────────┐      ┌─────────────┐      ┌─────────────┐      │
│  │   Grafana   │◄────►│  Prometheus │◄────►│ Alertmanager│      │
│  │  (可视化)   │      │   Server    │      │   (告警)    │      │
│  └─────────────┘      └──────┬──────┘      └─────────────┘      │
│                              │                                   │
│              ┌───────────────┼───────────────┐                   │
│              │ pull          │ pull          │ push              │
│              ▼               ▼               ▼                   │
│        ┌──────────┐    ┌──────────┐    ┌─────────────┐          │
│        │exporter  │    │exporter  │    │Pushgateway  │          │
│        │(Linux)   │    │(MySQL)   │    │(自定义监控) │          │
│        └──────────┘    └──────────┘    └─────────────┘          │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

1.3 核心组件作用

组件

作用

Prometheus Server

采集目标数据、存储时序数据、提供WebUI查询接口

Exporters

被监控端,暴露metrics指标

Grafana

将Prometheus作为数据源,提供Dashboard可视化展示

Pushgateway

支持短期临时任务推送监控数据

Alertmanager

告警功能,支持钉钉、企业微信、邮箱等

官网https://prometheus.io/

GitHubhttps://github.com/prometheus/prometheus


二、Prometheus环境部署

2.1 环境准备

主机

IP

配置

操作系统

角色

prometheus-server31

10.0.0.31

1C2G+

Ubuntu 22.04

Prometheus Server + Grafana

node-exporter41

10.0.0.41

1C1G

Ubuntu 22.04

被监控端(Linux)

node-exporter42

10.0.0.42

1C1G

Ubuntu 22.04

被监控端(Linux)

node-exporter43

10.0.0.43

1C1G

Ubuntu 22.04

被监控端(Linux)

2.2 二进制部署Prometheus

# 1. 下载软件包
wget https://github.com/prometheus/prometheus/releases/download/v3.5.3/prometheus-3.5.3.linux-amd64.tar.gz

# 2. 解压到指定目录
tar xf prometheus-3.5.3.linux-amd64.tar.gz -C /usr/local/

# 3. 运行Prometheus
cd /usr/local/prometheus-3.5.3.linux-amd64/
./prometheus

# 4. 访问WebUI
http://10.0.0.31:9090/

# 5. 卸载(直接删除目录)
rm -rf /usr/local/prometheus-3.5.3.linux-amd64/

三、Prometheus监控Linux主机

3.1 node-exporter部署

什么是node-exporter?

node-exporter是Prometheus官方开源的一款用来暴露Linux系统指标的组件,包括CPU、内存、磁盘、网络、文件系统、负载等。

# 1. 下载软件包
wget https://github.com/prometheus/node_exporter/releases/download/v1.11.1/node_exporter-1.11.1.linux-amd64.tar.gz

# 2. 解压
tar xf node_exporter-1.10.2.linux-amd64.tar.gz -C /usr/local/

# 3. 运行node-exporter
cd /usr/local/node_exporter-1.10.2.linux-amd64/
./node_exporter

# 4. 验证metrics接口
curl -s http://10.0.0.41:9100/metrics | wc -l
# 输出:1116(表示有1116个监控指标)

# 5. 卸载
rm -rf /usr/local/node_exporter-1.10.2.linux-amd64/

3.2 node-exporter

3.3 Prometheus配置监控

# 1. 在被监控端安装node-exporter(42、43同理)
# 2. 修改Prometheus配置文件
vim /oldboyedu/softwares/prometheus-2.53.4.linux-amd64/prometheus.yml
global:
  # 每间隔3秒进行数据采集,若不指定则默认为1分钟
  scrape_interval: 3s

scrape_configs:
  # 指定job任务的名称,可以自定义
  - job_name: "oldboyedu-node-exporter"
    # 访问被监控的路径
    metrics_path: "/metrics"
    # 访问被监控的协议
    scheme: "http"
    # 指定被监控端的后端地址
    static_configs:
      - targets: ["10.0.0.41:9100", "10.0.0.42:9100", "10.0.0.43:9100"]
# 3. 热加载配置文件(无需重启服务)
curl -X POST 10.0.0.31:9090/-/reload

# 4. 验证配置生效
http://10.0.0.31:9090/targets?search=

# 5. 测试查询指标
# 在Prometheus WebUI的Graph页面执行
node_cpu_seconds_total


四、PromQL语句

4.1 Prometheus数据类型

类型

说明

示例

常用场景

gauge

当前值,所见即所得

node_boot_time_seconds

CPU使用率、内存使用率

counter

单调递增计数器

prometheus_http_requests_total

请求总数、错误总数

histogram

直方图样本观测

prometheus_http_request_duration_seconds_bucket

请求延迟分布、分位值

summary

预计算的分位值

go_gc_duration_seconds

预聚合的延迟统计

数据类型详解

1. gauge(仪表盘)

# 查询节点启动时间(当前值)
node_boot_time_seconds

# 查询Go版本信息(标签更有意义)
go_info

2. counter(计数器)

# 查询QPS(每秒请求数)
rate(prometheus_http_requests_total[1m])

# 查询增量(1分钟内的请求增量)
increase(prometheus_http_requests_total[1m])

# 查询平均访问时间
prometheus_http_request_duration_seconds_sum / prometheus_http_request_duration_seconds_count

3. histogram(直方图)- 分位值查询

# 查询HTTP请求延迟的95分位值
histogram_quantile(0.95, sum(rate(prometheus_http_request_duration_seconds_bucket[1m])) by (le))

# 查询特定API的延迟分布
histogram_quantile(0.95, sum(rate(prometheus_http_request_duration_seconds_bucket{handler="/api/v1/query"}[5m])) by (le))

为什么需要分位值?

平均值会掩盖短时故障。例如:5分钟故障在24小时平均后可能被忽略,而分位值能及时发现短时异常。

4.2 PromQL操作符

# 1. 精确匹配
node_cpu_seconds_total{instance="10.0.0.42:9100", cpu="1"}

# 2. 正则匹配(=~)
node_cpu_seconds_total{instance="10.0.0.42:9100", cpu="1", mode=~"i.*"}

# 3. 取反操作(!=, !~)
node_cpu_seconds_total{instance="10.0.0.42:9100", cpu!="1", mode=~"i.*"}

# 4. 算数运算
100 / 5
10 + 20

4.3 常用函数

# 1. 计算CPU使用率(压力测试演示)
# 在42节点执行压力测试
apt -y install stress
stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout 20m

# CPU使用率计算公式
(1 - sum(increase(node_cpu_seconds_total{mode="idle"}[1m])) by (instance) 
  / sum(increase(node_cpu_seconds_total[1m])) by (instance)) * 100

# 2. 计算节点运行时间(分钟)
(time() - node_boot_time_seconds) / 60

参考链接

4.4 Prometheus WebUI痛点

痛点

说明

临时性

查询数据是临时的,关闭页面后不保存

学习成本高

需要学习PromQL语法,对新手不友好

解决方案:使用Grafana进行可视化展示


五、Grafana图形化展示

5.1 Grafana安装

# 1. 安装依赖包
apt-get install -y adduser libfontconfig1 musl

# 2. 下载Grafana
wget https://dl.grafana.com/enterprise/release/grafana-enterprise_9.5.21_amd64.deb

# 3. 安装
dpkg -i grafana-enterprise_9.5.21_amd64.deb

# 4. 启动Grafana
systemctl enable --now grafana-server

# 5. 验证端口
ss -ntl | grep 3000

# 6. 访问WebUI
http://10.0.0.31:3000/
# 默认用户名/密码:admin/admin

5.2 配置Prometheus数据源

1. 登录Grafana(首次登录需修改密码,可跳过)
2. 点击左侧菜单"Configuration" → "Data Sources"
3. 点击"Add data source" → 选择"Prometheus"
4. 配置URL:http://10.0.0.31:9090
5. 点击"Save & Test"

5.3 导入Dashboard模板,监控linux主机

1. 点击左侧菜单"+" → "Import"
2. 输入Dashboard ID(如:1860)
3. 点击"Load"
4. 选择Prometheus数据源
5. 点击"Import"

常用Dashboard模板ID

监控对象

Dashboard ID

Linux节点(Node Exporter)

1860

Windows主机

23847、14694、20763

Docker容器(cAdvisor)

10619

MySQL

14057、17320

模板查询站点https://grafana.com/grafana/dashboards


六、Prometheus监控主流中间件

6.1 监控Windows主机

# 1. 下载windows_exporter
# 下载地址:https://github.com/prometheus-community/windows_exporter/releases/download/v0.31.5/windows_exporter-0.31.5-amd64.exe

# 2. 在Windows主机运行(cmd窗口)
windows_exporter-0.31.3-amd64.exe

# 3. 验证metrics
http://10.0.0.1:9182/metrics

# 4. Prometheus配置
vim prometheus.yml
- job_name: "oldboyedu-windows-exporter"
  static_configs:
    - targets: ["10.0.0.1:9182"]
# 5. 热加载
curl -X POST 10.0.0.31:9090/-/reload

好用的模版ID

23847	
14694
20763

6.2 监控Docker容器(cAdvisor)

cAdvisor:Google开源的工具,用于监控容器资源使用情况。

# 参考链接
https://github.com/google/cadvisor

# 1. 导入cAdvisor镜像
wget http://192.168.16.253/Resources/Prometheus/images/cAdvisor/oldboyedu-cadvisor-v0.52.1.tar.gz
docker load -i oldboyedu-cadvisor-v0.52.1.tar.gz

# 2. 运行测试容器
docker run -id --name c1 alpine:3.20.2
docker run -id --name c2 alpine:3.20.2

# 3. 运行cAdvisor容器
docker run \
  --volume=/:/rootfs:ro \
  --volume=/var/run:/var/run:ro \
  --volume=/sys:/sys:ro \
  --volume=/var/lib/docker/:/var/lib/docker:ro \
  --volume=/dev/disk/:/dev/disk:ro \
  -p 18080:8080 \
  --detach=true \
  --name=cadvisor \
  --privileged \
  --device=/dev/kmsg \
  gcr.io/cadvisor/cadvisor-amd64:v0.52.1

# 4. 访问cAdvisor WebUI
http://10.0.0.41:18080/docker/
http://10.0.0.42:18080/docker/

# 5. Prometheus配置
[root@prometheus-server31 ~]# vim /oldboyedu/softwares/prometheus-2.53.4.linux-amd64/prometheus.yml  
# 添加
- job_name: "oldboyedu-docker-cadVisor"
  static_configs:
    - targets: ["10.0.0.41:18080", "10.0.0.42:18080"]
# 6. 热加载
curl -X POST 10.0.0.31:9090/-/reload

# 7. Grafana导入Dashboard 10619

cAdvisor Dashboard优化(如果容器数量数据无法正常显示):

优化项

操作

PromQL优化

count(last_over_time(container_last_seen{instance=~"$node:$port",job=~"$job",image!=""}[3s]))

Value options

将'Calculation'字段设置为'Last *'

保存Dashboard

刷新页面后需重新保存

6.3 监控MySQL

# 1. 导入MySQL镜像,在10.0.0.41
wget http://192.168.16.253/Resources/Docker/images/WordPress/oldboyedu-mysql-v8.0.36-oracle.tar.gz
docker load  < oldboyedu-mysql-v8.0.36-oracle.tar.gz 

# 2. 部署MySQL容器
docker run -d \
  --network host \
  --name mysql-server \
  --restart always \
  -e MYSQL_DATABASE=prometheus \
  -e MYSQL_USER=linux103 \
  -e MYSQL_PASSWORD=yinzhengjie \
  -e MYSQL_ALLOW_EMPTY_PASSWORD=yes \
  mysql:8.0.36-oracle \
  --character-set-server=utf8 \
  --collation-server=utf8_bin \
  --default-authentication-plugin=mysql_native_password

# 3. 创建监控用户
docker exec -it mysql-server mysql
  SHOW GRANTS FOR linux103;
  # 添加权限
  GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO linux103;
  SHOW GRANTS FOR linux103;
-- 创建监控用户并授权
CREATE USER 'linux103'@'%' IDENTIFIED BY 'yinzhengjie';
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'linux103'@'%';
GRANT ALL PRIVILEGES ON `prometheus`.* TO 'linux103'@'%';
FLUSH PRIVILEGES;
# 3. 下载并安装mysqld_exporter 在另外一台机器这里是10.0.0.42
wget http://192.168.16.253/Resources/Prometheus/softwares/mysql_exporter/mysqld_exporter-0.19.0.linux-amd64.tar.gz
tar xf mysqld_exporter-0.19.0.linux-amd64.tar.gz -C /usr/local/bin/ \
  mysqld_exporter-0.19.0.linux-amd64/mysqld_exporter --strip-components=1

# 4. 创建配置文件
cat > /root/.my.cnf << EOF
[client]
host = 10.0.0.41
port = 3306
user = linux103
password = yinzhengjie
EOF

# 5. 运行mysqld_exporter
mysqld_exporter --config.my-cnf=/root/.my.cnf

# 6. 验证metrics
curl -s http://10.0.0.42:9104/metrics | wc -l
# 输出:2569

# 7. Prometheus配置
[root@prometheus-server31 ~]# vim /oldboyedu/softwares/prometheus-2.53.4.linux-amd64/prometheus.yml 
- job_name: "oldboyedu-mysql-exporter"
  static_configs:
    - targets: ["10.0.0.42:9104"]
# 8. 热加载
curl -X POST 10.0.0.31:9090/-/reload

# 9. Grafana导入Dashboard(14057、17320)

七、Prometheus监控服务标准流程

┌─────────────────────────────────────────────────────────────────┐
│                  Prometheus 监控服务标准流程                      │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  步骤1:被监控端需要暴露metrics指标                               │
│         ↓                                                        │
│  步骤2:Prometheus Server配置要监控的目标(服务发现)             │
│         ↓                                                        │
│  步骤3:热加载配置文件(无需重启)                                 │
│         ↓                                                        │
│  步骤4:检查Prometheus WebUI验证配置是否生效                      │
│         ↓                                                        │
│  步骤5:Grafana导入Dashboard模板ID                                │
│         ↓                                                        │
│  步骤6:Grafana Dashboard出图展示                                 │
│         ↓                                                        │
│  步骤7:配置相应的告警规则(Alertmanager)                        │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

八、知识总结

模块

核心要点

Prometheus架构

Server + Exporters + Grafana + Pushgateway + Alertmanager

部署方式

二进制部署、一键脚本

node-exporter

暴露Linux系统指标(CPU、内存、磁盘、网络)

PromQL数据类型

gauge(当前值)、counter(计数器)、histogram(直方图)、summary(预计算)

PromQL常用

rate()、increase()、histogram_quantile()

Grafana

数据源配置、Dashboard导入(ID: 1860/10619/14057等)

cAdvisor

Docker容器监控

mysqld_exporter

MySQL数据库监控

windows_exporter

Windows操作系统监控

监控标准流程

暴露指标 → 配置Prometheus → 热加载 → 验证 → Grafana展示 → 告警

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐