web-dev-qa-db-fra.com

logstash vérifie si le champ existe

J'ai des fichiers journaux qui entrent dans une pile ELK. Je veux copier un champ (foo) afin d'y effectuer diverses mutations. Cependant, le champ (foo) n'est pas toujours présent.

Si foo n'existe pas, alors bar est toujours créé, mais la chaîne littérale "%{foo}"

Comment puis-je effectuer une mutation uniquement si un champ existe?

J'essaie de faire quelque chose comme ça.

if ["foo"] {
  mutate {
    add_field => "bar" => "%{foo}
  }
}
37
spuder

Pour vérifier si le champ foo existe:

1) Pour les champs de type numérique, utilisez:

 if ([foo]) {
    ...
 }

2) Pour les types autres que numériques tels que boolean, string utilise:

if ("" in [foo]) {
    ...
}
76
Ofri Raviv

"foo" est une chaîne littérale.

[foo] est un champ.

# technically anything that returns 'true', so good for numbers and basic strings:
if [foo] {
}

# contains a value
if [foo] =~ /.+/ {
}
32
Alain Collins

Sur Logstash 2.2.2, le ("" in [field]) construction ne semble pas fonctionner pour moi.

if ![field] { }

fait, pour un champ non numérique.

16
yvf