用grafana监控php应用的核心是让php暴露标准/metrics端点,通过prometheus/client_php输出prometheus格式指标,由prometheus定时拉取,再在grafana中用promql构建qps、p95延迟、错误率等面板并配置精准告警。

用Grafana监控PHP应用,本质是把PHP服务的运行状态“翻译”成指标数据,再由Grafana绘制成图表。关键不在Grafana本身,而在于让PHP能持续、规范地输出可被采集的指标,并让Prometheus稳定拉取。
在PHP中暴露标准/metrics接口
这是整个链路的起点。不能靠日志解析或定时脚本抓取,必须提供原生的Prometheus文本格式端点:
- 用prometheus/client_php库(推荐Redis存储后端,避免单机失效)注册指标:如Counter统计请求总数、Histogram记录响应耗时、Gauge反映当前在线数或队列积压量
- 在框架中间件或统一入口处埋点:例如Laravel的
Kernel.php或Swoole的onRequest回调中调用$counter->inc(['/api/user']) - 单独创建
/metrics路由,调用RenderTextFormat::render()输出纯文本,内容形如:php_http_requests_total{route="/home",status="200"} 1245php_http_request_duration_seconds_bucket{le="0.1"} 987 - 确保该接口可被Prometheus访问:Nginx需放行,Docker部署时注意网络连通性,生产环境建议加IP白名单或Bearer Token校验
配置Prometheus抓取PHP服务指标
Prometheus是数据搬运工,它得知道去哪儿、怎么取、多久取一次:
- 修改
prometheus.yml,添加job配置。若PHP服务部署在宿主机,target写localhost:8000;若在Docker网络内,用容器名+端口,如php-app:80 - 明确指定
metrics_path为/metrics,并设置合理scrape_interval(如15s,太短增加PHP负担,太长影响实时性) - 启动Prometheus后,访问
http://localhost:9090/targets确认PHP job状态为UP,且Labels里能看到正确的instance和job - 在Prometheus表达式浏览器中输入
php_http_requests_total,应能查到时间序列数据,说明采集通路已通
在Grafana中构建实用监控面板
可视化不是堆图表,而是聚焦真正影响业务的维度:
- 新建Dashboard,添加Panel,数据源选Prometheus。核心图表建议包括:
• 每秒请求数(QPS):用rate(php_http_requests_total[1m])
• P95响应延迟:用histogram_quantile(0.95, sum(rate(php_http_request_duration_seconds_bucket[5m])) by (le, route))
• 错误率:用rate(php_http_requests_total{status=~"5.."}[5m]) / rate(php_http_requests_total[5m]) - 使用变量(Variables)实现下拉筛选:例如定义
$route变量,来源为label_values(php_http_requests_total, route),让一个面板适配所有接口 - 添加状态卡片(Stat Panel):显示当前错误率、最大延迟、总请求数,一眼掌握全局健康度
- 对延迟类指标启用“热力图(Heatmap)”视图,观察延迟随时间与分位数的分布变化,比单一曲线更易发现毛刺
设置有效告警而非噪音
告警要准、要少、要可操作,避免“狼来了”效应:
- 在Grafana Alerting中新建规则,条件基于PromQL:例如“过去5分钟P99延迟 > 1s”或“错误率连续3次采样 > 5%”
- 告警消息模板里必须包含上下文:如
{{ $labels.route }} 接口延迟异常,当前P99={{ $value | printf "%.2f" }}s - 通知渠道配置邮件、企业微信或Slack,测试发送确保通道畅通
- 对非关键接口(如健康检查)降低告警阈值或取消告警,专注影响用户体验的核心路径
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











