Logstash Json 過濾器插件


1. Json Filter

功能概述

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

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

如果JSON解析在數據上失敗了,事件將不會受到影響,它將被標記為_jsonparsefailure,然后您可以使用條件來清理數據。您可以使用tag_on_failure選項配置此標記。

如果解析后的數據包含@timestamp字段,我們將嘗試將其用於事件的@timestamp,如果解析失敗,該字段將被重命名為_@timestamp,事件將被標記為_timestampparsefailure。


Json 過濾器配置選項

Setting Input type Required

skip_on_invalid_json

boolean

No

source

string

Yes

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM