PHP 8.5 不直接配置 Prometheus 告警规则,需通过 prometheus/client_php 暴露 /metrics 指标;Prometheus 抓取后,用 PromQL 编写告警规则,并由 Alertmanager 按 severity 路由通知。

PHP 8.5 本身不直接参与 Prometheus 告警规则的配置,它只是被监控的一方。真正要做的,是让 PHP 应用暴露可被 Prometheus 抓取的指标(如请求量、错误率、内存使用等),再在 Prometheus 中基于这些指标写 PromQL 表达式定义告警规则,并通过 Alertmanager 发送通知。
一、PHP 8.5 暴露监控指标(前提)
使用 prometheus/client_php 库,在应用中暴露标准的 /metrics 接口:
- 安装 SDK:
composer require prometheus/client_php - 记录 HTTP 错误率示例:
use Prometheus\CollectorRegistry; $registry = new CollectorRegistry(); $errorCounter = $registry->getOrRegisterCounter( 'php_http_errors_total', 'HTTP 5xx errors count', ['status'] ); // 在响应后:$errorCounter->inc(['500']); - 确保 Web 服务器(如 Nginx/Apache)允许访问
/metrics路径,且无鉴权拦截
二、Prometheus 配置抓取 PHP 指标
在 prometheus.yml 的 scrape_configs 中添加 PHP 服务目标:
- job_name: 'php_app'
static_configs:
- targets: ['your-php-app-host:8080'] # 替换为实际地址
metrics_path: '/metrics'重启 Prometheus 后,可在 http://<em>prometheus-host</em>:9090/targets 查看该任务是否 UP。
立即学习“PHP免费学习笔记(深入)”;
三、编写 PHP 相关告警规则
在 rules/php_alerts.yml 中定义规则,例如:
-
HTTP 5xx 错误率突增(持续2分钟超5%):
expr: rate(php_http_errors_total{status=~"5.."}[2m]) / rate(php_http_requests_total[2m]) > 0.05for: 2mlabels: {severity: "critical"} -
PHP 内存使用过高(假设你用
process_resident_memory_bytes暴露):expr: process_resident_memory_bytes{job="php_app"} > 512 * 1024 * 1024for: 5mlabels: {severity: "warning"} -
服务不可达(利用内置
up指标):expr: up{job="php_app"} == 0for: 1mlabels: {severity: "critical"}
四、关联 Alertmanager 并路由通知
在 prometheus.yml 中确认已配置 Alertmanager 地址:
alerting:
alertmanagers:
- static_configs:
- targets: ["localhost:9093"]并在 alertmanager.yml 中按 severity 标签路由到不同通道(如钉钉/企业微信):
route:
receiver: 'dingtalk-critical'
routes:
- match:
severity: 'critical'
receiver: 'dingtalk-critical'
- match:
severity: 'warning'
receiver: 'wechat-warning'规则生效后,可在 Prometheus UI 的 Alerts 页面查看状态(Inactive / Pending / Firing),在 Alertmanager UI(:9093)确认告警是否送达。



















