php应用需通过prometheus客户端库暴露/metrics端点(text/plain格式),由prometheus拉取后供grafana展示;禁用高基数label,按链路逐级排查指标不可见问题。

PHP 应用如何把指标暴露给 Grafana
Grafana 本身不直接采集 PHP 指标,它只负责展示;真正要做的,是让 PHP 把指标以 Prometheus 兼容格式暴露出来,Grafana 再通过 Prometheus(或兼容的采集器如 VictoriaMetrics、Thanos)拉取并绘图。
核心链路是:PHP 应用 → /metrics HTTP 端点(文本格式) → Prometheus server → Grafana 数据源 → 看板
- 别试图让 PHP 直连 Grafana 或“推送”数据过去——Grafana 不接收写入,只支持 pull 模式
- 最轻量方案:用
promphp/prometheus_client_php库,在 Laravel/Slim/原生 PHP 中加一个路由返回text/plain; version=0.0.4格式的指标 - 注意响应头必须设为
Content-Type: text/plain; charset=utf-8,否则 Prometheus 抓取会报expected text/plain; got text/html - 避免在
/metrics中执行耗时逻辑(如 DB 查询、文件读取),否则拉取超时导致 Prometheus 标记 target 为 down
为什么用 Prometheus 而不是直接接 MySQL 或 JSON API
因为 Grafana 原生支持 Prometheus 协议,能直接识别指标类型(Counter、Gauge、Histogram)、标签({env="prod",service="api"})、时间序列语义,而 MySQL 或自定义 JSON 需要手动写查询转换、无法自动处理采样对齐和聚合下钻。
- 用 MySQL 数据源:你得自己写 SQL 把每秒请求数算成
rate(),还要处理时间窗口、空值填充、多实例去重 - 用 JSON API 数据源:Grafana 只能当静态列表渲染,不支持 PromQL,不能做
sum by (route) (http_requests_total)这类下钻 - Prometheus 抓取的是带时间戳的原始样本,Grafana 的图表缩放、拖拽、跨时间范围对比才真正可靠
PHP 暴露指标时常见的 label 错误
label 是 Prometheus 的核心维度,但 PHP 开发者常把 label 当成“字段”硬编码,结果导致高基数(high cardinality)问题,拖垮 Prometheus 性能甚至 OOM。
- 禁止用用户 ID、请求 URL 全路径、UUID 作为 label 值——
http_requests_total{url="/user/123456789"}会生成上万时间序列 - 正确做法:提取有限枚举值,例如
http_requests_total{route="/user/{id}", method="GET", status="200"},其中route由框架路由解析后统一命名 - 如果必须记录动态值(如慢请求 trace_id),改用指标注释(
# HELP行)或单独打日志,不要塞进 label - label 名称用小写字母+下划线,避免
user_ID或UserID,Prometheus 官方推荐user_id
Grafana 看板里 PHP 指标查不到?先看这三处
指标“存在但看不见”,大概率不是 Grafana 配置错,而是上游断了链路。按顺序排查:
- curl -v http://your-php-app/metrics —— 确认返回 200 + 正确 Content-Type + 有非空指标行(如
http_requests_total{method="GET"} 123) - 进 Prometheus UI → Status → Targets → 找对应 job → 看 State 是否为 UP,Last Scrape 是否在 30s 内,Error 是否为空
- Grafana 数据源选的是 Prometheus(不是 “Prometheus (Simple JSON)” 或 “MySQL”),且 Query 编辑器里输入
http_requests_total后点 “Run query”,看右上角是否显示 “1 series” 和时间轴
label 过滤写错、时间范围选成 “Last 5 minutes” 但指标刚上线、Prometheus 抓取间隔设成 5m 导致最新点延迟——这些细节比看板模板更影响能否看到数据。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











