You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Laravel项目搭建ELK Stack实现日志监控与可视化分析?

Laravel 项目搭建 ELK Stack 日志监控指南

一、环境准备

以 Ubuntu/Debian 服务器为例,先完成基础依赖安装:

  • 确保服务器已安装对应 Laravel 版本的 PHP(>=7.4,根据你的 Laravel 版本调整)
  • 安装 ELK 依赖的 Java 11+:
    sudo apt update && sudo apt install openjdk-11-jre-headless
    
  • 验证 Java 安装:java -version,确认输出版本信息即可。

二、安装 ELK 组件

1. 安装 Elasticsearch

  • 添加 Elastic 官方源并安装:
    wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
    echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic.list
    sudo apt update && sudo apt install elasticsearch
    
  • 启动并设置开机自启:
    sudo systemctl enable --now elasticsearch
    
  • 验证安装:curl http://localhost:9200,返回包含集群信息的 JSON 响应即为成功。

2. 安装 Kibana

  • 直接通过已添加的源安装:
    sudo apt install kibana
    
  • 启动并设置开机自启:
    sudo systemctl enable --now kibana
    
  • 初始化访问:浏览器打开 http://你的服务器IP:5601,按提示运行以下命令获取 Kibana 注册令牌,完成初始化:
    sudo /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana
    

3. 安装 Logstash

  • 通过官方源安装:
    sudo apt install logstash
    
  • 启动并设置开机自启:
    sudo systemctl enable --now logstash
    

三、配置 Laravel 日志输出

为了让 Logstash 能轻松解析,需将 Laravel 日志改为 JSON 格式:

方式1:输出到 JSON 文件

  • 编辑 config/logging.php,新增一个 json 日志通道:
    'json' => [
        'driver' => 'single',
        'path' => storage_path('logs/laravel.json'),
        'formatter' => \Monolog\Formatter\JsonFormatter::class,
    ],
    
  • 修改 .env 文件,指定日志通道:
    LOG_CHANNEL=json
    

方式2:输出到标准错误流(适合容器或进程管理场景)

  • 编辑 config/logging.php,在 stack 通道中添加 stderr 子通道:
    'stack' => [
        'driver' => 'stack',
        'channels' => ['single', 'stderr'],
        'ignore_exceptions' => false,
    ],
    'stderr' => [
        'driver' => 'monolog',
        'handler' => StreamHandler::class,
        'formatter' => \Monolog\Formatter\JsonFormatter::class,
        'with' => [
            'stream' => 'php://stderr',
        ],
    ],
    
  • 修改 .env:
    LOG_CHANNEL=stack
    

四、配置 Logstash 收集解析 Laravel 日志

Logstash 配置分为输入、过滤、输出三部分,创建专属配置文件:

sudo nano /etc/logstash/conf.d/laravel-log.conf

1. 输入配置(以 JSON 文件为例)

input {
    file {
        path => "/var/www/你的Laravel项目路径/storage/logs/laravel.json"
        start_position => "beginning" # 首次启动读取历史日志,生产环境可改为"end"
        codec => "json" # 直接解析JSON格式日志
    }
}

2. 过滤配置(解析并清洗日志字段)

filter {
    # 将Laravel的datetime字段转为Elasticsearch标准时间字段
    date {
        match => [ "datetime", "Y-m-d H:i:s" ]
        target => "@timestamp"
    }
    # 提取请求URL、用户ID等上下文字段(根据你的日志结构调整)
    if [context][url] {
        mutate {
            add_field => { "request_url" => "%{[context][url]}" }
        }
    }
    if [context][user_id] {
        mutate {
            add_field => { "user_id" => "%{[context][user_id]}" }
        }
    }
    # 移除敏感或无用字段
    mutate {
        remove_fields => ["datetime", "password", "token", "extra"]
    }
}

3. 输出配置(发送到 Elasticsearch)

output {
    elasticsearch {
        hosts => ["http://localhost:9200"]
        index => "laravel-logs-%{+YYYY.MM.dd}" # 按日期拆分索引,便于管理
    }
    # 调试阶段可打开以下配置,在控制台查看解析后的日志
    # stdout { codec => rubydebug }
}

验证并重启 Logstash

  • 测试配置文件合法性:
    sudo /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/laravel-log.conf --config.test_and_exit
    
  • 重启 Logstash 生效:
    sudo systemctl restart logstash
    

五、Kibana 可视化配置

1. 创建索引模式

  • 进入 Kibana 的 Stack Management → Index Patterns → Create index pattern
  • 输入索引匹配规则 laravel-logs-*,点击 Next step
  • 选择 @timestamp 作为时间字段,点击 Create index pattern

2. 常用可视化示例

(1)日志级别分布饼图

  • 进入 Visualize Library → Create visualization → 选择 Pie
  • 关联刚创建的索引模式
  • Metrics 选择 Count,Buckets 添加 Split slices,字段选 level_name.keyword
  • 点击 Update 预览效果,保存为「日志级别分布」

(2)请求响应时间趋势图(需 Laravel 日志包含响应时间字段)

  • 创建 Line 类型可视化
  • Metrics 选择 Average,字段选 context.response_time(需提前在 Laravel 日志中添加该字段)
  • Buckets 添加 X-axis,类型选 Date Histogram,字段为 @timestamp,间隔选 Auto
  • 保存为「请求响应时间趋势」

(3)错误日志快速查看

  • 进入 Discover,添加筛选条件 level_name: ERROR,保存该搜索,后续可直接打开查看所有错误日志

六、优化建议

  • 日志轮转:配置 logrotate 避免 Laravel 日志文件过大,创建配置文件 /etc/logrotate.d/laravel:
    /var/www/你的Laravel项目路径/storage/logs/laravel.json {
        daily
        missingok
        rotate 30
        compress
        delaycompress
        notifempty
        create 644 www-data www-data
    }
    
  • 性能优化:高流量项目建议用 Filebeat 代替 Logstash 直接收集日志,再转发到 Logstash/Elasticsearch,降低 Logstash 负载
  • 日志字段增强:在 Laravel 的 AppServiceProvider 中添加上下文信息,比如用户ID、请求IP:
    use Illuminate\Support\Facades\Log;
    
    public function boot()
    {
        Log::withContext([
            'user_id' => auth()->id() ?? null,
            'request_ip' => request()->ip(),
            'environment' => app()->environment(),
        ]);
    }
    
  • 安全配置:给 Elasticsearch 设置用户名密码,Kibana 开启登录验证,防止未授权访问

内容的提问来源于stack exchange,提问作者Kaio Da Dalt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 22:00:43