首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Laravel使用elk解析日志(elasticsearch,logstash,kibana)

Laravel使用elk解析日志(elasticsearch,logstash,kibana)
EN

Stack Overflow用户
提问于 2017-09-13 19:16:32
回答 2查看 5.5K关注 0票数 1

我已经成功地为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

EN

回答 2

Stack Overflow用户

发布于 2018-03-04 04:21:43

一种简单的替代方法是使用Laralog

使用Laralog,可以将Laravel日志直接导入Elastic Search,而无需安装所有完整的Logstash堆栈,因此它适用于小型和容器环境。

用法示例:

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

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

票数 0
EN

Stack Overflow用户

发布于 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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46196097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档