本文目录导读:

- 核心方案:Prometheus + Pushgateway
- 推荐方案:PHP-FPM 直接暴露 /metrics 端点
- 基础设施级别:Nginx/Apache 指标 + PHP-FPM Exporter
- 告警配置
- 推荐工具组合
是的,PHP 监控告警完全可以且推荐使用 Prometheus。
虽然 PHP 传统上是“短生命周期”的脚本语言(请求结束进程就销毁),但现代 PHP 应用(特别是基于 PHP-FPM 的长驻进程)可以很好地与 Prometheus 集成。
以下是 PHP 使用 Prometheus 进行监控告警的几种主流方式及优缺点分析:
核心方案:Prometheus + Pushgateway
这是最常用、也最适合传统 PHP(如 Apache mod_php 或普通 CGI)的方式。
- 原理:PHP 脚本在处理请求时,将指标数据推送到一个中间组件 Pushgateway,Prometheus 再从 Pushgateway 拉取数据。
- 适用场景:无法暴露 HTTP /metrics 端点的传统 PHP 脚本、批处理任务、cron job。
- 优点:无需修改 PHP 运行模式,兼容性好。
- 缺点:Pushgateway 是单点(需高可用),指标数据有过期风险(需手动清理)。
- 实现:使用
prometheus/client_php库推送到 Pushgateway。
推荐方案:PHP-FPM 直接暴露 /metrics 端点
这是现代 PHP 应用(如 Laravel、Symfony、ThinkPHP)的最佳实践,推荐使用。
- 原理:PHP-FPM 是长驻进程池,可以启动一个持续的 HTTP 服务(通常配合 ReactPHP 或 Amp 异步框架),或者更简单地通过一个专门的 PHP 脚本来收集指标并输出。
- 适用场景:基于 PHP-FPM 的 Web 应用,且有能力集成路由(如使用 Laravel 路由)。
- 优点:
- 实时性高:Prometheus 直接拉取,数据延迟低。
- 无单点:每个 PHP-FPM 实例都可独立抓取。
- 自动清理:指标随进程生命周期自然消失,无残留。
- 缺点:需要框架支持或额外的异步插件。
- 实现:
- 库:推荐使用
promphp/prometheus_client_php(支持 FPM 模式)。 - 框架集成:有现成的包,如 Laravel 的
superbalist/laravel-prometheus-exporter、Symfony 的pixelfederation/prometheus-bundle。
- 库:推荐使用
基础设施级别:Nginx/Apache 指标 + PHP-FPM Exporter
如果你的 PHP 应用无法修改代码,可以从 Web 服务器层面监控。
- 原理:
- Nginx Exporter:监控 Nginx 自身状态(
stub_status),获取请求量、连接数、响应码等。 - PHP-FPM Exporter:监听 PHP-FPM 的
status页面(需开启pm.status_path),获取进程池状态(活跃进程、空闲进程、请求队列等)。
- Nginx Exporter:监控 Nginx 自身状态(
- 适用场景:不想改代码、只监控 PHP 进程本身健康状态。
- 优点:零代码侵入,部署简单。
- 缺点:无法监控应用层业务指标(如订单数、用户注册量)。
告警配置
无论采用哪种采集方式,告警逻辑都在 Prometheus Server 中集中配置。
# 示例告警规则:PHP-FPM 进程池接近满载
groups:
- name: php_alerts
rules:
- alert: PHPFpmHighActiveProcesses
expr: (phpfpm_active_processes / phpfpm_max_children) > 0.8
for: 5m
labels:
severity: warning
annotations:
summary: "PHP-FPM 活跃进程高 ({{ $value | humanizePercentage }})"
description: "实例 {{ $labels.instance }} 的 PHP-FPM 活跃进程已超过 80%。"
- alert: PHPFpmPoolFull
expr: phpfpm_active_processes == phpfpm_max_children
for: 1m
labels:
severity: critical
annotations:
summary: "PHP-FPM 进程池已满"
description: "PHP-FPM 正在拒绝新连接,请检查慢查询或攻击。"
推荐工具组合
| 层级 | 工具 | 说明 |
|---|---|---|
| 数据采集(代码层) | promphp/prometheus_client_php |
官方推荐 PHP 客户端库 |
| 数据采集(进程层) | hipages/php-fpm_exporter (Go) |
专门解析 PHP-FPM status 页面的 Exporter |
| 数据存储 & 计算 | Prometheus Server | 核心时序数据库与告警引擎 |
| 告警管理 | Alertmanager | 处理告警去重、分组、路由(发送短信、邮件、钉钉等) |
| 可视化 | Grafana | 数据展示、图表分析 |
| 替代方案(保留历史) | VictoriaMetrics / Thanos | 如果数据量巨大,可替代 Prometheus 的存储层 |
- 可以用:PHP 监控告警非常适合用 Prometheus。
- 最佳实践:对于 Web 应用,优先选择 PHP-FPM 直接暴露
/metrics端点(使用prometheus_client_php库集成到框架)。 - 快速上手:如果不想改代码,使用
php-fpm_exporter+ Nginx Exporter 可以快速搭建基础监控。 - 避坑提醒:避免对每个 HTTP 请求都直接暴露一个唯一的、高基数的标签(如
user_id),这会导致 Prometheus 性能严重下降。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播