PHP项目服务器资源阈值如何配置告警

wen PHP项目 28

本文目录导读:

PHP项目服务器资源阈值如何配置告警

  1. 核心资源告警阈值标准配置
  2. PHP 应用层关键告警(最重要)
  3. 监控工具与配置示例
  4. 特殊情况与避坑指南
  5. 总结配置清单

为PHP项目配置服务器资源阈值告警,需要从硬件资源(CPU、内存、磁盘、网络)和应用层(PHP-FPM、数据库、慢查询、进程数)两个层面入手。

以下是一套标准化的配置方案,适用于Prometheus + Grafana、Zabbix 或 云厂商自带的监控服务。


核心资源告警阈值标准配置

CPU 使用率

  • Warning(警告)阈值: 连续 5 分钟 > 75%
  • Critical(严重)阈值: 连续 5 分钟 > 90%
  • 备注: 对于高并发PHP应用(如使用Laravel/Symfony),CPU通常是一个主要瓶颈,需注意区分 用户态CPU(php-fpm执行业务逻辑)和 IOWait(等待磁盘读写)。
  • 告警动作: 检查是否发生CC攻击、是否有慢代码、是否需要升级CPU规格或增加分布式部署。

内存使用率

  • Warning: > 80%
  • Critical: > 90%
  • 重要指标(PHP特有): 监控 OOM Killer 事件,如果内存用尽导致系统杀死PHP-FPM进程,需立即告警。
  • 告警动作: 检查 php-fpm.conf 中的 pm.max_children 是否设置过大,或者是否存在内存泄漏(需配合 memory_get_peak_usage 日志)。

磁盘使用率

  • Warning(数据盘): > 80%
  • Critical(数据盘): > 90%
  • 系统盘: > 85%(系统盘通常存放日志和PHP会话文件,一旦写满会导致服务完全停摆)
  • 关键路径:
    • /var/log/ (日志文件)
    • /tmp/ (PHP Session文件、临时上传文件)
    • session.save_path 配置的目录
  • Inode 告警: 很多小文件(如Session、缓存碎片)会先耗尽Inode,阈值设置为 < 5% 可用
  • 告警动作: 清理日志(logrotate)、清理Session文件、检查是否有死循环写入文件。

网络带宽(出入流量)

  • Warning: 使用率 > 70% (持续10分钟)
  • Critical: 使用率 > 90%
  • 告警动作: 检查是否被恶意流量攻击、是否正在进行大型文件传输/数据备份。

平均负载(Load Average)

  • Warning: CPU核心数 * 0.7 (例如4核CPU,负载 > 2.8)
  • Critical: CPU核心数 * 1.0 (4核 > 4.0)
  • 备注: 负载高不一定直接等于CPU高,也可能是I/O瓶颈(大量磁盘读写导致进程无限等待)。

PHP 应用层关键告警(最重要)

这些是直接反映服务健康度的指标,比纯硬件阈值更关键。

PHP-FPM 状态监控(/status

  • 指标: active processes(活跃进程数) 与 max_children 之比。
    • Warning: 活跃进程数 > 80%max_children
    • Critical: 活跃进程数 > 95%max_children (意味着新请求需排队等待)
  • 指标: listen queue(监听队列长度),如果该值长期不为0,表示服务器无法处理全部请求。
    • Critical: 队列长度 > 10
  • 指标: slow requests(慢请求数量),一旦出现,立即告警,代表有代码执行超时。

Nginx/Apache 错误率

  • 指标: HTTP 5xx 错误率
    • Warning: 过去5分钟内,5xx请求占比 > 1%
    • Critical: 过去5分钟内,5xx请求占比 > 5%
  • 指标: HTTP 4xx 错误率(主要关注404暴涨,可能代表扫描攻击)

PHP 慢日志阈值

  • 配置:php.ini 中设置 request_slowlog_timeout = 2s
  • 告警: 监控慢日志文件的行数变化速率,如果某分钟新增慢日志行数 > 阈值(如5行/分钟),立即告警。
  • 原因: 这是定位PHP性能瓶颈最直接的手段,比如某个接口调用了耗时3秒的外网API。

MySQL / Redis 连接数

  • PHP-FPM 与 数据库的连接: 如果PHP执行完毕未及时释放连接(导致连接池被占满),会导致新请求502/503。
  • Warning: 当前连接数 > 80%max_connections(MySQL)或 maxclients(Redis)
  • Critical: 连接数 > 95%

Opcache 缓存命中率

  • 指标: cache_hits / (cache_hits + cache_misses)
  • Warning: 命中率 < 95%
  • Critical: 命中率 < 85%
  • 原因: 命中率低意味着PHP缓存空间(opcache.memory_consumption)不够,或PHP文件频繁变动导致缓存失效,导致大量重复编译,CPU飙升。

监控工具与配置示例

使用云厂商监控(阿里云/腾讯云/AWS)

  • 设置方法: 在控制台找到“云监控” -> “报警规则管理”。
  • 建议: 直接勾选预置模版(如“基础监控告警”),然后手动补充:
    • 进程监控: 检查 php-fpm 进程数量是否小于预期,如果进程数为0,触发紧急告警。
    • 自定义脚本: 编写shell脚本,定期模拟 curl -I http://localhost/health_check,检查返回状态码是否为200,如果不为200,触发告警。

使用 Prometheus + Grafana(开源方案,推荐中大型项目)

  • 组件: node_exporter(系统指标) + php-fpm_exporter(PHP-FPM指标) + nginx_prometheus_exporter / mysqld_exporter
  • 告警规则示例(PromQL):
    # 核心告警:CPU使用率 > 80%
    - alert: HighCPUUsage
      expr: (100 - (avg by(instance)(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)) > 80
      for: 5m
    # PHP-FPM 队列深度过大
    - alert: PHPFPMQueueOverflow
      expr: php_fpm_listen_queue > 10
      for: 1m
    # 磁盘占用告警
    - alert: DiskSpaceLow
      expr: (node_filesystem_avail_bytes{fstype!="tmpfs",mountpoint="/"} / node_filesystem_size_bytes{fstype!="tmpfs",mountpoint="/"} * 100) < 20

使用 Zabbix(传统监控)

  • 模板: 导入官方 Template OS Linux by Zabbix agentTemplate App PHP-FPM by Zabbix agent
  • 修改:
    • 将触发器的阈值从上文中推荐的数字修改(例如修改CPU触发器的值)。
    • 开启 PHP-FPM status page(修改 php-fpm.conf: pm.status_path = /status 并配置Nginx允许访问)。

特殊情况与避坑指南

  1. 避免毛刺: 不要因为CPU瞬间冲到100%就告警(例如PHP代码中有一个1秒的file_get_contents请求)。设置告警持续时间(例如连续3次采样都超标才告警),Prometheus 使用 for: 5m 来解决,Zabbix 可以在触发器设置 N 次。

  2. 连接数注意区分类型: PHP-FPM 在处理完一个请求后,不会主动断开 MySQL 连接(如果使用了持久连接 pconnect 或连接池)。process.max 设置为200,每个进程都持有一个MySQL连接,MySQL 连接数可能暴涨到 200 * N(多个服务器),告警阈值要结合实际情况调整。

  3. Opcache 内存不足: 如果发现 CPU 一直较高,且 Opcache 缓存命中率低,不要只告警 CPU。应优先配置 opcache.memory_consumption(建议配置为 128M-512M 或更多),并设置 opcache.revalidate_freq = 60 来减少文件改变时的冲击。

  4. 日志磁盘告警的精细化管理:

    • 不要只看 (根分区),要分别监控 /var/log/tmp 和 PHP日志目录。
    • 限制日志文件大小(使用 logrotate 配置 size 100M,保留30天)。

总结配置清单

监控项 警告阈值 严重阈值 推荐实现方式
CPU 使用率 75% (5min) 90% (5min) node_exporter / 云监控
内存使用率 80% 90% node_exporter
磁盘 (/) 使用率 80% 90% node_exporter
磁盘 (/var/log) 使用率 70% 80% node_exporter
磁盘 Inode 使用率 95% 98% node_exporter
Load Average 核心数 * 0.7 核心数 * 1.0 node_exporter
PHP-FPM 活跃进程 max_children * 0.8 max_children * 0.95 php-fpm_exporter
PHP-FPM 监听队列 > 0 (持续1分钟) > 10 php-fpm_exporter
慢日志新增行数 > 5行/分钟 > 20行/分钟 自定义脚本 (tail + wc)
HTTP 5xx 错误率 > 1% (5min) > 5% (5min) nginx_exporter
Opcache 命中率 < 95% < 85% php-fpm_exporter
服务存活 (healthcheck) 503/失败 503/失败 外部探针 (Blackbox Exporter)

建议: 优先配置 服务存活(监控进程是否存在)、磁盘空间(最容易导致服务完全停摆)和 PHP-FPM 慢日志(最能指导开发者优化性能)。

抱歉,评论功能暂时关闭!