2017-02-12 4 views
0

logstash-input-mongodbプラグインがデータベースからの監査を読み取るように設定しようとしていますが、すべての解析戦略に問題があるようで、何もカスタマイズする方法がわかりません。logstash-input-mongodb:出力を制御しますか?

"flatten" parse_methodは非常にうまく動作しますが、mongodbオブジェクトIDは無視され、log_entryフィールド以外のどこにも出力されません。

「単純な」parse_methodにはオブジェクトIDが含まれていますが、日付フィルタを解析する方法(たとえば、「2017-02-12 16:30:00 UTC」)はわかりません。次に、適切なタイムスタンプがない場合、プラグインは、現在の時刻とは関係のないタイムスタンプを独自に生成するように見えます(たとえば、2022年)。

"dig"メソッド私はまだ分かりません。

だから私の質問:

  • LOG_ENTRYからのデータを解析する方法はあります(以下の例を参照)フィールドのプラグインが出力しますか?私はjsonフィルターを試しましたが、ルビーフォーマットだったのでjsonではありません。
  • または、オブジェクトIDを含むように「平坦化」メソッドを取得する方法はありますか?
  • または、mongodb ISODateフィールドを適切にフォーマットするための「シンプルな」方法を得ることができますか?
  • プラグインが最初からデータを読み込まないようにする方法はありますか(私は最後の日かそれ以上をlogstashにプッシュしたいだけです)?

    { 
         "audit-id" => "58a2edc916e057270065fa74", 
         "created" => "2017-02-14T11:45:13Z", 
          "type" => "mongodb-audit", 
         "audit-type" => "PaymentAudit", 
         "mongo_id" => "58a2edc916e057270065fa74", 
         "expiresAt" => "2017-05-15T11:45:13Z", 
        "lastUpdated" => "2017-02-14T11:45:13Z", 
         "@timestamp" => 2017-02-14T11:45:13.000Z, 
         "log_entry" => "{\"_id\"=>BSON::ObjectId('58a2edc916e057270065fa74'), \"order\"=>BSON::ObjectId('a8a2f205790858970046aa59'), \"_type\"=>\"PaymentAudit\", \"lastUpdated\"=>2017-02-14 11:45:13 UTC, \"created\"=>2017-02-14 11:45:13 UTC, \"payment\"=>BSON::ObjectId('58a2edc02eafcd560101ee5f'), \"organization\"=>BSON::ObjectId('56edde0ba33e1c03ff54a5ec'), \"status\"=>\"succeeded\", \"context\"=>{\"type\"=>\"order\", \"id\"=>BSON::ObjectId('58a2e205790852270046ab59')}, \"expiresAt\"=>2017-05-15 11:45:13 UTC, \"__v\"=>0}", 
         "logdate" => "2017-02-14T11:45:13+00:00", 
          "__v" => 0, 
         "@version" => "1", 
        "context_type" => "order", 
          "status" => "succeeded", 
         "timestamp" => "2017-02-14T11:45:13Z" 
    } 
    

    がどのように私は上記のLOG_ENTRYフィールドから組織を抽出することができます。LOG_ENTRY含む

    input { 
        mongodb { 
        uri => 'mongodb://localhost:27017/test' 
        placeholder_db_dir => '/elk/logstash-mongodb/' 
        placeholder_db_name => 'logstash_sqlite.db' 
        collection => 'auditcommunications' 
        batch_size => 1000 
        parse_method => "flatten" 
        } 
    } 
    
    filter { 
        date { 
        match => [ "timestamp", "ISO8601" ] 
        } 
    } 
    
    output { 
        stdout { codec => rubydebug } 
    } 
    

    例データ:

は、ここに私の基本的なものをだ、任意の構成で再現することはできますか?

私は次のことを試してみた:

filter { 
    ruby { 
    code => "event.set('organization', eval(event.get('[log_entry]')))" 
    } 
} 

が、これはrubyexceptionをスロー:ERRORのlogstash.filters.rubyを - Rubyの例外が発生しました:(evalの):1:構文エラー、予期しないtINTEGER

+0

ログストアの設定を共有できますか? @Valがそれを加えました: – Val

+0

私はそれをさまざまな方法で試してみましたが、何も違いはないようですので、それはそれほど重要ではないと思います。 – joniba

+0

4番目の点については、 'since_ *'設定を試してみましたか? – Val

答えて

1

simple parse_methodを使用すると、日付フィルタに追加できる次のパターンyyyy-MM-dd HH:mm:ss ZZZで簡単にタイムスタンプを解析できます。

filter { 
    date { 
    match => [ "timestamp", "yyyy-MM-dd HH:mm:ss ZZZ" ] 
    } 
} 

最後の点については、私はあなたがすでに処理され、唯一の次logstash再起動時にそのカーソルから開始されているもののカーソルを維持することができsince_*設定を確認お勧めします。

+0

また、since_ *の設定が古代のエントリの処理を妨げるのを理解していませんか?例を見せてもらえますか?そして、「yyyy-MM-dd HH:mm:ss Z」は、単純な解析メソッド(「2017-02-12 16:30:00 UTC」など)によって返される日付に対して私にとっては機能しません。私は_dateparsefailureタグを取得しています。 – joniba

+0

私は自分の答えを変更して、日付パターンを動作させました。私はその後のものをフォローアップ – Val

+0

ありがとう、日付フィルタが動作するようです。私は永遠にそれを乱し、それを働かせなかった。私は "log_entry"フィールドを持つサンプル出力を追加しました。どのように私はそれのオブジェクトIDを解析することができますどのような考えですか?私がシンプルであろうとフラットであろうと、私はこの分野からデータを抽出することを学ばなければならないことが分かります。 – joniba

関連する問題