2017-09-13 244 views
0

我已成功配置ELK Laravel應用程序,但我們正面臨與Laravel日誌的問題。我用下面的代碼配置了logstash模板。但是我在Kibana收到了Break line。根據以下細節,我嘗試了兩種不同的配置代碼。Laravel解析日誌與麋鹿(elasticsearch,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} \[" } 
    } 
    } 
} 

laraval示例日誌是:

[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。例如,上面的日誌代碼是分爲不同的行消息,我們不知道哪條消息來自哪個錯誤?

下圖中顯示單個laravel日誌的Kibana日誌輸出。 kibana log-output

+0

我已經找到了解決改變神交圖案按如下: 濾波器{ 神交{ 匹配=> { 「消息」=>「\ [%{TIMESTAMP_ISO8601:時間戳} \]%{DATA:ENV} \。%{DATA:severity}:%{DATA:message} in%{DATA:file}:%{NUMBER:line}(。| \ r | \ n)堆棧跟蹤:(。| \ r | \ n) (?(。| \ r | \ n)*)「} } } – Roger

回答

0

一個簡單的選擇是使用Laralog

使用Laralog,可以將Laravel直接記錄到Elastic Search,而無需安裝所有完整的Logstash堆棧,因此它適用於小型和容器環境。使用的

實施例:

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

Laralog將解析並自動發送日誌。