Не удается создать поле с переменной из регулярного выражения соответствия Grok

В настоящее время я использую logstash, elasticsearch и kibana 6.3.0

Мой журнал создается по уникальному пути идентификатора: / tmp / USER_DATA / FactoryContainer / images / (мой уникальный идентификатор) / oar / oar_image_job (мой уникальный идентификатор) .stdout

Я хочу сопоставить этот уникальный идентификатор и создать поле с этим идентификатором.

Я немного новичок в использовании фильтра logstash, но я не знаю, почему он не хочет использовать мой uid и всегда возвращает мне% {uid} в моем поле или это ошибка Failed to execute action.

мой фильтр:

input {
  file {
    path => "/tmp/USER_DATA/FactoryContainer/images/*/oar/oar_image_job*.stdout"
    start_position => "beginning"
    add_field => { "data_source" => "oar-image-job" }
   }
}

filter {
    grok {
        match => ["path","%{UNIXPATH}%{NUMBER:uid}%{UNIXPATH}"]
    }
    mutate {
        add_field => [ "unique_id" => "%{uid}" ]
    }
}

output {
  if [data_source] == "oar-image-job" {
    elasticsearch {
        index => "oar-image-job-%{+YYYY.MM.dd}"
        hosts => ["localhost:9200"]
        }
    }
}

поле data_source предназначено для предотвращения этой проблемы: когда вы помещаете несколько файлов конфигурации в каталог для использования Logstash, все они будут объединены

в отладчике Grok% {UNIXPATH}% {NUMBER: uid}% {UNIXPATH} мой путь вернет мне хорошее значение


person TheSmartMonkey    schedule 01.08.2018    source источник


Ответы (1)


ссылка на решение: https://discuss.elastic.co/t/cant-create-a-field-with-a-variable-from-a-grok-match-regex/142613/7?u=thesmartmonkey

правильный фильтр:

input {
  file {
    path => "/tmp/USER_DATA/FactoryContainer/images/*/oar/oar_image_job*.stdout"
    start_position => "beginning"
    add_field => { "data_source" => "oar-image-job" }
   }
}

filter {
    grok {
        match => { "path" => [ "/tmp/USER_DATA/FactoryContainer/images/%{DATA:unique_id}/oar/oar_image_job%{DATA}.stdout" ] }
    }

}

output {
  if [data_source] == "oar-image-job" {
    elasticsearch {
        index => "oar-image-job-%{+YYYY.MM.dd}"
    hosts => ["localhost:9200"]
    }
    }
}
person TheSmartMonkey    schedule 02.08.2018