【问题标题】:How to send Lumen logs to ELK如何将流明日志发送到 ELK
【发布时间】:2019-06-25 15:57:56
【问题描述】:

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

我需要尝试配置 Lumen 日志记录,但没有任何效果。

我在 logging.php 中创建了一个名为 logstash 的新频道,我使用 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'),
            ],
        ],
]

我还更改了同一个文件中的默认频道:

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

这是我的 .env:

LOG_CHANNEL=logstash
LOGSTASH_HOST=(here I have my Logstash URL)
LOGSTASH_PORT=5055

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

【问题讨论】:

    标签: laravel elasticsearch logstash kibana lumen


    【解决方案1】:

    有点切题,但我发现真正适合我的是运行 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 卷。

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

    【讨论】:

    • 如果网络或 Logstash 出现故障,这也会更加稳定。如果你可以直接登录到 JSON,你的生活会更轻松(Monolog 可以做到)
    猜你喜欢
    • 1970-01-01
    • 2018-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-02
    • 2020-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多