Logstash (извлечение частей полей с помощью регулярных выражений) - PullRequest
0 голосов
/ 12 февраля 2019

Я использую плагин Kafka для ввода данных в logstash от kafka.

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 имеют формат ingest-abc & ingest-xyz

Я использую следующееФильтр для указания индекса ES, в котором он должен заканчиваться, путем установки поля [@metadata] [index_prefix].

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 в итоге составляют
ingest-abc-YYYY-MM-DD
ingest-xyz-YYYY-MM-DD

Как установитьindex_prefix к abc-YYYY-MM-DD и xyz-YYYY-MM-DD вместо того, чтобы избавиться от общего приставочного префикса

Регулярное выражение, которое соответствует ему: (?!ingest)\b(?!-)\S+ Но я не уверен, гдевписывается в конфиг.

Спасибо!

1 Ответ

0 голосов
/ 13 февраля 2019

Хорошо, так что я разобрался, если кто-нибудь когда-нибудь споткнется о подобной проблеме, я в основном использовал фильтр gsub вместо фильтров и grok. Это заменяет любой соответствующий текст пропущенным текстом в аргументе3


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