必须在thinkphp 5.1中通过monitor控制器暴露/metrics端点,使用prometheus/client_php库生成合规指标,配置prometheus抓取并用grafana可视化qps与内存等指标。

要在 ThinkPHP 5.1 项目中实时查看请求量、响应时间、错误率等运行指标,必须让应用主动暴露符合 Prometheus 格式的监控端点,并通过 Grafana 可视化呈现。
暴露 /metrics 接口
在 TP5.1 的 app/controller 目录下新建 Monitor.php 控制器:
使用 prometheus_client 库生成指标数据,不要直接拼接字符串——否则格式不合规会导致 Prometheus 抓取失败。
安装依赖:composer require prometheus/client_php(注意:TP5.1 默认不支持 PSR-4 自动加载,需手动注册 autoload)。
在 Monitor.php 中写入以下内容:
use Prometheus\CollectorRegistry;<br>use Prometheus\Storage\Adapter\Redis;<br>use think\Controller;<br><br>class Monitor extends Controller<br>{<br> public function index()<br> {<br> $registry = new CollectorRegistry(new Redis(['host' => '127.0.0.1', 'port' => 6379]));<br> $counter = $registry->getOrRegisterCounter('tp5', 'http_requests_total', 'Total HTTP Requests', ['method', 'status']);<br> $gauge = $registry->getOrRegisterGauge('tp5', 'php_memory_usage_bytes', 'Current PHP memory usage in bytes');<br> $gauge->set(memory_get_usage());<br> $counter->inc(['GET', '200']);<br> return $registry->render();<br> }<br>}
【必须将 Redis 服务提前启动并确保可连通,否则 registry 初始化失败,整个接口返回 500】
配置 Prometheus 抓取目标
编辑 Prometheus 的 prometheus.yml 配置文件,在 scrape_configs 区块末尾添加:
- job_name: 'tp5-app'<br> static_configs:<br> - targets: ['your-server-ip:80']<br> labels:<br> instance: 'tp5-prod'
其中 your-server-ip:80 要替换为实际部署 TP5.1 应用的服务器 IP 和监听端口(若 Nginx 反代,填 Nginx 地址;若 Apache,确认 DocumentRoot 下能访问到 /index.php/monitor)。
重启 Prometheus:systemctl restart prometheus 或直接 kill 进程后执行 /usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml。
打开 http://your-prometheus-ip:9090/targets,确认 tp5-app 状态为 UP,且 Last Scrape 时间在 30 秒内更新。
在 Grafana 中导入可视化面板
登录 Grafana(默认地址 http://your-grafana-ip:3000,初始账号 admin/admin)。
第一步:点击左侧「+」→「Import」→ 在「Import via panel json」框中粘贴以下 JSON 片段(精简版 TP5 监控面板):
{"panels":[{"targets":[{"expr":"rate(tp5_http_requests_total{job=\"tp5-app\"}[5m])","legendFormat":"{{method}} {{status}}"}],"title":"QPS Trend"},{"targets":[{"expr":"tp5_php_memory_usage_bytes{job=\"tp5-app\"}","legendFormat":"Memory Usage"}],"title":"Memory (bytes)"}]}
第二步:点击「Load」→ 在「Prometheus」下拉菜单中选择已配置的 Prometheus 数据源 → 点击「Import」。
第三步:进入仪表盘,点击右上角刷新按钮旁的时序选择器,设为「Last 5 minutes」或「Last 1 hour」,观察曲线是否随真实请求产生波动。











