Как получить имя файла из исходного значения, предоставленного filebeat в logstash?

Я хочу получить имя файла из исходного значения, предоставленного filebeat.

output {
  if [type] == "wxnumber" {
    elasticsearch {
        hosts => "localhost:9200"
        sniffing => false
        manage_template => false
        index => "%{[source]}"
        document_type => "%{[@metadata][type]}"
    }
  }
}

%{[source]} обычно похоже на /aaa/bbb/ccc.log. Как установить индекс на ccc.log?


person microchao    schedule 07.12.2016    source источник
comment
Какой результат вы получаете из приведенной выше конфигурации?   -  person Kulasangar    schedule 07.12.2016
comment
@ Куласангар, спасибо за ответ. Результат %{[source]} похож на /aaa/bbb/ccc.log. Я просто хочу получить ccc.log для этой переменной.   -  person microchao    schedule 08.12.2016
comment
Я обновил ответ! Проверьте, работает ли он.   -  person Kulasangar    schedule 08.12.2016
comment
Большое спасибо. Но я не знаю имени файла. Возможно, это будут ddd.log, eee.log, fff.log и так далее.   -  person microchao    schedule 08.12.2016
comment
Что, если вы используете регулярное выражение, чтобы обрезать путь и получить только определенное значение, как указано здесь   -  person Kulasangar    schedule 08.12.2016
comment
Спасибо, Куласангар, я решил свою проблему. Затем я использую gsub, он может преобразовать все косые черты в любые нужные.   -  person microchao    schedule 14.12.2016
comment
Отлично сработало. :)   -  person Kulasangar    schedule 14.12.2016


Ответы (1)


Возможно, вы могли бы использовать mutate, чтобы заменить его тем, как должен называться ваш файл журнала:

if [%{[source]}] =~ /aaa/bbb/ccc.log {
  mutate {
     replace => ["%{[source]}]", "ccc.log"]
  }
}

Это SO может быть полезным!

person Kulasangar    schedule 07.12.2016