Куратор для удаления индексов старше 30 дней и более на основе поля, которое не относится к типу даты

{
 "_index": "user:1494813192000",
 "_type": "fruits",
 "_id": "pbyac5r88-yghe-v1ez-cpgb-sqdjipr54alzgj/tp4oqalbd-bo2v-ikj1-atfq-wezcoeeuf6wiqpt/apple",
 "_score": 1,
 "_routing": "pbyac5r88-yghe-v1ez-cpgb-sqdjipr54alzgj",
 "_source": {
 "numCal": 442,
 "eventTime": 1497315192000,
 "fruitName": "apple"
}

Вот так выглядит индекс в моем эластичном поиске. EventTime - текущее время в мс, основанное на UTC. Я хотел бы использовать это поле, чтобы удалить мои индексы с помощью куратора.

Вот так выглядит мой ACTION_FILE.YML

actions:
  1:
    action: delete_indices 
    description: >-
      Delete indices older than 45 days (based on index name), for logstash-
      prefixed indices. Ignore the error if the filter does not result in an
      actionable list of indices (ignore_empty_list) and exit cleanly.
    options:
      ignore_empty_list: True
      timeout_override:
      continue_if_exception: False
      disable_action: False
    filters:
    - filtertype: age
      source: field_stats
      field: 'eventTime'
      direction: older
      unit: days
      unit_count: 30
      exclude:

Поддерживает ли куратор удаление на основе полей, которые не в формате данных?

1 ответ

Решение

Первоначально я ответил на этот вопрос здесь, но включите его и здесь.

Сравнение даты и времени работает в кураторе на основе времени эпохи. Поскольку Elasticsearch хранит записи даты внутри как значения эпох, именно поэтому обычно требуется использовать поле, которое хранится в качестве отметки даты, при использовании field_stats для сравнения.

Однако, если поле эпохи времени, которое правильно отображается как long в Elasticsearch, и хранит либо эпоху, либо эпоху плюс миллисекунды (но не десятичные), он должен прекрасно работать для использования с field_stats,

Для справки, код, демонстрирующий этот принцип, находится здесь.

Другие вопросы по тегам