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/

    相关文章:

    拉拉维尔 5 : Calling routes internally

    php - 1 条消息用于多个 required_without 规则

    node.js - 如何在 Node js 中访问 laravel env 变量?

    elasticsearch - 在Elastic搜索中基于定界符对字符串进行标记

    json - Logstash:解析通过Web服务(如twitter/facebook等)接收到的Json数据时,解析失败

    elasticsearch - 如何动态地将更多Kafka主题添加到Logstash配置

    javascript - 如何从 Laravel Blade 访问 JWT?

    linux - Raspberry Pi 上的 ElasticSearch 退出

    solr - 如何突出显示ElasticSearch或Solr中的所有术语?

    elasticsearch - 为通过 logstash 发送到 Elasticsearch 的每个日志附加一个 TTL 字段