如果你刚开始接触服务器、容器、虚拟机或者 DevOps,很快就会遇到一个问题:
我怎么知道我的服务现在是不是正常?
比如:
- CPU 为什么突然飙高
- 内存是不是快吃满了
- 某个服务为什么会偶尔超时
- 磁盘空间还剩多少
- 某台机器到底什么时候开始变慢的
这些问题,本质上都指向同一件事:你需要监控。
而在现代监控体系里,Prometheus 基本算是最常见、也最值得新手尽早接触的一套工具。
这篇文章我尽量不用太绕的说法,讲清楚三件事:
- Prometheus 到底是什么
- 它平时是怎么工作的
- 新手应该怎么开始用它
Prometheus 是什么
先用一句不太严格、但很好理解的话来说:
Prometheus 是一个专门用来采集、保存和查询监控指标的系统。
这里的重点是“指标”。
Prometheus 最擅长处理的,不是日志,不是错误堆栈,而是这些能量化的数值:
- CPU 使用率
- 内存占用
- 磁盘剩余空间
- HTTP 请求总数
- 请求响应时间
- 某个接口 500 错误出现了多少次
你可以把它理解成一套“专门记录数字变化趋势”的系统。
它和日志有什么区别
这个问题几乎每个新手都会碰到。
日志更像“发生了什么”
例如:
用户 A 登录成功接口 /api/login 返回 500数据库连接超时日志擅长告诉你:
- 某件事发生了
- 发生在什么时候
- 当时上下文是什么
Prometheus 更像“整体状态怎么样”
例如:
- 当前 QPS 是多少
- 过去 5 分钟错误率是多少
- 内存是不是一直在涨
- 平均响应时间是不是比昨天高
所以你可以简单理解成:
- 日志负责记录事件
- Prometheus 负责记录数值趋势
它们不是互相替代,而是互补。
为什么 Prometheus 这么常见
Prometheus 会这么流行,不是因为它听起来高级,而是因为它真的很适合现代服务环境。
1)它的模型很清楚
Prometheus 的核心工作方式其实不复杂:
- 某个服务把自己的指标暴露出来
- Prometheus 定期去抓这些指标
- 把结果按时间存下来
- 你再去查这些数据、画图、做告警
就这么一条链路。
很多新手一开始会把它想得很玄,其实真正跑起来以后,会发现它比不少“传统大而全监控系统”更直观。
2)它很适合云原生和动态环境
如果你的服务是:
- Docker 容器
- Kubernetes Pod
- 多台 Linux 主机
- 微服务
Prometheus 会很好用,因为它天生就是朝这种环境设计的。
3)它的数据模型很适合运维
Prometheus 存的是时间序列数据。
说白了就是:
某个指标,在某个时间点,值是多少。
例如:
node_cpu_seconds_totalnode_memory_MemAvailable_byteshttp_requests_total
这种模型特别适合看趋势。
Prometheus 是怎么工作的
如果你想入门,最重要的是先理解它的工作链路。
第一步:目标暴露指标
Prometheus 不会凭空知道你的机器状态。
它需要有人把指标暴露出来。
例如:
- Linux 主机可以跑
node_exporter - PostgreSQL 可以跑 postgres exporter
- MySQL 可以跑 mysqld exporter
- 应用程序自己也可以暴露
/metrics
这些 exporter 或应用,会提供一堆这样的内容:
node_cpu_seconds_total{cpu="0",mode="idle"} 12345.67node_memory_MemAvailable_bytes 8246337208你不用一开始就完全看懂这种格式,只要知道它本质上是:
- 指标名
- 标签
- 当前值
第二步:Prometheus 去抓这些指标
Prometheus 默认采用的是 pull 模式。
也就是:
- 不是客户端主动把数据推给 Prometheus
- 而是 Prometheus 自己定时去抓
例如每 15 秒抓一次:
http://你的主机:9100/metricshttp://你的应用:8000/metrics
这个设计很适合内部服务网络,因为 Prometheus 可以统一控制采集节奏,也比较方便排错。
第三步:Prometheus 把数据存下来
Prometheus 抓到的不是“一眼看完就丢”的瞬时值,而是把这些值按时间保存下来。
这样你后面就能查:
- 最近 5 分钟 CPU 趋势
- 过去 1 小时错误率
- 某个服务这周的请求量变化
第四步:查询、图表、告警
Prometheus 自己提供查询能力,但实际使用时,很多人会把它和 Grafana 搭配起来。
最常见的组合就是:
- Prometheus:负责抓和存
- Grafana:负责看图
- Alertmanager:负责发告警
对新手来说,先把前两者理解清楚就已经够用了。
新手先记住这几个组件就够了
1. Prometheus
负责抓取和保存指标。
2. Exporter
负责把系统或服务状态暴露成 Prometheus 能读懂的指标。
最常见的是:
node_exporter:监控 Linux 主机
3. Grafana
负责把指标画成图。
4. Alertmanager
负责发告警。
新手最适合从哪里开始
我的建议很明确:
先别急着监控一切,先学会监控一台 Linux 主机。
这是最好的起点。
因为只要你能把下面这条链路跑通:
- Linux 主机
- node_exporter
- Prometheus
- Grafana
你对整套监控体系就已经有实际感觉了。
一个最基础的部署思路
这里我先不讲 Kubernetes,也不讲太复杂的生产环境。
只讲一个新手最容易理解的版本。
目标
你有一台 Linux 机器,想看到:
- CPU
- 内存
- 磁盘
- 网络
最简单的组成
- 目标主机上跑
node_exporter - Prometheus 去抓它
- Grafana 读取 Prometheus 数据做展示
最小可运行的思路
1)启动 node_exporter
例如在 Linux 上运行:
./node_exporter默认会监听:
:9100你打开:
http://你的主机IP:9100/metrics如果能看到一堆文本指标,说明第一步已经成功。
2)配置 Prometheus
Prometheus 的配置文件核心长这样:
global: scrape_interval: 15s
scrape_configs: - job_name: 'node' static_configs: - targets: ['192.168.1.100:9100']意思很简单:
- 每 15 秒抓一次
- 目标是
192.168.1.100:9100
3)启动 Prometheus
启动后,你去它的 Web UI,通常是:
http://你的Prometheus主机:9090然后查一个最基础的指标:
up如果返回 1,说明 Prometheus 已经成功抓到目标。
新手常见的疑问
Q1:为什么我打开 /metrics 看到的是一堆文本,不是图表?
因为 /metrics 本来就不是给人看的界面,它是给 Prometheus 抓取的原始数据接口。
图表应该去 Grafana 看,不是在 /metrics 看。
Q2:为什么 Prometheus 查到了数据,但我还是没感觉它有什么用?
因为监控的价值通常不在“看一个瞬时值”,而在:
- 长期趋势
- 异常对比
- 告警
也就是说,单看一次查询你可能没感觉,但一旦开始看图表和时间范围,感受会完全不一样。
Q3:Prometheus 能不能直接替代 Zabbix?
能做的事情有重叠,但风格不完全一样。
如果你是新手,可以先这样理解:
- Zabbix 更偏传统,配置项很多
- Prometheus 更偏现代,时间序列核心更明显
不一定是谁彻底替代谁,而是看你的场景。
新手应该怎么学 Prometheus 才不容易乱
我建议按这个顺序来:
第一步:先搞懂“指标”是什么
至少知道:
- 指标不是日志
- 指标是数字趋势
- Prometheus 是在存时间序列
第二步:只监控一台 Linux 主机
先把:
node_exporterPrometheusGrafana
这一条链路跑通。
第三步:学会查几个最基础的指标
例如:
upnode_cpu_seconds_totalnode_memory_MemAvailable_bytesnode_filesystem_avail_bytes
第四步:再去学告警
别一开始就把自己扔进 Alertmanager 规则里,那样很容易学乱。
写在最后
如果你现在刚开始学监控,其实不用急着把 Prometheus 一次学完。
先把最朴素的一条链路跑通就够了:
- 找一台 Linux 机器
- 跑一个
node_exporter - 用 Prometheus 抓到它的指标
- 再用 Grafana 把图画出来
当你真的看到:
- CPU 曲线在跳
- 内存在变化
- 磁盘空间会随着使用慢慢下降
你对 Prometheus 的理解就会一下子具体很多。
很多人一开始会觉得监控很抽象,其实只是因为还没把第一张图画出来。只要第一步通了,后面再学 exporter、PromQL、告警规则,都会顺很多。
所以如果你现在正准备入门,我会建议你别先去啃那些很长的概念文章,直接找一台机器动手试一次。对新手来说,这比单纯看定义有效得多。