温馨提示×

centos服务器上如何监控thinkphp

小樊
54
2025-10-06 23:06:51
栏目: 云计算

在CentOS服务器上监控ThinkPHP的方法

1. 查看ThinkPHP自身日志

ThinkPHP内置了日志功能,可通过日志快速定位应用运行问题。日志默认存储在项目目录的runtime/log文件夹下(如app.log记录常规日志、error.log记录错误日志)。

  • 实时查看日志:使用tail -f /path/to/thinkphp-project/runtime/log/app.log命令,实时跟踪最新日志输出。
  • 筛选特定日志:用grep命令过滤关键字,例如查看2025年10月6日的错误日志:grep '2025-10-06' /path/to/thinkphp-project/runtime/log/error.log

2. 利用系统命令行工具监控资源

通过CentOS系统自带的命令行工具,可实时监控ThinkPHP进程的资源占用情况:

  • 查看PHP进程状态tophtop(需安装,yum install htop)命令,按P键按CPU使用率排序,按M键按内存使用率排序,快速定位高消耗的ThinkPHP进程。
  • 统计PHP进程数量ps aux | grep php | wc -l,查看当前运行的PHP进程总数,判断是否存在进程异常增长。
  • 查看磁盘空间df -h,检查服务器磁盘空间是否充足(避免因磁盘满导致ThinkPHP无法写入日志或缓存)。
  • 查看网络连接netstat -tulnp | grep php,查看ThinkPHP进程的网络连接状态,排查端口占用问题。

3. 自定义ThinkPHP中间件记录性能指标

通过自定义中间件,可记录ThinkPHP应用的请求耗时、内存使用等性能数据,并写入日志或发送到监控系统:

  • 创建中间件:在app/middleware目录下新建PerformanceMiddleware.php文件,代码如下:
    namespace app\middleware;
    use think\facade\Log;
    use think\Middleware\BaseMiddleware;
    
    class PerformanceMiddleware extends BaseMiddleware
    {
        public function handle($request, \Closure $next)
        {
            $start_time = microtime(true);
            $response = $next($request);
            $end_time = microtime(true);
            $cost_time = $end_time - $start_time;
            $memory_usage = memory_get_usage() / 1024 / 1024; // 转换为MB
    
            Log::info("请求路径: {$request->path()}, 耗时: {$cost_time}秒, 内存使用: {$memory_usage}MB");
            return $response;
        }
    }
    
  • 注册中间件:在app/middleware.php中添加中间件,使其生效:
    return ['app\middleware\PerformanceMiddleware'];
    
    执行后,所有请求的性能数据会记录到runtime/log目录下的日志文件中。

4. 集成第三方APM工具(如Prometheus+Grafana)

第三方APM工具可实现更专业的性能监控和可视化,适合生产环境:

  • Prometheus+Grafana方案
    1. 安装Prometheus:在CentOS上安装Prometheus(参考官方文档),配置prometheus.yml文件,添加ThinkPHP应用的指标抓取任务(需ThinkPHP暴露指标接口)。
    2. ThinkPHP暴露指标:通过中间件或扩展(如think-prometheus),让ThinkPHP应用暴露/metrics接口,输出Prometheus格式的指标数据(如请求次数、响应时间、错误率)。
    3. 配置Grafana:在Grafana中添加Prometheus数据源,导入ThinkPHP监控面板(如社区提供的ThinkPHP Grafana Dashboard),实现性能数据的可视化展示(如请求耗时趋势图、错误率报警)。
  • 优势:支持实时监控、历史数据查询、报警功能(如当请求耗时超过阈值时发送邮件/短信报警)。

5. 使用第三方专业监控服务(如Datadog、New Relic)

若不想自建监控系统,可使用成熟的第三方服务,快速实现ThinkPHP监控:

  • Datadog方案
    1. 注册并获取API密钥:访问Datadog官网注册账号,获取API KeyApplication Key
    2. 安装Datadog PHP库:在ThinkPHP项目根目录下运行composer require datadog/php-datadogstatsd,安装Datadog PHP SDK。
    3. 配置Datadog:创建config/datadog.php文件,配置Datadog Agent地址和标签:
      return [
          'host' => 'localhost',
          'port' => 8125,
          'namespace' => 'thinkphp_app',
          'tags' => ['env:production'],
      ];
      
    4. 创建服务提供者:在app/provider.php中注册Datadog服务:
      namespace app;
      use think\Service;
      use DataDog\DogStatsd;
      
      class DatadogService extends Service
      {
          public function register()
          {
              $this->app->bind('datadog', function () {
                  $config = config('datadog');
                  return new DogStatsd($config);
              });
          }
      }
      
    5. 记录监控数据:在控制器或中间件中使用Datadog记录指标,例如记录请求执行时间:
      namespace app\controller;
      use think\Controller;
      use think\facade\App;
      
      class Index extends Controller
      {
          public function index()
          {
              $datadog = App::make('datadog');
              $start_time = microtime(true);
              // 业务逻辑代码
              $elapsed_time = microtime(true) - $start_time;
              $datadog->timing('index.request_time', $elapsed_time);
              return 'Hello, ThinkPHP!';
          }
      }
      
  • 优势:无需维护监控基础设施,支持全栈监控(应用、服务器、数据库),提供高级分析功能(如关联错误与请求、性能瓶颈定位)。

6. 监控ThinkPHP端口运行状态

通过监控ThinkPHP应用的端口(如80、443或自定义端口),确保应用服务正常运行:

  • 编写Shell脚本:创建/path/to/script/check_port.sh文件,内容如下:
    #!/bin/bash
    PORT=80 # 替换为ThinkPHP应用的端口
    if netstat -tulnp | grep -q ":$PORT "; then
        echo "$(date): Port $PORT is running."
    else
        echo "$(date): Port $PORT is down!" | mail -s "ThinkPHP Port Down Alert" admin@example.com
    fi
    
  • 设置定时任务:使用crontab -e命令添加定时任务,每2分钟执行一次脚本:
    */2 * * * * /bin/bash /path/to/script/check_port.sh
    
    当端口未监听时,脚本会发送邮件报警(需配置邮件服务)。

以上方法可根据实际需求组合使用,例如:小型项目可采用日志监控+系统命令,中大型项目建议采用第三方APM工具+端口监控,以实现全面的ThinkPHP监控。

0