Перепарсинг существующих индексов Logstash

Как перепарсить через Logstash существующие индексы?
У меня в Logstash приходили FileBeat какое-то время. Потом появилась задача выделять отдельные поля. Изменил конфиг, но применяется только ко вновь поступившим данным.

Как заставить перепарсить то, что уже ранее пришло в elasticsearch?

Filebeat хранит информацию о уже обработанных файлах в файле registry. Расположение этого файла определяется настройкой filebeat.registry.path. Если вы ничего не меняли, то это /var/lib/filebeat/registry. Если filebeat остановить и этот файл удалить, то filebeat при следующем запуске начнет обрабатывать все по новой.

Filebeat был на стороне "чужой системы". Поступали данные. Я их пропарсил с помощью Logstash и положил себе в эластик. Теперь задача дополнительно допарсить то, что уже у меня есть в индексах.
Грубо говоря у меня в каждом документе есть поле message. Из него мне хотелось бы дополнительно выделить некоторые поля. Индекс хранится месяц.

Спасибо!

А вы не подскажете как в индексе выбирать документы, которые старше какой-либо даты (например текущей)? Что надо прописать в input?
Эластик начинает сейчас делать выборку за все даты (включая год назад), а мне нужны актуальные даты. Сейчас input выглядит так:

input {
  elasticsearch {
    hosts => "some-host"
    index => "testindex-*"
    #query => '{ "query": { "query_string": { "query": "*" } } }'
    size => 5000
    scroll => "1m"
    docinfo => false
    slices => 4
  }
}

Хочу перепарсить значения индекса за последние 4 дня. Если указываю запрос, то Logstash ничего не возвращает

input {
  elasticsearch {
    hosts => "testhost"
    index => "testindex-*"
    query => '{ "query": { "sort": [ "_doc" ], "query_string": { "query": "*" }, "range": { "timestamp": { "gte": "now-4d/d", "lte": "now/d" } } } }'
    size => 5000
    scroll => "1m"
    docinfo => false
    slices => 4
  }
}

Если же комментирую строку query, то данные начинают идти. Что я делаю не так?

Ваш запрос сейчас выглядит так:

{
  "query": {
    "sort": [
      "_doc"
    ],
    "query_string": {
      "query": "*"
    },
    "range": {
      "timestamp": {
        "gte": "now-4d/d",
        "lte": "now/d"
      }
    }
  }
}

Если вы внимательно посмотрите на пример в документации, то увидете, что sort должен быть на одном уровне с query и query может содержать только один запрос, а у вас их два - query_string и range. Если вам надо все включая текущие события, то lte можно убрать. И поле у вас, наверное, не timestamp а @timestamp? В конечном итоге должно выглядеть так:

{
  "query": {
    "range": {
      "@timestamp": {
        "gte": "now-4d/d"
      }
    }
  },
  "sort": [
    "_doc"
  ]
}

Спасибо, Игорь, за подробный ответ. Всё заработало!

Добрый день. Появилось "задваивание" данных. Грубо говоря вижу одинаковые документы, которые продублированы 5, 8 раз и т.д. Есть подозрение, что когда мы перегружаем службу Logstash система начинает дублировать данные. Вопрос: как избежать дубляжа?

Вот конфиг:

Может есть какая-то настройка, чтобы данные не дублировались или можно как-то убрать дубликаты из существующего индекса?

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.