Laravel使用麋鹿解析日志(elasticsearch、logstash、kibana)

Laravel使用麋鹿解析日志(elasticsearch、logstash、kibana),logstash,kibana,elastic-stack,logstash-grok,Logstash,Kibana,Elastic Stack,Logstash Grok,我已成功为Laravel应用程序配置了ELK,但我们面临Laravel日志的问题。我已经用下面的代码配置了logstash模板。但我在基巴纳收到了断线。根据以下详细信息,我尝试了两种不同的配置代码 20-laravel.conf laravel样本日志为: 所以我的主要问题是我们在kibana收到这条单行日志。例如,上面的日志代码被划分为不同的行消息,我们无法确定哪个行消息来自哪个错误 下图显示了单个laravel日志的Kibana日志输出。一个简单的替代方法是使用 使用Laralog,可以将

我已成功为Laravel应用程序配置了ELK,但我们面临Laravel日志的问题。我已经用下面的代码配置了logstash模板。但我在基巴纳收到了断线。根据以下详细信息,我尝试了两种不同的配置代码

20-laravel.conf


laravel样本日志为:

所以我的主要问题是我们在kibana收到这条单行日志。例如,上面的日志代码被划分为不同的行消息,我们无法确定哪个行消息来自哪个错误


下图显示了单个laravel日志的Kibana日志输出。

一个简单的替代方法是使用

使用Laralog,可以将日志直接拉至弹性搜索,而无需安装所有完整的日志存储堆栈,因此适用于小型和容器环境

用法示例:

laralog https://elasticsearch:9200 --input=laravel.log

Laralog将自动解析并发送日志。

一个简单的替代方法是使用

使用Laralog,可以将日志直接拉至弹性搜索,而无需安装所有完整的日志存储堆栈,因此适用于小型和容器环境

用法示例:

laralog https://elasticsearch:9200 --input=laravel.log

Laralog将自动解析和发送日志。

您应该创建一个新的提供程序来正确设置monolog,请尝试以下设置:

class LogstashProvider extends ServiceProvider
{
    public function boot(): void
    {
        $stream = storage_path('logs/laravel.log');
        $name = env('APP_NAME');

        $formatter = new LogstashFormatter($name, null, null, 'ctxt_', LogstashFormatter::V1);
        $streamHandler = new StreamHandler($stream, Logger::DEBUG, false);
        $streamHandler->setFormatter($formatter);

        Log::getMonolog()->pushHandler(
            $streamHandler
        );
    }
}

您还应该将日志存储配置为解析json,而不是

您应该创建一个新的提供程序来正确设置monolog,请尝试以下设置:

class LogstashProvider extends ServiceProvider
{
    public function boot(): void
    {
        $stream = storage_path('logs/laravel.log');
        $name = env('APP_NAME');

        $formatter = new LogstashFormatter($name, null, null, 'ctxt_', LogstashFormatter::V1);
        $streamHandler = new StreamHandler($stream, Logger::DEBUG, false);
        $streamHandler->setFormatter($formatter);

        Log::getMonolog()->pushHandler(
            $streamHandler
        );
    }
}

您还应该将日志库配置为解析json,而不是

我已经找到了一个解决方案来更改grok模式,如下所示:filter{grok{match=>{“message”=>“[%{TIMESTAMP_ISO8601:TIMESTAMP}]{DATA:env}.%{DATA:severity}:%{DATA:message in%{DATA:file}:%{NUMBER:line}(.|\r |\n)堆栈跟踪:(.\r |\r | n)},你能告诉我如何过滤掉生产错误日志吗?如何在管道中进行编码?我已经找到了一个解决方案来改变grok模式,如下所示:filter{grok{match=>{“message”=>“[%{TIMESTAMP_ISO8601:TIMESTAMP}]{DATA:env}.%{DATA:severity}:%{DATA:message in%{DATA:file}:%{NUMBER:line}(.|\r |\n)堆栈跟踪:(.| |\r |\r |\n)((?),你能告诉我如何过滤掉生产错误日志吗?如何在管道中编写代码?
class LogstashProvider extends ServiceProvider
{
    public function boot(): void
    {
        $stream = storage_path('logs/laravel.log');
        $name = env('APP_NAME');

        $formatter = new LogstashFormatter($name, null, null, 'ctxt_', LogstashFormatter::V1);
        $streamHandler = new StreamHandler($stream, Logger::DEBUG, false);
        $streamHandler->setFormatter($formatter);

        Log::getMonolog()->pushHandler(
            $streamHandler
        );
    }
}