logstash、插件 kv 和字段中的重复值
logstash, plugin kv and duplicated value in field
示例日志:
2017-11-27T04:26:33+01:00 node231 PROXY-NODE2: 2017-11-27 04:26:31,559 [INFO] [user=optimus&id=dwql33333fssd&password=****&request=true&response=true&total=225&id=dwql33333fssd]
我的 logstash 配置:
filter {
if "node" in [tags] and "[INFO]" in [message] {
grok {
match => { "message" => "%{TIMESTAMP_ISO8601} %{DATA} %{DATA:[proxy][node]}: %{TIMESTAMP_ISO8601:[proxy][timestamp]} %{DATA} \[%{GREEDYDATA:data}\]"
add_field => {"[@metadata][status]" => "parsed"}
}
if [@metadata][status] == "parsed" {
kv {
source => "data"
field_split => "&"
include_keys => [ "user", "id", "total" ]
}
}
}
输出(示例):
{
"id" => [
[0] "dwql33333fssd",
[1] "dwql33333fssd"
],
}
因为日志包含两次"id"...我怎么才能只得到第一个或最后一个"id"?
我需要灵活的解决方案,因为有时其他字段也会重复。
用于删除重复 key/value 对的 bool 选项。设置为 false 时,将仅保留唯一的 key/value 对。
例如,考虑像 from=me from=me 这样的来源。 [from] 将映射到具有两个元素的数组:["me"、"me"]。要仅保留唯一的 key/value 对,您可以使用此配置:
filter {
kv {
allow_duplicate_values => false
}
}
示例日志:
2017-11-27T04:26:33+01:00 node231 PROXY-NODE2: 2017-11-27 04:26:31,559 [INFO] [user=optimus&id=dwql33333fssd&password=****&request=true&response=true&total=225&id=dwql33333fssd]
我的 logstash 配置:
filter {
if "node" in [tags] and "[INFO]" in [message] {
grok {
match => { "message" => "%{TIMESTAMP_ISO8601} %{DATA} %{DATA:[proxy][node]}: %{TIMESTAMP_ISO8601:[proxy][timestamp]} %{DATA} \[%{GREEDYDATA:data}\]"
add_field => {"[@metadata][status]" => "parsed"}
}
if [@metadata][status] == "parsed" {
kv {
source => "data"
field_split => "&"
include_keys => [ "user", "id", "total" ]
}
}
}
输出(示例):
{
"id" => [
[0] "dwql33333fssd",
[1] "dwql33333fssd"
],
}
因为日志包含两次"id"...我怎么才能只得到第一个或最后一个"id"? 我需要灵活的解决方案,因为有时其他字段也会重复。
用于删除重复 key/value 对的 bool 选项。设置为 false 时,将仅保留唯一的 key/value 对。
例如,考虑像 from=me from=me 这样的来源。 [from] 将映射到具有两个元素的数组:["me"、"me"]。要仅保留唯一的 key/value 对,您可以使用此配置:
filter {
kv {
allow_duplicate_values => false
}
}