Logstash / Elasticsearch - transforma campos em minúsculos na saída conf

2

Eu tenho uma pilha ELK padrão armazenando numerosas saídas de log. Estou tentando separar meus índices para serem específicos da fonte.

Como parte da minha configuração do FileBeats, alguns campos padrão são sempre gerados como parte de cada mensagem (e são específicos do local), que eu quero usar como base para meu índice ES:

output {
  elasticsearch {
    hosts => ["http://elasticsearch.mydomain.com:80"]
    index => "logstash-%{+YYYY.MM.dd}-%{[fields][identifier]}"
  }
}

No entanto, ES está rejeitando alguns dos índices, pois o campo contém caracteres maiúsculos - o identificador tem valores aceitáveis, como myfoo , mas também pode ser MyBar :

[logstash.outputs.elasticsearch] Could not index event to Elasticsearch. {"reason"=>"Invalid index name [logstash-2017.06.02-MyBar], must be lowercase"}

O case não é essencial e eu posso adicionar um filtro mutate para forçar a diminuição dos campos em questão, mas eu preferiria armazenar o campo identificador com o case apropriado, e ainda usar a versão com menos letras para o nome do índice. / p>

Existe alguma função que pode ser chamada na saída do elasticsearch, para minúsculas no campo em questão? Algo como

    index => "logstash-%{+YYYY.MM.dd}-%{[fields][identifier]}.lowercase()"
    
por m8r-3wo9bu 23.06.2017 / 23:07

2 respostas

2

Isso pode ser feito com um pouco mais de truques de mutação.

  1. Crie um novo campo usando mutate, definido para o seu identificador.
  2. Em uma segunda mutação, diminua esse novo campo.
  3. Use o novo campo na sua saída.

Assim:

filter {
  mutate {
    add_field => { "lc_identifier" => "%{fields}%{identifier}" }
  }
  mutate {
    lowercase => [ "lc_identifier" ]
  }
}

output {
  elasticsearch {
    hosts => ["http://elasticsearch.example.com:80"]
    index => "logstash-%{+YYYY.MM.dd}-%{[lc_identifier]}"
  }
}

Você vai acabar com um campo lc_identifier nos seus índices, mas isso não importa muito.

    
por 24.06.2017 / 16:02
0

Criando a resposta do sysadmin1138:

Você pode usar o campo @metadata para evitar o campo lc_identifier não aparece em seus documentos enquanto está indexado.

No seu filtro, altere:

filter {
  mutate {
    add_field => { "lc_identifier" => "%{fields}%{identifier}" }
  }
  mutate {
    lowercase => [ "lc_identifier" ]
  }
}

Para:

filter {
  mutate {
    add_field => { "[@metadata][lc_identifier]" => "%{fields}%{identifier}" }
  }
  mutate {
    lowercase => [ "[@metadata][lc_identifier]" ]
  }
}

E para chamar na sua saída:

output {
  elasticsearch {
    hosts => ["http://elasticsearch.example.com:80"]
    index => "logstash-%{+YYYY.MM.dd}-%{[@metadata][lc_identifier]}"
  }
}

Dessa forma, você pode criar um padrão de índice com um identificador minúsculo, mas evitar que o campo minúsculo apareça nos próprios documentos.

    
por 29.07.2018 / 10:09