使用后删除 grok 匹配字段
Removing grok matched field after using it
我使用 filebeat 将日志文件提取到我的 logstash 中,然后过滤不需要的字段。一切正常,我将这些输出到 elasticsearch,但有一个字段用于 elasticsearch 索引名称,我在我的 grok 匹配中定义了这个变量,但一旦它达到目的,我找不到删除该变量的方法。我将在下面分享我的 logstash 配置
input {
beats {
port => "5044"
}
}
filter {
grok {
match => { "[log][file][path]" => ".*(\|\/)(?<myIndex>.*)(\|\/).*.*(\|\/).*(\|\/).*(\|\/).*(\|\/)" }
}
json {
source => message
}
mutate {
remove_field => ["agent"]
remove_field => ["input"]
remove_field => ["@metadata"]
remove_field => ["log"]
remove_field => ["tags"]
remove_field => ["host"]
remove_field => ["@version"]
remove_field => ["message"]
remove_field => ["event"]
remove_field => ["ecs"]
}
date {
match => ["t","yyyy-MM-dd HH:mm:ss.SSS"]
remove_field => ["t"]
}
mutate {
rename => ["l","log_level"]
rename => ["mt","msg_template"]
rename => ["p","log_props"]
}
}
output {
elasticsearch {
hosts => [ "localhost:9222" ]
index => "%{myIndex}"
}
stdout { codec => rubydebug { metadata => true } }
}
我只想从我的索引中删除“myIndex”字段。有了这个配置文件,如果可能的话,我会在 elasticsearch 中看到这个字段,我想删除它。我试图将它与其他字段一起删除,但它给出了一个错误。我想这是因为我在 logstash 可以将它提供给 elasticsearch 之前删除了它。
在 [@metadata] 下创建字段。这些字段可在 logstash 中使用,但会被输出忽略,除非它们使用 rubydebug 编解码器。
调整你的 grok 过滤器
match => { "[log][file][path]" => ".*(\|\/)(?<[@metadata][myIndex]>.*)(\|\/).*.*(\|\/).*(\|\/).*(\|\/).*(\|\/)" }
从 mutate+remove_field 中删除 [@metadata] 并将输出配置更改为 have
index => "%{[@metadata][myIndex]}"
我使用 filebeat 将日志文件提取到我的 logstash 中,然后过滤不需要的字段。一切正常,我将这些输出到 elasticsearch,但有一个字段用于 elasticsearch 索引名称,我在我的 grok 匹配中定义了这个变量,但一旦它达到目的,我找不到删除该变量的方法。我将在下面分享我的 logstash 配置
input {
beats {
port => "5044"
}
}
filter {
grok {
match => { "[log][file][path]" => ".*(\|\/)(?<myIndex>.*)(\|\/).*.*(\|\/).*(\|\/).*(\|\/).*(\|\/)" }
}
json {
source => message
}
mutate {
remove_field => ["agent"]
remove_field => ["input"]
remove_field => ["@metadata"]
remove_field => ["log"]
remove_field => ["tags"]
remove_field => ["host"]
remove_field => ["@version"]
remove_field => ["message"]
remove_field => ["event"]
remove_field => ["ecs"]
}
date {
match => ["t","yyyy-MM-dd HH:mm:ss.SSS"]
remove_field => ["t"]
}
mutate {
rename => ["l","log_level"]
rename => ["mt","msg_template"]
rename => ["p","log_props"]
}
}
output {
elasticsearch {
hosts => [ "localhost:9222" ]
index => "%{myIndex}"
}
stdout { codec => rubydebug { metadata => true } }
}
我只想从我的索引中删除“myIndex”字段。有了这个配置文件,如果可能的话,我会在 elasticsearch 中看到这个字段,我想删除它。我试图将它与其他字段一起删除,但它给出了一个错误。我想这是因为我在 logstash 可以将它提供给 elasticsearch 之前删除了它。
在 [@metadata] 下创建字段。这些字段可在 logstash 中使用,但会被输出忽略,除非它们使用 rubydebug 编解码器。
调整你的 grok 过滤器
match => { "[log][file][path]" => ".*(\|\/)(?<[@metadata][myIndex]>.*)(\|\/).*.*(\|\/).*(\|\/).*(\|\/).*(\|\/)" }
从 mutate+remove_field 中删除 [@metadata] 并将输出配置更改为 have
index => "%{[@metadata][myIndex]}"