温馨提示×

Linux环境下ThinkPHP如何监控

小樊
43
2025-11-26 17:11:30
栏目: 编程语言

Linux环境下 ThinkPHP 监控实践

一 进程守护与自动重启

  • 使用Supervisor管理常驻进程(如队列、Workerman、Swoole),异常退出可自动拉起,并提供标准化启停与日志能力。
  • 安装与启用(以 CentOS 为例):
    • 安装:yum install -y supervisor
    • 验证:supervisord -v
    • 开机自启:systemctl enable --now supervisord
  • 队列示例(think-queue 常驻监听):
    • 配置文件:/etc/supervisord.d-queue.ini
      [program:think-queue]
      command=/usr/bin/php /data/www queue:listen
      directory=/data/www/your-project
      process_name=%(process_num)02d
      numprocs=2
      autostart=true
      autorestart=true
      startsecs=5
      startretries=5
      redirect_stderr=true
      stdout_logfile=/var/log-queue.out.log
      stderr_logfile=/var/log-queue.err.log
      user=www-data
      
    • 常用命令:
      • 启动/重载:supervisorctl start think-queuesupervisorctl update(热更新配置)
      • 状态/重启:supervisorctl statussupervisorctl restart think-queue
  • 多进程与多端口守护(如 Swoole/Workerman 多端口服务):
    • 通过多 program分别守护不同端口,或用numprocs+process_name扩展多个 worker;必要时在程序内做端口自检与报警(如用 Swoole 定时器探测监听端口存活)。

二 应用性能与业务指标监控

  • APM 与指标上报(生产推荐):
    • 集成Datadog PHP Library(datadog/php-datadogstatsd),在服务启动时绑定 DogStatsd,记录请求耗时、队列处理时长、异常计数等自定义指标,并在控制台进行可视化与告警配置。
    • 快速接入示例:
      • 安装:composer require datadog/php-datadogstatsd
      • 配置:config/datadog.php(设置 agent 地址、端口、命名空间与标签)
      • 使用(在控制器/队列任务中):
        use DataDog\DogStatsd;
        $statsd = new DogStatsd(['host'=>'127.0.0.1','port'=>8125,'namespace'=>'tp_app']);
        $start = microtime(true);
        // ...业务逻辑...
        $statsd->timing('tp.request.duration', (microtime(true)-$start)*1000, ['route'=>'/index']);
        $statsd->increment('tp.job.processed', 1, ['queue'=>'default']);
        
  • 代码级性能剖析(问题定位阶段):
    • 使用XHProf采集函数调用次数、CPU、内存等指标,定位慢函数与热点路径;适合临时开启的深度分析,不建议长期开启以免影响性能。

三 系统资源与健康监控

  • 主机层面建议常驻监控:
    • 资源监控:htop(交互式资源)、vmstatiostatsardstatglances,覆盖CPU、内存、磁盘 I/O、网络等核心指标,便于发现瓶颈与异常抖动。
    • 日志与告警:将 Supervisor 与业务日志接入集中式日志平台(如 ELK/EFK),对进程崩溃、队列积压、异常日志激增设置阈值告警,缩短 MTTR。

四 ThinkPHP 内置能力与开发调试

  • 开发/预发环境建议开启调试面板日志,快速查看请求信息、SQL、耗时等;生产环境关闭调试模式,仅保留必要日志级别与异常记录。
  • 自定义中间件记录请求耗时,便于无侵入地观测接口性能:
    namespace app\middleware;
    use think\facade\Request;
    use think\facade\Log;
    class PerformanceLogger {
        public function handle($request, \Closure $next) {
            $start = microtime(true);
            $response = $next($request);
            $duration = (microtime(true) - $start) * 1000; // ms
            Log::info("Request to ".Request::url()." took ".round($duration,2)."ms");
            return $response;
        }
    }
    
  • 异常统一处理:配置exception_handle,在捕获未处理异常时记录堆栈与上下文,并结合告警策略提升可观测性。

0