4537 字
23 分钟
监控:Prometheus 与 Grafana

监控系统需要持续采集、保存、查询、可视化和告警。

但这些命令主要解决“现在发生了什么”,而监控系统需要进一步解决“持续采集、保存、查询、可视化和告警”。

Prometheus 负责采集和存储指标,PromQL 负责查询,Grafana 负责把这些数据展示出来,并进一步形成 Dashboard 与告警。

一、Prometheus 与 Grafana 概述#

1.1 为什么需要监控系统#

在 Linux 主机上,可以先用以下命令查看当前状态:

Terminal window
top
free -h
df -h
ss -lntp
systemctl status nginx

查看当前系统状态。

但是这些工具存在一个问题:

需要人工执行

例如:

CPU = 30%

只能说明:

现在 CPU 大约是 30%

如果希望知道:

过去 24 小时 CPU 怎么变化?
什么时候开始升高?
部署之后有没有明显变化?
什么时候超过阈值?

就需要持续采集并保存数据。

因此监控系统的基本流程是:

目标主机
│
▼
指标暴露
│
▼
Prometheus
│
├── 采集
├── 存储
└── 查询
│
▼
PromQL
│
▼
Grafana
│
├── Dashboard
└── Alerting

1.2 Prometheus 是什么#

Prometheus 是开源的监控与告警工具,同时具备时间序列数据库能力。

它最核心的数据模型是:

Metric
+
Labels
+
Timestamp
+
Value

例如:

http_requests_total{
job="api",
method="GET",
status="200"
}

在某一个时间点可能对应:

15320

随着时间变化:

10000
11000
12500
13800
15320
...

这些数据就组成了一条时间序列。

Prometheus 官方将自己的核心特点概括为:

  • 多维度时间序列数据模型
  • PromQL 查询语言
  • HTTP Pull 模型
  • Service Discovery
  • 本地时间序列存储
  • 告警规则与 Alertmanager

官方文档: Prometheus Overview

1.3 Grafana 是什么#

Grafana 更偏向:

查询
+
可视化
+
Dashboard
+
告警

它本身不是 Prometheus 的替代品。

典型关系:

Prometheus
│
│ PromQL
▼
Grafana
│
├── Graph
├── Gauge
├── Table
├── Stat
└── Alert

Grafana 通过 Data Source 连接外部数据系统。

除了 Prometheus,还可以连接:

Loki
Elasticsearch
MySQL
PostgreSQL
InfluxDB
CloudWatch
...

也就是说:

Prometheus
→ 保存和提供 Metrics
Grafana
→ 查询和展示 Metrics

Grafana 官方: Grafana Data Sources

二、Prometheus 的核心数据模型#

2.1 Metric#

Metric 就是需要观察的指标。

例如:

CPU 使用率
内存使用量
磁盘空间
HTTP 请求数
HTTP 错误数
数据库连接数

可以用:

node_cpu_seconds_total
node_memory_MemAvailable_bytes
node_filesystem_avail_bytes

等指标表示。

2.2 Labels#

Prometheus 最大的特点之一就是:

Labels

例如:

http_requests_total{
method="GET",
status="200",
instance="10.0.0.10:8080"
}

同一个 Metric:

http_requests_total

通过不同的 Label 可以形成不同的时间序列:

method=GET
status=200
method=GET
status=500
method=POST
status=200

因此:

Metric Name
+
Labels

共同确定一条具体的时间序列。

Prometheus 官方数据模型: Data model

2.3 Label Cardinality#

Label 虽然非常强大,但不能无限制地增加。

例如:

user_id
request_id
session_id

如果每个请求都产生不同的 Label 值:

request_id=abc001
request_id=abc002
request_id=abc003
...

就会产生大量时间序列。

这就是:

High Cardinality

可能导致:

内存增加
磁盘增加
查询变慢

因此 Prometheus 中需要谨慎设计 Label。

一般来说:

服务名
实例
HTTP Method
HTTP Status
环境

这类有限集合更适合作为 Label。

而:

用户 ID
订单 ID
请求 ID
UUID

通常不适合直接作为高频 Metric Label。

三、Prometheus 的 Pull 模型#

3.1 Prometheus 如何获取指标#

Prometheus 最典型的工作方式是:

Exporter / Application
│
│ HTTP /metrics
▼
Prometheus

Prometheus 主动去目标地址抓取:

GET /metrics

这就是:

Pull

模型。

官方文档明确说明,Prometheus 默认通过 HTTP Pull 模型采集时间序列。

3.2 /metrics#

很多 Prometheus Exporter 会提供:

/metrics

例如:

http://10.0.0.10:9100/metrics

内容通常类似:

# HELP node_cpu_seconds_total ...
# TYPE node_cpu_seconds_total counter
node_cpu_seconds_total{
cpu="0",
mode="idle"
} 12345

因此:

/metrics
→ 向 Prometheus 暴露可采集指标

3.3 Push 与 Pull#

Prometheus 主要采用:

Pull

但也支持某些特殊场景下通过 Pushgateway 接收短生命周期任务推送的数据。

不过应该注意:

Pushgateway
≠
Prometheus 默认采集方式

对于长期运行的服务,通常优先使用:

Prometheus → Pull → Target

四、Exporter#

4.1 Exporter 是什么#

Exporter 可以理解为:

把某个系统的数据
转换成 Prometheus Metrics

例如:

Linux
│
▼
node_exporter
│
▼
/metrics
│
▼
Prometheus

不同系统可能使用不同 Exporter:

Linux
→ node_exporter
MySQL
→ mysqld_exporter
Redis
→ redis_exporter
PostgreSQL
→ postgres_exporter

这使 Prometheus 能够统一采集不同系统的指标。

4.2 node_exporter#

Linux 主机监控中最常见的是:

node_exporter

它可以暴露:

CPU
Memory
Disk
Network
Filesystem
Load
...

因此:

Linux Kernel / /proc / /sys
│
▼
node_exporter
│
▼
/metrics

官方: node_exporter

五、安装 Prometheus#

Prometheus 可以直接以二进制方式运行,也可以运行在容器中。

对于理解 Linux 运维,直接二进制部署是一个很好的学习方式:

Linux
├── prometheus
└── node_exporter

而实际项目中也常见:

Docker
├── prometheus
└── grafana

5.1 创建 Prometheus 用户#

生产环境不应该默认使用 root 运行 Prometheus。

例如:

Terminal window
sudo useradd \
--no-create-home \
--shell /usr/sbin/nologin \
prometheus

创建目录:

Terminal window
sudo mkdir -p /etc/prometheus
sudo mkdir -p /var/lib/prometheus

设置权限:

Terminal window
sudo chown -R prometheus:prometheus \
/etc/prometheus \
/var/lib/prometheus

5.2 配置文件#

Prometheus 的核心配置文件通常是:

prometheus.yml

一个最简单的配置:

global:
scrape_interval: 15s
scrape_configs:
- job_name: prometheus
static_configs:
- targets:
- localhost:9090

这里:

scrape_interval

决定采集间隔。

例如:

15s

意味着:

每 15 秒采集一次

5.3 启动 Prometheus#

直接运行:

Terminal window
prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/var/lib/prometheus

验证:

Terminal window
curl http://127.0.0.1:9090/-/ready

如果正常,Prometheus Web UI 通常可以通过:

http://<server>:9090

访问。

六、使用 systemd 管理 Prometheus#

将 Prometheus 作为长期运行的服务时,可以使用 systemd。

创建:

/etc/systemd/system/prometheus.service

例如:

[Unit]
Description=Prometheus
After=network.target
[Service]
User=prometheus
Group=prometheus
ExecStart=/usr/local/bin/prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/var/lib/prometheus
Restart=on-failure
[Install]
WantedBy=multi-user.target

重新加载:

Terminal window
sudo systemctl daemon-reload

启动:

Terminal window
sudo systemctl start prometheus

设置开机启动:

Terminal window
sudo systemctl enable prometheus

查看:

Terminal window
systemctl status prometheus

日志:

Terminal window
journalctl -u prometheus

这样就把上一篇 Linux 服务监控的知识连接到了 Prometheus:

systemd
│
▼
Prometheus Service
│
▼
Metrics

七、配置 node_exporter#

7.1 启动 node_exporter#

node_exporter 默认监听:

9100

启动后:

Terminal window
curl http://127.0.0.1:9100/metrics

如果能够看到:

node_cpu_seconds_total
node_memory_...
node_filesystem_...

说明 Exporter 工作正常。

7.2 systemd#

也可以把 node_exporter 配置成服务:

[Unit]
Description=Node Exporter
After=network.target
[Service]
User=node_exporter
Group=node_exporter
ExecStart=/usr/local/bin/node_exporter
Restart=on-failure
[Install]
WantedBy=multi-user.target

启动:

Terminal window
sudo systemctl daemon-reload
sudo systemctl enable --now node_exporter

检查:

Terminal window
systemctl status node_exporter

7.3 Prometheus 配置 Target#

修改:

scrape_configs:
- job_name: node
static_configs:
- targets:
- 127.0.0.1:9100

然后让 Prometheus 重新加载配置。

最简单的方式可以直接重启:

Terminal window
sudo systemctl restart prometheus

生产环境也可以通过 Prometheus 提供的配置 reload 机制减少中断。

八、Target 与 Job#

Prometheus 中非常重要的两个概念:

Job
Target

例如:

- job_name: linux
static_configs:
- targets:
- 192.168.1.10:9100
- 192.168.1.11:9100
- 192.168.1.12:9100

这里:

job = linux

而:

targets
=
192.168.1.10:9100
192.168.1.11:9100
192.168.1.12:9100

可以理解为:

Job
│
├── Target A
├── Target B
└── Target C

Prometheus 会根据配置定期抓取这些 Target。

九、Prometheus Targets 页面#

Prometheus 自带 Web UI。

打开:

http://<prometheus>:9090

然后查看:

Status
→ Targets

可以看到:

UP
DOWN

例如:

linux/node
192.168.1.10:9100
UP

表示:

Prometheus
↓
192.168.1.10:9100
↓
成功采集

如果:

DOWN

可能是:

Exporter 没启动
端口错误
网络不通
防火墙
DNS
目标机器故障

因此:

Prometheus Targets 页面本身就是非常重要的故障排查入口。

十、PromQL 基础#

PromQL 是 Prometheus 的查询语言。

官方文档: PromQL basics

10.1 查询 Metric#

例如:

node_load1

表示查询:

1 分钟 Load

又例如:

node_memory_MemAvailable_bytes

表示:

可用内存

10.2 Label 过滤#

例如:

node_load1{instance="192.168.1.10:9100"}

只查询某个实例。

也可以:

http_requests_total{status="500"}

查询:

HTTP 500

10.3 Rate#

很多指标是 Counter,例如:

http_requests_total

它通常只增加:

100
120
140
...

如果我们想知道:

每秒增加多少请求

可以使用:

rate(http_requests_total[5m])

意思可以理解为:

根据最近 5 分钟的数据
计算平均每秒增长速度

10.4 Sum#

例如:

sum(rate(http_requests_total[5m]))

将多个时间序列聚合到一起。

10.5 By#

例如:

sum by (status) (
rate(http_requests_total[5m])
)

可以得到:

200 → xxx req/s
404 → xxx req/s
500 → xxx req/s

因此 PromQL 的核心能力之一就是:

选择
+
过滤
+
计算
+
聚合

官方文档也将 PromQL 定义为用于实时选择和聚合时间序列数据的函数式查询语言。

十一、常用 Linux 监控 PromQL#

11.1 CPU#

CPU 使用率可以从:

node_cpu_seconds_total

计算。

常见查询:

100 - (
avg by (instance) (
rate(node_cpu_seconds_total{
mode="idle"
}[5m])
) * 100
)

结果:

CPU 使用率 %

11.2 Memory#

可以使用:

100 * (
1 -
node_memory_MemAvailable_bytes
/
node_memory_MemTotal_bytes
)

得到大致的:

Memory 使用率

这与上一篇:

Terminal window
free -h

所观察的概念对应。

11.3 Disk#

例如:

100 * (
1 -
node_filesystem_avail_bytes
/
node_filesystem_size_bytes
)

可以估算文件系统使用率。

11.4 Network#

例如统计网络接收速率:

rate(
node_network_receive_bytes_total[5m]
)

发送:

rate(
node_network_transmit_bytes_total[5m]
)

这样上一篇:

ip
ss
网络统计

就进入了持续监控体系。

十二、Prometheus 的指标类型#

Prometheus 常见 Metric Type:

Counter
Gauge
Histogram
Summary

12.1 Counter#

Counter 表示只增不减的累计值。

例如:

HTTP 请求总数
错误请求总数

类似:

100
120
150
180

适合计算:

rate(...)
increase(...)

12.2 Gauge#

Gauge 表示可以上下变化的当前值。

例如:

CPU 温度
内存使用量
并发连接数
队列长度

可能:

100
80
120
60

12.3 Histogram#

Histogram 用于观察一组数值的分布。

最常见:

HTTP 请求耗时

例如:

0.1s
0.2s
0.5s
1s
2s

Histogram 可以帮助回答:

P50
P90
P95
P99

这对于服务性能监控非常重要。

12.4 Summary#

Summary 也可以描述分布和分位数,但它与 Histogram 在计算方式和适用场景上有所区别。

初学阶段最需要掌握:

Counter
Gauge
Histogram

十三、Grafana 安装与运行#

Grafana 可以直接安装在 Linux 上,也可以运行在 Docker 中。

对于学习环境,可以使用 Docker Compose 快速启动:

services:
grafana:
image: grafana/grafana
ports:
- "3000:3000"
volumes:
- grafana-data:/var/lib/grafana
volumes:
grafana-data:

启动:

Terminal window
docker compose up -d

查看:

Terminal window
docker compose ps

日志:

Terminal window
docker compose logs grafana

访问:

http://<server>:3000

Grafana 官方安装文档: Install Grafana

十四、Grafana Data Source#

Grafana 启动之后,需要告诉它:

数据在哪里?

这就是:

Data Source

例如:

Grafana
│
▼
Prometheus
http://prometheus:9090

Grafana 官方把 Data Source 定义为连接到实际数据存储后端的连接;Grafana 可以通过这些数据源查询、可视化和告警,而不会要求把数据迁移到 Grafana 中。

添加 Prometheus:

Connections
↓
Data Sources
↓
Prometheus

填写:

URL

例如 Docker Compose 环境:

http://prometheus:9090

而不是:

http://localhost:9090

这是容器化环境中非常常见的区别:

Grafana Container
│
│
▼
prometheus:9090

这里的:

prometheus

是 Compose 网络中的服务名。

十五、Grafana Dashboard#

Dashboard 是 Grafana 最核心的使用方式之一。

可以包含多个 Panel:

┌──────────────────────────────────────┐
│ CPU Usage │
│ /\ │
│ /\ / \__ │
│ _______/ \_/ \___ │
└──────────────────────────────────────┘
┌───────────────────┐
│ Memory Usage │
│ 62% │
└───────────────────┘
┌───────────────────┐
│ Disk Usage │
│ 74% │
└───────────────────┘

一个 Linux Server Dashboard 可以包含:

CPU
Memory
Load
Disk
Network
Filesystem

15.1 Panel#

每个 Panel 通常包含:

Query
+
Visualization

例如:

node_load1

然后选择:

Time Series

就可以看到 Load 随时间变化的曲线。

15.2 常见 Visualization#

Grafana 中常见:

Time Series
Stat
Gauge
Table
Bar Chart

不同数据应该选择合适的展示方式。

例如:

CPU 趋势
→ Time Series
当前 CPU
→ Gauge / Stat
多个服务状态
→ Table / Stat

十六、Grafana 变量#

当 Dashboard 面向多个主机时,不能为每台机器建立一张完全独立的 Dashboard。

可以使用:

Variables

例如:

instance

用户选择:

192.168.1.10:9100

Dashboard 自动切换。

例如 PromQL:

node_load1{
instance="$instance"
}

于是:

一个 Dashboard
│
├── server1
├── server2
├── server3
└── server4

这对于实际运维非常重要。

十七、Prometheus 告警#

17.1 为什么需要 Alert#

监控系统不应该要求运维人员:

一直盯着 Grafana

例如:

凌晨 3 点
CPU > 95%

应该主动产生:

Alert

而不是等到早上才发现。

Prometheus 的传统告警体系可以理解为:

Prometheus
│
│ Alert Rule
▼
Alert
│
▼
Alertmanager
│
├── Grouping
├── Inhibition
├── Silence
└── Notification

Prometheus 官方明确将告警分成两个部分:Prometheus 中定义和评估告警规则,Alertmanager 负责对告警进行聚合、抑制、静默和通知。

17.2 Alert Rule#

例如:

groups:
- name: node
rules:
- alert: HighCPUUsage
expr: |
(
100 - (
avg by (instance) (
rate(node_cpu_seconds_total{
mode="idle"
}[5m])
) * 100
)
) > 90
for: 5m
labels:
severity: warning
annotations:
summary: "CPU 使用率过高"
description: "实例 {{ $labels.instance }} CPU 使用率超过 90%"

这里:

expr
→ 告警条件
for
→ 持续多久才触发
labels
→ 告警分类
annotations
→ 告警描述

17.3 为什么需要 for#

假设:

CPU = 95%

只持续:

10 秒

可能只是瞬时波动。

如果规定:

for: 5m

则表示:

条件持续 5 分钟

才触发。

这样可以减少:

瞬时波动
→ 大量误告警

十八、Alertmanager#

Alertmanager 并不是用来计算:

CPU > 90%

它主要负责收到 Prometheus 产生的告警后进行:

Grouping
Inhibition
Silencing
Routing
Notifications

例如:

Prometheus
│
├── CPU Alert
├── Memory Alert
├── Disk Alert
└── Service Alert
│
▼
Alertmanager
│
├── Group
├── Route
└── Notify
│
├── Email
├── Webhook
└── On-call

官方: Alerting Overview

十九、Grafana Alerting#

现在 Grafana 自身也提供完整的 Alerting 能力。

例如:

Grafana
│
▼
Prometheus Data Source
│
▼
PromQL
│
▼
Alert Rule

Grafana 官方目前支持:

Grafana-managed alert rules

也可以查看 Prometheus 自己管理的规则;对于 Prometheus 原生告警规则,Grafana 中主要作为查看入口,而规则修改仍然需要回到 Prometheus 配置或规则文件中。

因此学习阶段可以先这样理解:

Prometheus
→ Metrics + PromQL + 原生告警规则
Alertmanager
→ 告警聚合与通知
Grafana
→ Dashboard + Query + Grafana Alerting

二十、Prometheus 与 Grafana 的典型架构#

一个最基础的 Linux 监控系统:

Linux Server
│
▼
node_exporter
│
/metrics
│
▼
Prometheus
┌───────┴────────┐
│ │
TSDB PromQL
│
▼
Grafana
│
┌───────────┴───────────┐
▼ ▼
Dashboard Alert

多个服务器:

Node 1 ── node_exporter ──┐
Node 2 ── node_exporter ──┤
Node 3 ── node_exporter ──┤
Node 4 ── node_exporter ──┤
▼
Prometheus
│
▼
Grafana

二十一、Service Discovery#

前面的配置:

static_configs:
- targets:
- 192.168.1.10:9100

属于:

Static Configuration

服务器多了以后:

100 台
500 台
1000 台

手动维护就很麻烦。

因此 Prometheus 支持:

Service Discovery

例如 Kubernetes 环境中,可以通过 Kubernetes Service Discovery 动态发现目标。

Kubernetes
│
├── Pod
├── Service
└── Node
│
▼
Service Discovery
│
▼
Prometheus

这也是 Prometheus 非常适合云原生环境的重要原因之一。

二十二、Kubernetes 与 Prometheus#

前面的 Kubernetes 文章里学习了:

Node
Pod
Service
Deployment

现在可以将它们与监控连接起来:

Kubernetes
│
├── Node
│ └── node_exporter
│
├── Pod
│ └── application metrics
│
└── Service
│
▼
Prometheus
│
▼
Grafana

这样:

Kubernetes
→ 管理工作负载
Prometheus
→ 观察工作负载
Grafana
→ 展示观察结果

二十三、一个完整的 Linux 监控案例#

假设现在有:

Server A
192.168.1.10
Server B
192.168.1.11

每台服务器运行:

node_exporter

架构:

Server A
│
└── node_exporter :9100
│
▼
┐
│
Server B │
│ │
└── node_exporter :9100
│
▼
Prometheus
│
▼
Grafana

Prometheus 配置:

scrape_configs:
- job_name: linux
static_configs:
- targets:
- 192.168.1.10:9100
- 192.168.1.11:9100

在 Prometheus 中查询:

up

结果:

serverA → 1
serverB → 1

如果:

serverB → 0

就说明 Prometheus 当前无法成功采集:

192.168.1.11:9100

进一步排查:

node_exporter
↓
端口 9100
↓
网络
↓
防火墙
↓
服务器

这就是监控系统与 Linux 运维排障的结合。

二十四、Prometheus 常见故障#

24.1 Target DOWN#

现象:

Prometheus
→ Targets
→ DOWN

第一步:

Terminal window
curl http://<target>:9100/metrics

如果直接失败:

Exporter
↓
网络
↓
端口

继续检查:

Terminal window
systemctl status node_exporter

以及:

Terminal window
ss -lntp | grep 9100

24.2 Prometheus 启动失败#

首先:

Terminal window
systemctl status prometheus

然后:

Terminal window
journalctl -u prometheus

如果修改了 YAML:

YAML 格式错误

可能导致 Prometheus 无法加载配置。

因此修改配置后应该先验证配置,而不是直接不断重启服务。

24.3 查询没有数据#

例如:

node_cpu_seconds_total

没有返回数据。

排查:

Metric 是否存在
↓
Target 是否 UP
↓
Exporter 是否正常
↓
Prometheus 是否成功采集
↓
时间范围是否正确
↓
Label 是否匹配

尤其注意:

instance="..."

写错后也可能导致:

No data

24.4 Grafana 没有数据#

首先不要马上修改 Dashboard。

先检查:

Grafana
↓
Data Source
↓
Prometheus
↓
PromQL
↓
Metrics

在 Grafana Data Source 中进行连接测试。

Grafana 当前官方文档也把 Prometheus 作为标准 Data Source,并提供 PromQL Query Editor。

如果 Data Source 正常,再检查:

Dashboard Query

二十五、监控系统的几个重要原则#

25.1 监控不是越多越好#

如果一个 Dashboard:

1000 个 Panel

看起来非常“专业”。

但真正故障时:

找不到重点

就失去了监控的价值。

更好的方式是:

Overview
↓
发现异常
↓
Service
↓
Host
↓
Detail

25.2 从业务目标设计指标#

不要只监控:

CPU
Memory
Disk

还要问:

用户是否能够访问?
请求是否成功?
响应是否变慢?
错误率有没有增加?

例如 Web 服务:

Availability
Latency
Traffic
Errors

这些比单纯:

CPU = 50%

更接近业务健康程度。

25.3 监控指标应该能解释问题#

例如发现:

HTTP 5xx ↑

接下来应该能够通过:

CPU
Memory
Database Connections
Latency

进一步判断:

资源不足?
数据库问题?
网络问题?
应用本身异常?

这样监控才真正成为:

故障排查工具

二十六、从 Metrics 走向 Logs#

到这里,我们主要处理的是:

Metrics

例如:

CPU = 80%
Memory = 70%
QPS = 1000
Latency = 200ms

它们很适合回答:

发生了什么?
什么时候发生?
严重程度如何?

但是它们往往不能直接回答:

为什么发生?

于是需要:

Logs

例如:

2026-09-14 10:30:01 ERROR
Database connection refused

因此后续会进入:

Metrics
→ Prometheus
Visualization
→ Grafana
Logs
→ 日志收集 / ELK
Metrics + Logs + Traces
→ OpenTelemetry / 可观测性体系

二十七、监控体系整体模型#

目前已经可以把前两篇监控内容串起来:

Linux Server
│
├── CPU
├── Memory
├── Disk
├── Network
├── Process
└── Service
│
▼
Exporter
│
▼
Prometheus
│
├── Time Series
├── PromQL
└── Alert Rules
│
▼
Alertmanager
│
▼
Notification
Prometheus
│
▼
Grafana
│
├── Dashboard
├── Visualization
└── Alerting

而完整的可观测性体系会继续扩展成:

Observability
│
┌────────────┼────────────┐
▼ ▼ ▼
Metrics Logs Traces
│ │ │
Prometheus │ OpenTelemetry
│ │ │
Grafana ELK/... │
│ │ │
└────────────┼────────────┘
▼
Correlation
│
▼
Root Cause

二十八、Prometheus 与 Grafana 的关系总结#

最后可以用一句非常简单的话区分两者:

Prometheus
→ “把指标收进来、存下来、查出来”
Grafana
→ “把数据展示出来,让人看懂”

更加完整地说:

Exporter
↓
Metrics
↓
Prometheus
├── Storage
├── PromQL
└── Alert Rules
↓
Alertmanager
Prometheus
↓
Grafana
├── Dashboard
├── Visualization
└── Alerting

而上一篇 Linux 服务监控中的:

top
free
df
iostat
ss
systemctl
journalctl

现在变成了:

人工查看
↓
Exporter
↓
Prometheus
↓
Grafana
↓
持续监控

因此:

Prometheus 解决“持续采集和查询指标”,Grafana 解决“把指标组织成可视化界面”,而 Exporter 则负责把 Linux、数据库和其他系统的状态转换成 Prometheus 能理解的 Metrics。

外部参考#

监控:Prometheus 与 Grafana
https://tamakara.top/posts/学习笔记/监控prometheus-与-grafana/
作者
魂辛カラ
发布于
2026-09-14
许可协议
CC BY-NC-SA 4.0