簡體   English   中英

將 JSON 與 LogStash 結合使用

[英]Using JSON with LogStash

我要瘋了。 我有一個將日志寫入文件的應用程序。 每個日志條目都是一個 JSON 對象。 我的 .json 文件示例如下所示:

{"Property 1":"value A","Property 2":"value B"}
{"Property 1":"value x","Property 2":"value y"}

我正在拼命地將日志條目放入 LogStash。 為此,我創建了以下 LogStash 配置文件:

input {
  file {
    type => "json"
    path => "/logs/mylogs.log"
    codec => "json"
  }
}
output {
  file {
    path => "/logs/out.log"
  }
}

現在,我正在手動將記錄添加到 mylogs.log 以嘗試使其正常工作。 但是,它們在標准輸出中的出現很奇怪。 當我查看 open out.log 時,我看到如下內容:

{"message":"\"Property 1\":\"value A\", \"Property 2\":\"value B\"}","@version":"1","@timestamp":"2014-04-08T15:33:07.519Z","type":"json","host":"ip-[myAddress]","path":"/logs/mylogs.log"}

因此,如果我將消息發送到 ElasticSearch,我將無法獲取字段。 相反,我得到了一個混亂的爛攤子。 我需要我的屬性仍然是屬性。 我不希望它們塞進消息部分或輸出中。 我有一種預感,這與編解碼器有關。 然而,我不確定。 我不確定是否應該更改 logstash 輸入配置上的編解碼器。 或者,如果我應該更改輸出配置上的輸入。 我會真誠地感謝任何幫助,因為我在這一點上變得絕望。

謝謝。

嘗試刪除json 編解碼器並添加json 過濾器

input {
  file {
    type => "json"
    path => "/logs/mylogs.log"
  }
}
filter{
    json{
        source => "message"
    }
}
output {
  file {
    path => "/logs/out.log"
  }
}

您不需要 json 編解碼器,因為您不想解碼源 JSON,但您只想過濾輸入以獲取 @message 字段中的 JSON 數據。

希望這可以幫助。

默認情況下,如果未指定 json 編解碼器,tcp 會將所有內容放入消息字段。

在我們指定 json 編解碼器后消息字段的_jsonparsefailure的解決方法也可以通過執行以下操作來糾正:

input {
  tcp {
    port => '9563'
  }
}
filter{
  json{
    source => "message"
    target => "myroot"
  }
  json{
    source => "myroot"
  }

}
output {
    elasticsearch {
      hosts => [ "localhost:9200" ]
    }
}

它會將消息字段解析為正確的 json 字符串以輸入 myroot,然后解析 myroot 以生成 json。

我們可以刪除像消息這樣的冗余字段

filter {
  json {
    source => "message"
    remove_field => ["message"]
  }
}

試試這個:

filter {
  json {
        source => "message"
        target => "jsoncontent" # with multiple layers structure
  }
}

暫無
暫無

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

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