У меня есть команда logstash, которую я передаю в файл, который запишет в Elasticsearch. Я хочу использовать одно поле для выбора индекса, в который я буду писать (appName
). Однако данные в этом поле не все строчные, поэтому мне нужно это сделать при выборе индекса, но я не хочу, чтобы данные в самом документе были изменены.
У меня есть попытка ниже, где я сначаласкопируйте исходное поле (appName
) в новое (appNameIndex
), введите новое поле в нижнем регистре, удалите его из загрузки, а затем используйте его для выбора индекса.
input {
stdin { type => stdin }
}
filter {
csv {
separator => " "
columns => ["appName", "field1", "field2", ...]
convert => {
...
}
}
filter {
mutate {
copy => ["appName", "appNameIndex"]
}
}
filter {
mutate {
lowercase => ["appNameIndex"]
}
}
filter {
mutate {
remove_field => [
"appNameIndex", // if I remove this it works
...
]
}
}
output {
amazon_es {
hosts =>
["my-es-cluster.us-east-1.es.amazonaws.com"]
index => "%{appNameIndex}"
region => "us-east-1"
}
}
Однако я получаюошибки, которые говорят
Invalid index name [%{appIndexName}]
Очевидно, что это не захватывает мою мутацию. Это потому, что раздел удаления вынимает его целиком? Я надеялся, что просто удалил его из документа загрузки. Я говорю об этом неправильно?
ОБНОВЛЕНИЕ Я попытался удалить часть имени для удаления индекса, и она действительно работает, так что это помогает определить источник ошибки. Теперь возникает вопрос, как мне обойти это. После удаления этой части конфига у меня два поля с одинаковыми данными, одно в нижнем регистре, а другое - не