Logstash Json 過濾器插件

1. Json Filter

功能概述

這是一個JSON解析過濾器。它接受一個包含JSON的現有字段,並將其擴展爲Logstash事件中的實際數據結構。html

默認狀況下,它將把解析過的JSON放在Logstash事件的根(頂層)中,可是這個過濾器能夠配置爲使用目標配置將JSON放到任意的事件字段中。web

若是JSON解析在數據上失敗了,事件將不會受到影響,它將被標記爲_jsonparsefailure,而後您可使用條件來清理數據。您可使用tag_on_failure選項配置此標記。json

若是解析後的數據包含@timestamp字段,咱們將嘗試將其用於事件的@timestamp,若是解析失敗,該字段將被重命名爲_@timestamp,事件將被標記爲_timestampparsefailure。api


Json 過濾器配置選項

Setting Input type Required

skip_on_invalid_json數據結構

booleanide

Nojsonp

sourceui

string編碼

Yesspa

tag_on_failure

array

No

target

string

No

skip_on_invalid_json:

容許在無效的json上跳過過濾器(容許不帶警告地處理json和非json數據)


source:

source => source_field
例如json數據在message字段中,將會從message字段中解析json數據
filter {
  json {
    source => "message"
  }
}

tag_on_failure:

默認值["_jsonparsefailure"]當沒有成功匹配時,將值附加到標記字段

例如:

image

target:

定義放置已解析數據的目標字段。若是省略此設置,則JSON數據將存儲在事件的根(頂層)。源字段值中的JSON將擴展爲目標字段中的數據結構。

例如將解析後的結果放到MyMessage字段

filter {
  json {
    target => "MyMessage"
  }
}

通用配置項

下述選項全部的過濾器都支持
Setting Input type Required

add_field

hash

No

add_tag

array

No

enable_metric

boolean

No

id

string

No

periodic_flush

boolean

No

remove_field

array

No

remove_tag

array

No

add_field:

若是過濾成功,則向此事件添加任意字段。字段名能夠是動態的,並使用%{Field}包含事件的一部分。

例如:

filter {
  json {
    add_field => { "foo_%{somefield}" => "Hello world, from %{host}" }
  }
}
filter {
  json {
    add_field => {
      "foo_%{somefield}" => "Hello world, from %{host}"
      "new_field" => "new_static_value"
    }
  }
}
若是事件具備字段「somefield」==「hello」,那麼在成功時,這個過濾器將添加字段foo_hello(若是存在的話),上面的值和%{host}塊將被事件中的值替換。第二個示例還將添加硬編碼字段。

add_tag:

若是過濾成功,則向事件添加任意標記。標記能夠是動態的,並使用%{field}語法包含事件的一部分。
例如:
filter {
  json {
    add_tag => [ "foo_%{somefield}" ]
  }
}
filter {
  json {
    add_tag => [ "foo_%{somefield}", "taggedy_tag"]
  }
}
若是事件有字段「somefield」==「hello」,這個過濾器在成功時,會添加一個標籤foo_hello(第二個例子固然會添加一個taggedy_tag標籤)。

enable_metric:

默認狀況下,咱們會記錄全部能夠記錄的指標,但您能夠爲特定的插件禁用指標集合。


id:

向插件配置中添加惟一的ID。若是沒有指定ID, Logstash將生成一個ID。強烈建議在配置中設置此ID。若是您有兩個或多個相同類型的插件,例如,若是您有兩個json過濾器,

那麼這是很是有用的。在這種狀況下,在使用監視api時添加一個命名ID將有助於監視Logstash。

例如:

filter {
  json {
    id => "ABC"
  }
}

periodic_flush:

按期調用filter flush方法。可選的。


periodic_flush:

若是過濾成功,則今後事件中刪除任意字段。例如:

filter {
  json {
    remove_field => [ "foo_%{somefield}" ]
  }
}
filter {
  json {
    remove_field => [ "foo_%{somefield}", "my_extraneous_field" ]
  }
}
若是事件中有字段「somefield」==「hello」,那麼在成功時,若是存在名爲foo_hello的字段,這個過濾器將刪除該字段。第二個示例將刪除一個額外的非動態字段。


remove_tag:

若是過濾成功,則從事件中刪除任意標記。標記能夠是動態的,並使用%{field}語法包含事件的一部分。

例如:

filter {
  json {
    remove_tag => [ "foo_%{somefield}" ]
  }
}
filter {
  json {
    remove_tag => [ "foo_%{somefield}", "sad_unwanted_tag"]
  }
}
若是事件有字段「somefield」==「hello」,過濾成功時將會刪除foo_hello標記。第二個示例還將不想要的標記。

2. Json_encode Filter

功能概述

JSON編碼過濾器。獲取一個字段並將其序列化爲JSON

若是沒有指定目標,則用JSON文本覆蓋源字段。(此過濾器非默認安裝的,需手動安裝bin/logstash-plugin install logstash-filter-json_encode)

例如,若是您有一個名爲foo的字段,而且但願將JSON編碼的字符串存儲在bar中,例如:

filter {
  json_encode {
    source => "foo"
    target => "bar"
  }
}
source :
須要轉換爲json的字段

target:
寫入JSON的字段。若是沒有指定,源字段將被覆蓋。


本文內容主要翻譯自官方文檔:https://www.elastic.co/guide/en/logstash/current/plugins-filters-json.html
相關文章
相關標籤/搜索