laravel - 如何将流明日志发送到 ELK

标签 laravel elasticsearch logstash kibana lumen

我有一个使用 Lumen 5.8 制作的微服务,我需要将所有日志发送到 Logstash,以便将它们保存在 ElasticSearch 中。

我需要尝试配置流明日志,但没有任何效果。

我在 logging.php 中创建了一个名为 logstash 的新 channel ,我使用 Monolog 作为驱动程序。

'channels' => [
        'logstash' => [
            'driver' => 'monolog',
            'level' => 'debug',
            'path' => storage_path('logs/lumen.log'),
            'handler' => \Monolog\Handler\SocketHandler::class,
            'handler_with' => [
                'host' => env('LOGSTASH_HOST'),
                'port' => env('LOGSTASH_PORT'),
            ],
        ],
]

我还更改了同一文件中的默认 channel :

    'default' => env('LOG_CHANNEL', 'stack'),

这是我的 .env:
LOG_CHANNEL=logstash
LOGSTASH_HOST=(here I have my Logstash URL)
LOGSTASH_PORT=5055

问题是我没有收到任何错误,但 ElasticSearch 中没有保存任何内容。
我很确定 LogStash 和 Elastic 之间的通信可以正常工作,所以我的配置肯定有问题。

最佳答案

有点切线,但我发现真正适合我的是运行 Filebeat拿起日志。

因此,您将使用默认的基于文件的日志记录配置运行 Lumen/Laravel,无需进行任何更改。您还可以运行 Filebeat 并将其配置为

  • 知道 Logstash 在哪里
  • 知道拿起 Laravel/Lumen 日志
  • # filebeat config
    filebeat.config:
      filebeat.prospectors:
        - type: log
          enabled: true
          paths:
            - /var/www/laravel/storage/logs/*.log
          tags:
            - laravel
            - myAppName
          fields:
            app: myAppName
    
      output.file:
        enabled: false
      output.logstash:
        hosts: ["logstash.local:5044"]
    

    我的部署环境是 Kubernetes,所以这在一个 pod 中的 2 个容器中运行得非常好,共享一个 emptyDir体积。

    如果您不想运行任何其他组件,这对您不起作用。

    关于laravel - 如何将流明日志发送到 ELK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56757944/

    相关文章:

    elasticsearch - Kibana:全新安装后无法创建仪表板

    reactjs - 如何修复 'Actions must be plain objects. Use custom middleware for async actions.'

    javascript - 在 laravel 中通过 javascript 获取信息

    elasticsearch - 对旧文档禁用_ttl

    java - Elasticsearch带数字的字符串的SuggestResponse错误

    wordpress - ElasticPress - 搜索元和高级自定义字段不起作用

    elasticsearch - 策展人未清除CloudWatch提供的过期索引

    php - App\Providers\AppServiceProvider::App\Providers\{closure}() 缺少参数 2

    Laravel,SQL 变量

    elasticsearch - Logstash 未更新上次运行的元数据文件