Имя поля в нижнем регистре в Logstash для индекса Elasticsearch - PullRequest
0 голосов
/ 19 октября 2019

У меня есть команда 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}]

Очевидно, что это не захватывает мою мутацию. Это потому, что раздел удаления вынимает его целиком? Я надеялся, что просто удалил его из документа загрузки. Я говорю об этом неправильно?

ОБНОВЛЕНИЕ Я попытался удалить часть имени для удаления индекса, и она действительно работает, так что это помогает определить источник ошибки. Теперь возникает вопрос, как мне обойти это. После удаления этой части конфига у меня два поля с одинаковыми данными, одно в нижнем регистре, а другое - не

1 Ответ

1 голос
/ 19 октября 2019

Вы можете определить @metadata поле, которое является специальным полем, которое никогда не будет включено в вывод https://www.elastic.co/guide/en/logstash/current/event-dependent-configuration.html#metadata.

input {
  stdin { type => stdin }
}
filter {
   csv {
      separator => " "
      columns => ["appName", "field1", "field2", ...]
      convert => {
      ...
   }
}
filter {
   mutate {
      copy => ["appName", "[@metadata][appNameIndex]"]
   }
}
filter {
   mutate {
      lowercase => ["[@metadata][appNameIndex]"]
   }
}
output {
   amazon_es {
      hosts => ["my-es-cluster.us-east-1.es.amazonaws.com"]
      index => "%{[@metadata][appNameIndex]}"
      region => "us-east-1"
   }
}
...