如何将流明日志发送到ELK

时间:2019-06-25 15:57:56

标签: laravel elasticsearch logstash kibana lumen

我有一个用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之间的通信正常,因此我的配置中一定有问题。

1 个答案:

答案 0 :(得分:0)

有些切线,但是我发现运行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,所以它在一个容器中的2个容器中共享一个emptyDir卷,确实工作得很好。

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