2016-07-05 11 views
1

私はlogstashを初めて使用しています。私は次のログ形式を持っています。Logstash内部オブジェクトの反復処理とデータベースへの挿入

{"library":"xyz","locations":["location1":"abc","location2":"mno"]} 

次に、これらのデータを次の形式でデータベースに追加する必要があります。

  • "場所": "ライブラリ"(データベースフィールド)
  • "ABC": "XYZ"
  • "MNO": "XYZ"

は、これまでのところ私は、抽出行っていますjsonとレコードをデータベースに保存します。しかし、上記のシナリオでは、データベースに2つのエントリを追加する必要があります。私は場所を繰り返す方法を知る必要があり、それぞれの場所はデータベースの.documentationリンクまたは簡単な例で十分であるレコードにレコードを追加する必要があります。

これは、あなたがフィールドの各分割のための個別のイベントを作成しsplit filter、と望むものを達成することができるかもしれ

input { 
file { 
    path=> "filePath" 
    start_position => beginning 
    sincedb_path => "/dev/null" 
} 
} 
filter { 

    grok{ 
     match => { "message" => "%{GREEDYDATA:request}"} 
    } 
    json{ 
      source => "request" 
      target => "parsedJson" 
    } 

    mutate { 
      add_field => 
      "locations" => "%{[parsedJson][locations]}" 
      "library" => "%{[parsedJson][library]}" 
      } 
      remove_field => ["request", "message", "@version", "host", "parsedJson"] 
    } 

} 
output { 
    stdout { 
    codec => rubydebug 
    } 
    mongodb{ 
      collection => "library" 
      database => "db" 
      uri => "mongodb://127.0.0.1:27017" 
    } 

} 
+0

データベースと言うと、elasticsearchの観点からの出力を意味しますか?質問を編集して出力設定を追加できますか? – pandaadb

+0

こんにちは@pandaadb私は設定ファイルを更新しました。あなたのコメントをありがとうございます。 – Sajithv

+0

大丈夫です - あなたの望むようにこれが可能でないかもしれないと思います。出力は1イベントのみを取得し、そのイベントを送信します。それらを別々にするには、(a)フィールドを分離して新しいイベントを生成するフィルタを作成するか(現在はカスタムフィルタでのみ可能です)、(b)mongodbに基づいて独自の出力プラグインを作成するかそこに正しいこと。 – pandaadb

答えて

1

私のconfファイルです。あなたはカンマで区切られ、アレイ内の2つの場所を持っていた場合は、値をコンマ区切りごとに別々のイベントを作成します

split { 
    target => "field" 
    terminator => "," 
} 

を使用することができます。