Laravel使用麋鹿解析日志(elasticsearch、logstash、kibana)
我已成功为Laravel应用程序配置了ELK,但我们面临Laravel日志的问题。我已经用下面的代码配置了logstash模板。但我在基巴纳收到了断线。根据以下详细信息,我尝试了两种不同的配置代码 20-laravel.confLaravel使用麋鹿解析日志(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样本日志为: 所以我的主要问题是我们在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
);
}
}