簡體   English   中英

logstash-input-mongodb:控制輸出?

[英]logstash-input-mongodb: controlling the output?

我正在嘗試設置logstash-input-mongodb插件以從我的數據庫中讀取審核,但是所有解析策略似乎都存在問題,我看不到如何自定義任何內容。

“扁平化”的parse_method效果很好,但是它會忽略mongodb對象ID,並且不會在log_entry字段中的任何地方輸出它們。

“簡單” parse_method包含對象ID,但以無法確定如何使用日期過濾器進行解析的方式輸出日期(例如,“ 2017-02-12 16:30:00 UTC”)。 然后,在沒有適當時間戳的情況下,該插件似乎會自行生成與當前時間無關的時間戳(例如,在2022年)。

我還沒有弄清楚“挖掘”方法。

所以我的問題是:

  • 有沒有一種方法可以解析插件輸出的log_entry(請參見下面的示例)字段中的數據? 我已經嘗試過json過濾器,但它不是json,因為它已被ruby格式化。
  • 或者,是否有任何方法可以使“展平”方法包含對象ID?
  • 或者,是否可以獲得“簡單”方法來正確格式化mongodb ISODate字段?
  • 有什么方法可以防止插件從開始讀取數據(我只想將最后一天推入logstash)?

可以用任何配置復制,這是我的基本配置:

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 }
}

示例數據包括log_entry:

{
        "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字段中提取組織?

我嘗試了以下方法:

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

但這會引發rubyexception: 錯誤logstash.filters.ruby-發生Ruby異常:(eval):1:語法錯誤,意外的tINTEGER

如果使用simple parse_method,則可以使用以下模式輕松解析時間戳,該模式可以添加到日期過濾器中yyyy-MM-dd HH:mm:ss ZZZ

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

關於最后一點,我建議檢查since_*設置,該設置使您可以將已處理的內容保留為光標,並且僅在下次logstash重新啟動時從該光標開始。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM