Logstash(使用正则表达式的字段的提取部分)

时间:2019-02-12 07:12:25

标签: elasticsearch logstash elastic-stack logstash-grok logstash-configuration

我正在使用Kafka插件将数据从kafka输入到logstash中。

input {
    kafka {
        bootstrap_servers => ["{{ kafka_bootstrap_server }}"]
        codec => "json"
        group_id => "{{ kafka_consumer_group_id }}"
        auto_offset_reset => "earliest"
        topics_pattern => ".*" <- This line ensures it reads from all kafka topics
        decorate_events => true
        add_field => { "[@metadata][label]" => "kafka-read" }

    }
}

kafka主题的格式 摄取abc和 摄取xyz

我使用以下过滤器,通过设置[@metadata] [index_prefix]字段来指定ES索引的结尾位置。

filter {
    mutate {
        add_field => { 
                       "[@metadata][index_prefix]" => "%{[@metadata][kafka][topic]}"
                     }
        remove_field => ["[kafka][partition]", "[kafka][key]"]
    }
    if [message] {
        mutate {
          add_field => { "[pipeline_metadata][normalizer][original_raw_message]" => "%{message}" }
        }
    }
}

所以我的es索引最终被
摄取abc-YYYY-MM-DD
摄取xyz-YYYY-MM-DD

如何将index_prefix设置为 改为abc-YYYY-MM-DD和xyz-YYYY-MM-DD 通过摆脱commong的摄取前缀

与之匹配的正则表达式为:(?!ingest)\b(?!-)\S+ 但是我不确定它在配置中适合什么地方。

谢谢!

1 个答案:

答案 0 :(得分:1)

好的,所以我想出了如果有人偶然发现类似问题, 我基本上使用了gsub过滤器,而不是过滤器和grok, 这会将所有匹配的文本替换为争论3中传递的文本


filter {
    mutate {
        rename => { "[@metadata][kafka]"  => "kafka"}
        gsub => [ "[@metadata][index_prefix]", "ingest-", "" ]
    }
}