Prometheus 指标暴露接口分析:如何编写 Web 监控

秋婷姑娘_7806

秋婷姑娘_7806

2026-07-01

426人浏览

原创

prometheus 采用拉模型,需服务主动暴露 /metrics 接口返回符合文本协议的指标;支持 counter、gauge、histogram、summary 四类指标;配置时需确保网络可达、路径正确,并在 ui 中验证 target 状态为 up。

prometheus 指标暴露接口分析:如何编写 web 监控

要让 Prometheus 抓取 Web 服务的运行状态,关键不是“让 Prometheus 主动发现连接”,而是让服务自己把指标以标准格式吐出来——也就是暴露一个 /metrics HTTP 接口。

指标必须由服务主动暴露

Prometheus 是“拉模型”:它定时向目标地址发 HTTP GET 请求,只认文本格式的指标数据。它不会、也不能主动建立 WebSocket 连接或探测 TCP 端口。所以监控任何 Web 服务的前提,是服务内部维护状态,并通过一个普通 HTTP 路由(比如 /metrics)返回符合 Prometheus 文本协议的指标内容。

常见误区包括:

  • 用 blackbox_exporter 去“探测” WebSocket 地址 —— 协议不匹配,必然失败
  • 在 Prometheus 配置里写 targets: ["localhost:8000"] 却没在服务里实现 /metrics 路由 —— 抓不到数据,日志里只有 404
  • 多个进程/线程各自维护计数器 —— 导致指标值错乱或归零

核心指标类型与选择逻辑

暴露什么指标,取决于你要监控什么。Prometheus 官方支持四类基础指标,每种适用场景不同:

Flova
Flova

Flova是一款AI文本写作工具,全球首个一体化 AI 视频创作平台。

下载
  • Counter(计数器):只增不减,适合统计总量,如 http_requests_total{method="GET",status="200"}
  • Gauge(瞬时值):可升可降,适合反映当前状态,如 active_websocket_connections、memory_usage_bytes
  • Histogram(直方图):按区间分桶统计分布,适合延迟类指标,如 http_request_duration_seconds_bucket{le="0.1"}
  • Summary(摘要):直接计算分位数(如 P95),适合对延迟做快速响应判断

实际中,HTTP 请求量、错误数用 Counter;活跃连接数、内存占用用 Gauge;响应时间推荐 Histogram(兼顾查询灵活性和性能)。

代码层实现要点

无论用 Python、Go 还是 Java,暴露指标的核心步骤一致:

  • 引入对应语言的 prometheus_client 或 client_golang 库
  • 在应用初始化时定义指标变量(如 REQUEST_COUNT = Counter(...))并注册到全局 registry
  • 在业务逻辑关键路径埋点:请求入口 +1、出口 -1;耗时开始记录、结束观测;异常发生时 .inc() 错误计数
  • 新增一个同步 HTTP 路由(如 FastAPI 的 @app.get("/metrics")),调用 generate_latest() 返回纯文本指标
  • 确保所有指标操作发生在同一进程/事件循环内,避免多实例间状态不同步

Prometheus 配置与验证

服务跑起来后,先手动访问 http://your-service:port/metrics,确认返回内容是类似这样的纯文本:

http_requests_total{method="GET",status="200"} 127
http_request_duration_seconds_bucket{le="0.05"} 92
active_websocket_connections 3

再配置 Prometheus 的 scrape_configs,指定 job 名称、目标地址和 metrics_path:

  • target 必须能被 Prometheus 网络访问到(容器内注意 host.docker.internal 或 service name)
  • scrape_interval 建议设为 10–30 秒,太短增加负载,太长影响实时性
  • 首次配置后,进 Prometheus UI 的 Status > Targets 页面,看对应 job 是否显示 UP

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

2026.09.30

20

10

LLVM RISC-V参数配置教程
LLVM RISC-V参数配置教程

本专题介绍LLVM对RISC-V基础ISA和扩展的支持方式,涵盖RV32、RV64、标准扩展、实验性扩展、厂商扩展、-menable-experimental-extensions和版本差异。

2026.09.30

0

14

LLVM IR中间表示入门指南
LLVM IR中间表示入门指南

本专题整理LLVM IR的核心概念,包括中间表示作用、模块结构、函数、基本块、SSA形式、类型系统和常见语法,帮助新手理解LLVM编译流程中的关键层。

2026.09.30

0

12

PDF转图片方法
PDF转图片方法

需要把 PDF 页面用于上传、预览、分享或图片归档时,PDF 转图片方法专题整理 JPG/PNG 格式选择、逐页导出、清晰度设置、批量下载和结果检查等流程,帮助用户稳定完成 PDF 图片化处理。

2026.09.30

20

26

PixTV AI视频生成与无限画布创作
PixTV AI视频生成与无限画布创作

PixTV专题整理AI视频与视觉内容创作相关功能使用教程,涵盖AI生图、视频生成、无限画布、多模型创作、素材管理、声音音乐及视频剪辑等功能,帮助用户快速掌握PixTV从创意到成片的完整制作方法。

2026.09.29

20

15

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

2026.09.23

220

15

Buffalo框架路由与请求处理实操指南
Buffalo框架路由与请求处理实操指南

本专题讲解Buffalo框架路由与请求处理机制,涵盖路由注册与分组、资源路由、Handler编写规范、Context上下文方法、参数绑定、中间件编写挂载、Session与Cookie读写、Flash消息及错误页面定制方法。

2026.09.23

140

15

Buffalo框架零基础入门教程
Buffalo框架零基础入门教程

本专题整理Buffalo框架入门内容,涵盖Go环境准备、buffalo CLI安装、新项目生成、目录结构说明、dev热加载启动、数据库连接配置与常见报错排查,帮助新手按约定优于配置的思路跑通第一个Buffalo框架应用。

2026.09.23

120

15

Conan创建软件包配方指南
Conan创建软件包配方指南

本专题介绍通过conanfile.py创建软件包的方法,讲解包名、版本、依赖和构建设置等基础信息,以及source、build、package、package_info等常用方法的作用及编写思路。

2026.09.22

60

12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.4万人学习