2016-06-21 3 views
0

私のログをsymfony3アプリケーションのELKスタックでログに記録して分析しています。 symfonyアプリケーションから少し深いjsonsオブジェクトをログに記録します。 木場が私のjsonをjsonと解釈して文字列ではない方法はありますか?ここでSymfony - ELK - jsonがMonologにログオンしていると解釈する

は、私がログインしてる方法の一例である

$this->logger->notice('My log message', array(
    'foo'   => 'bar, 
    'myDeepJson1' => $deepJson1, 
    'myDeepJson2' => $deepJson2   
)); 

そしてそこに、私のlogstash.conf。実は、私の$ deepJson変数は、二重エンコードされ、私がログインしていenverythingがlog_context変数であるが、モノローグはJSONに配列を変換し、そのhttps://github.com/eko/docker-symfony

input { 
    redis { 
     type  => "symfony" 
     db  => 1 
     key  => monolog 
     data_type => ['list'] 
     host  => "redis" 
     port  => 6379 
    } 
} 

filter { 
    if [type] == "symfony" { 
     grok { 
      patterns_dir => "./patterns" 
      match  => [ "message", "%{SYMFONY}" ] 
     } 
     date { 
      match => [ "date", "YYYY-MM-dd HH:mm:ss" ] 
     } 
     if [log_type] == "app" { 
      json { 
       source => "log_context" 
      } 
     } 
    } 
} 

output { 
    if [type] == "symfony" { 
     elasticsearch { 
      hosts => ["172.17.0.1:9201"] 
      index => "azureva-logstash" 
     } 
    } 
} 

:私は私がここで見つけるsymfonyのパターンを使用しましたコンテキストに多次元配列を記録する方法はありません。

助けていただければ幸いです。ありがとう!

答えて

0

log_contextからrequestJsonを取得したら、jsonプラグインで解析できるようにするには、\ "with"をすべて再配置する必要があります。
mutateフィルタとそのgsubオプション(documentation)で実行できます。
その後、結果のjsonをjsonプラグインで解析できます。

あなたがあなたのドキュメント更新することができます。参考のため

if [log_type] == "app" { 
    json { 
     source => "log_context" 
    } 
    mutate { 
     gsub => ["requestJson", "\\"", "\""] 
    } 
    json { 
     source => "requestJson" 
     target => "requestJsonDecode" 
    } 
} 
+0

:[JSONコーデック]を(https://www.elastic.co/guide/en/logstash/2.2/plugins-codecs-json.html ) – baudsp

+0

こんにちは、あなたの答えをありがとう、しかしこれは私の問題を解決しません... jsonの文字列は解釈されていません...私はテーブルのようなjsonでナビゲートすることができるようにしたいと思います... Kibanaまだ生のjsonとして私にフィールドを示しています – nikophil

+0

いくつかのログの例を追加してESで何をしたいですか?あなたの問題を理解するのに役立つかもしれない – baudsp

関連する問題