frankenphp_worker_requests_total 是唯一反映请求累计总数的指标,它记录 worker 脚本历史处理请求数,仅增不减、重启重置,且必须携带 worker="xxx" 标签;无法推算当前序号,需自行埋点或依赖其增长率与响应时长观测性能。

frankenphp_worker_requests_total 是唯一能反映请求序号的指标
FrankenPHP 不提供“当前处理第几个请求”这种递增计数器,而是暴露一个 frankenphp_worker_requests_total 类型为 counter 的指标,它记录的是该 worker 脚本**累计处理过的请求数**。这个值只增不减,重启 worker 后会重置(除非配置了持久化状态,但目前官方未支持)。它不是“当前序号”,而是“历史总数”。
worker 标签决定了指标归属,必须带 worker="xxx"
该指标始终携带 worker="xxx" 标签,其中 xxx 是你在 Caddyfile 或 YAML 配置中定义的 Worker 脚本路径的 basename(如 worker="queue.php"),不是任意别名。如果你看到多个同名 worker 实例,Prometheus 会自动按实例标签(如 instance="localhost:2019")区分。漏掉这个标签,说明指标根本没被正确注册——常见原因是没在 Caddyfile 里用 php { worker /path/to/queue.php } 显式声明 worker。
不能靠 frankenphp_busy_threads 推算当前请求数
有人误以为“忙线程数 = 当前正在处理的请求数”,这是错的。因为:
-
frankenphp_busy_threads只反映 PHP 线程池中**正占用线程的 worker 实例数**,一个常驻 worker 即使空闲也占一个线程; - 普通非-worker 请求(比如直接访问 index.php)也会计入该指标,但不产生
frankenphp_worker_requests_total; - 如果 worker 内部是异步/协程模型(如用 ReactPHP),单个 worker 可能并发处理多个请求,但指标仍只按“进入 worker 入口”的次数累加。
想看实时“第 N 个请求”,得自己在 PHP 代码里埋点
FrankenPHP 不透出每个 worker 实例的内部请求计数器。若你真需要精确到“这是 queue.php 启动以来的第 12345 次执行”,只能在脚本里手动维护:
立即学习“PHP免费学习笔记(深入)”;
// queue.php
static $counter = 0;
$counter++;
error_log("Request #{$counter} received");
// 后续逻辑...
注意:这种方式无法被 Prometheus 自动采集,需配合日志解析或自定义 exporter。生产环境慎用,高频写 error_log 会影响吞吐量。真正可靠的观测粒度,还是依赖 frankenphp_worker_requests_total 的增长率(即 RPS)和 frankenphp_worker_duration_seconds 的分位数——它们才是设计用来回答“处理得多不多、快不快”的指标。



















