我已经成功地为Laravel应用程序配置了ELK,但我们遇到了Laravel日志的问题。我已经用下面的代码配置了logstash模板。但是我在Kibana收到了中断线路。根据下面的详细信息,我尝试了两种不同的配置代码。
20-laravel.conf
input {
stdin{
codec => multiline {
pattern => "^\["
what => "previous"
negate => true
}
}
}
filter {
grok {
match => { "message" => "\[%{TIMESTAMP_ISO8601:timestamp}\] %{DATA:env}\.%{DATA:severity}: %{DATA:message}" }
}
}
output {
elasticsearch {
document_type => "logs"
hosts => ["127.0.0.1"]
index => "laravel_logs"
}
}
filter {
# Laravel log files
if [type] == "laravel" {
grok {
match => { "message" => "\[%{TIMESTAMP_ISO8601:timestamp}\] %{DATA:env}\.%{DATA:severity}: %{DATA:message} \[" }
}
}
}
laravel示例日志为:
[2017-09-13 16:19:28] production.ERROR: Symfony\Component\Debug\Exception\FatalThrowableError: Parse error: syntax error, unexpected identifier (T_STRING), expecting ',' or ')' in /var/www/app/Http/Controllers/BrandsController.php:57
Stack trace:
#0 /var/www/vendor/composer/ClassLoader.php(322):
Composer\Autoload\includeFile('/var/www/vendor...')
#1 [internal function]: Composer\Autoload\ClassLoader-
>loadClass('App\\Http\\Contro...')
#2 [internal function]: spl_autoload_call('App\\Http\\Contro...')
所以我的主要问题是,我们在
中收到了单行的日志。例如,上面的日志代码是一个被分成不同行的消息,我们不能确定哪一行消息来自哪个错误?
下图显示了单个幼虫日志的Kibana日志输出。kibana log-output
发布于 2018-03-04 04:21:43
一种简单的替代方法是使用Laralog。
使用Laralog,可以将Laravel日志直接导入Elastic Search,而无需安装所有完整的Logstash堆栈,因此它适用于小型和容器环境。
用法示例:
laralog https://elasticsearch:9200 --input=laravel.log
Laralog将自动解析并发送日志。
发布于 2018-06-08 03:44:49
您应该创建一个新的提供程序来正确设置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
);
}
}
您还应该将logstash配置为解析json
https://stackoverflow.com/questions/46196097
复制相似问题