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}
}
}
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]) {
...
}
"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] =~ /.+/ {
}
Sur Logstash 2.2.2, le ("" in [field])
construction ne semble pas fonctionner pour moi.
if ![field] { }
fait, pour un champ non numérique.