ThinkPHP指标需通过Prometheus暴露并接入Grafana可视化:一、控制器实现/metrics端点输出标准文本指标;二、配置prometheus.yml抓取;三、Grafana添加Prometheus数据源;四、用Pie Chart展示接口请求占比;五、用Time series展示P95响应时间趋势;六、用Table列出错误率TOP5接口。

如果您在ThinkPHP项目中已采集监控指标(如请求量、响应时间、错误率等),但无法在Grafana中正确展示为可视化图表,则可能是由于数据源未对接、指标格式不兼容或面板配置不匹配所致。以下是实现ThinkPHP指标接入Grafana并完成图表可视化的具体步骤:
一、将ThinkPHP应用指标暴露为Prometheus可采集格式
需使ThinkPHP应用以文本形式暴露符合Prometheus规范的指标,供Prometheus抓取。核心是实现一个HTTP端点(如/metrics)返回纯文本指标数据。
1、在ThinkPHP控制器中创建MetricsController,定义index方法;
2、在方法内构造符合Prometheus文本格式的指标输出,例如:
立即学习“PHP免费学习笔记(深入)”;
# HELP tp_http_requests_total Total number of HTTP requests processed
# TYPE tp_http_requests_total counter
tp_http_requests_total{method="GET",status="200"} 1247
tp_http_requests_total{method="POST",status="500"} 3
3、设置响应头Content-Type: text/plain; version=0.0.4;
4、确保该路由未被中间件拦截,且可被Prometheus服务器直连访问(如http://your-thinkphp-app/metrics)。
二、配置Prometheus抓取ThinkPHP指标
Prometheus需主动拉取ThinkPHP暴露的指标,因此必须在prometheus.yml中添加对应job配置,确保指标能进入时序数据库。
1、编辑prometheus.yml文件,在scrape_configs下新增job段;
2、指定job_name为thinkphp;
3、在static_configs中填入ThinkPHP服务地址,例如:targets: ['your-thinkphp-app:80'];
4、确认scrape_interval不低于15s,避免高频抓取影响应用性能;
5、执行prometheus --config.file=prometheus.yml重启服务,并访问http://localhost:9090/targets验证状态为UP。
三、在Grafana中添加Prometheus数据源
Grafana本身不存储数据,需先绑定已运行且可通信的Prometheus实例,才能查询并渲染其采集的ThinkPHP指标。
1、登录Grafana Web界面,进入Configuration → Data Sources → Add data source;
2、选择Prometheus类型;
3、在URL字段填写Prometheus服务地址,Docker容器内应使用http://host.docker.internal:9090,宿主机直连则填http://127.0.0.1:9090;
4、点击Save & test,出现Data source is working提示即表示连接成功;
5、若报错connection refused,需检查Prometheus是否运行、端口是否开放、防火墙是否放行。
四、创建Pie Chart面板展示ThinkPHP接口占比
饼图适用于呈现ThinkPHP各控制器/方法的请求量占总请求量的比例关系,便于快速识别流量热点。
1、在Dashboard中点击Add panel → Pie chart;
2、在Query编辑器中选择已配置的Prometheus数据源;
3、输入PromQL查询语句:sum by (controller) (rate(tp_http_requests_total[5m]));
4、切换至Value options选项卡,Show设为Calculate,Calculation选Last;
5、在Field options → Standard options → Unit中设为none,避免单位干扰比例计算;
6、保存面板后,扇形区块将按各controller标签的5分钟请求速率自动分配角度。
五、创建Time series面板展示ThinkPHP响应时间趋势
时间序列图用于追踪ThinkPHP关键接口的P95/P99响应延迟随时间的变化,支持趋势判断与异常定位。
1、添加新面板,选择Time series类型;
2、在Query中输入PromQL:histogram_quantile(0.95, sum by (le, controller) (rate(tp_http_request_duration_seconds_bucket[5m])));
3、确保ThinkPHP已按OpenMetrics规范暴露_bucket和_sum指标;
4、在Legend字段填写{{controller}}-p95,使图例清晰标识维度;
5、进入Panel options → Graph styles,Fill opacity设为2,Line width设为2;
6、在Left Y → Unit中选择seconds,使纵轴单位自动适配。
六、配置Table面板列出ThinkPHP错误率TOP5接口
表格面板适合结构化呈现高错误率接口的明细,支持排序与阈值着色,便于快速下钻排查。
1、添加新面板,选择Table类型;
2、Query中输入PromQL:topk(5, sum by (controller, action) (rate(tp_http_requests_total{status=~"5.."}[5m])) / sum by (controller, action) (rate(tp_http_requests_total[5m])));
3、在Field options → Cell display mode中为数值列启用Color background (solid);
4、在Thresholds中设置两档阈值:0.01(黄色)、0.05(红色);
5、开启Sort column,点击Value列标题,使结果按错误率降序排列;
6、在Column alignment中将Value列设为Right对齐,提升可读性。



















