2017-09-13 4 views
0

Ich habe ELK erfolgreich für Laravel App konfiguriert, aber wir stehen vor dem Problem mit Laravel log. Ich habe Logstash Template mit folgendem Code konfiguriert. aber ich empfange Break line in Kibana. Ich habe zwei verschiedene Konfigurationscodes wie unten beschrieben ausprobiert.Laravel Parsing Log mit Elk (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 Probenprotokoll ist:

[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...') 

Also mein Hauptproblem ist, dass wir dieses Protokoll in Kibana in einer Zeile erhalten. zum Beispiel über Log-Code ist eine in verschiedene Zeile Nachricht geteilt und wir können nicht herausfinden, welche Zeile Nachricht von welchem ​​Fehler ist?

Die Kibana-Protokollausgabe für ein einzelnes Laravel-Protokoll wird in der folgenden Abbildung angezeigt. kibana log-output

+0

ich eine Lösung an veränderte grok Muster gefunden haben, wie pro unten: Filter { grok { match => { "message" => „\ [% {TIMESTAMP_ISO8601: Zeitstempel} \]% {DATA: env} \.% {DATA: Schweregrad}:% {DATA: Nachricht} in% {DATA: Datei}:% {NUMMER: Zeile} (. | \ R | \ n) Stack-Trace :(. | \ R | \ n) (? (. | \ R | \ n) *) "} } } – Roger

Antwort

0

Eine einfache Alternative ist die Verwendung Laralog.

Mit Laralog ist es möglich, Laravel direkt bei Elastic Search zu loggen, ohne den gesamten Logstash-Stack zu installieren, so dass es für kleine und Containerumgebungen geeignet ist.

Anwendungsbeispiel:

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

Laralog wird analysiert und die Protokolle automatisch senden.

Verwandte Themen