打开观测相关的文档,有人会先想到探针把样本推到某个平台。Prometheus 自己的入门页里,却是抓取、本地库和表达式浏览器叠在一起,一时分不清这一层有没有把时间序列留下来。
官方同时保留了两份入门页:First steps with Prometheus 和 Getting started。两条都还在,没有并成一页。两者都从本机下载解压、写 prometheus.yml、启动单一二进制开始,让服务器抓取目标上的指标 HTTP 端点,并在本机查询。发行包解压后,服务器就是名为 prometheus 的那一个文件,在 Windows 上则是 prometheus.exe。First Steps 的定位很直接:Prometheus 是一套监控平台,通过抓取这些端点来收集数据。该页还说明,入门时第一个被抓取的对象可以就是 Prometheus 自己,因为它会暴露内存、垃圾回收等进程级指标。Getting Started 补了一句启动时的默认行为:时间序列库默认写在 ./data,路径可用 --storage.tsdb.path 修改。这一层会采集,也会在本地保存,不是只把样本转手送走。
最小配置在两份文档里结构相近,通常能看到 global、rule_files 和 scrape_configs 三段。global 里常见的 scrape_interval 示例是 15 秒,控制默认抓取间隔,单个目标还可以覆盖。evaluation_interval 控制规则多久计算一次。入门阶段 rule_files 可以先留空。scrape_configs 里先放一个名为 prometheus 的 job,静态目标是 localhost:9090。服务器自己也会在 /metrics 暴露指标,默认任务抓的就是 http://localhost:9090/metrics。启动命令是 ./prometheus --config.file=prometheus.yml。启动之后可以打开 http://localhost:9090 查看状态页。First Steps 建议大约再等 30 秒,让服务器完成一次针对自己的抓取。也可以直接打开 http://localhost:9090/metrics,确认服务器正在对外提供自己的指标。
查询入口是 http://localhost:9090/query。First Steps 在 Table 页用 promhttp_metric_handler_requests_total 作例子,Getting Started 则用 prometheus_target_interval_length_seconds。同一指标名会带不同标签,可以用 {code="200"} 这类选择器收窄,也可以用 count() 统计序列条数,或用 rate(...[1m]) 在 Graph 页看速率。表达式语言的细节以文档里链出的说明为准,入门时先把「能查到刚抓进来的序列」确认下来即可。
要观察本机以外的目标,两份文档都用 node exporter 做下一跳:对方在自己的端口上提供 /metrics,再在 scrape_configs 里加一个 job。First Steps 的示例监听 9100,改完配置后需要重启,大约 30 秒后就可以查 node_memory_MemAvailable_bytes 这类主机指标。Getting Started 则起了三个示例进程,并用 group 标签区分,随后可在 http://localhost:9090/targets 上看目标是不是已经显示为 UP。Getting Started 还演示了记录规则:把已经稳定的聚合表达式写入 prometheus.rules.yml,再在 rule_files 里引用,让计算结果作为新的时间序列落下。这是查询跑通之后的下一步,不是启动时的必需项。配置改完后,也可以按该页用 SIGHUP 重载,不一定每次都重启进程。结束进程时该页建议用 SIGTERM 或 SIGINT,便于把本地库收干净。
业务进程若要暴露自己的指标,需要在代码里用客户端库埋点,官方列在 Client libraries,按语言可选用 Go、Java 或 Scala、Node.js、Python、Ruby、Rust 等实现。入门这一步先把抓取、本地存储和查询跑通即可,不必先搭整套观测平台。Prometheus 和站内那篇 OpenTelemetry 要分开看:那篇问的是 OTel 算不算观测后端、数据怎么送出去,这里只谈 Prometheus 自己如何在本机抓取并留下时间序列。若要对照的是日志而不是指标,那是 VictoriaLogs 那一侧的事,不要和这套指标库混成同一层。
你们本机现在是先把 Prometheus 跑起来自己查,还是只把它当成往外送样本的一环?