Переключение elasticsearch на основе политики ilm с сохранением приложения/потребителя как есть

У меня есть служба elasticsearch, которая является серверной частью для ведения журнала для наших приложений. Код приложения нам не открыт, поэтому мы не можем изменить приложение. приложения вызывают elasticsearch в определенных точках потока через http, как показано ниже.

      POST order-service-2022.04.23/_doc
{
  "message": "order created",
  "@timestamp": "1591890613"
}

в более поздний день они вызывают ту же службу, как показано ниже. меняется только дата.

      POST order-service-2022.04.24/_doc
{
  "message": "order created",
  "@timestamp": "1591890613"
}

Проблема в том, что мы не можем настроить политику ILM без изменения поведения клиента. Целью является прокрутка индекса на основе некоторых критериев, поскольку мы не можем изменить код приложения, HTTP-вызов должен быть таким же, как и на стороне приложения. что мы пробовали:

шаблон индекса:

      PUT _index_template/order_template
{
  "index_patterns": [
    "order-*-*"
  ],
  "template": {
    "settings": {
      "number_of_shards": 1,
      "number_of_replicas": 0,
      "index.lifecycle.name": "order_policy",
      "index.lifecycle.rollover_alias": "order"
    }
  }
}

кинополитика

      PUT _ilm/policy/order_policy
{
  "policy": {
    "phases": {
      "hot": {                                
        "actions": {
          "rollover": {
            "max_primary_shard_size": "1GB", 
            "max_age": "1d",
            "max_docs": 500
          }
        }
      },
      "delete": {
        "min_age": "2d",                     
        "actions": {
          "delete": {}                        
        }
      }
    }
  }
}

Индекс семян:

      PUT order-service-2022.04.23
{
  "aliases": {
    "order": {
      "is_write_index": true
    }
  }
}

во время вставки документа в эластичный успешный результат.

но во время объединения только на один день дайте ниже исключение

      POST /order/_rollover
{
  "error" : {
    "root_cause" : [
      {
        "type" : "illegal_argument_exception",
        "reason" : "index name [order-service-2022.04.23] does not match pattern '^.*-\\d+$'"
      }
    ],
    "type" : "illegal_argument_exception",
    "reason" : "index name [order-service-2022.04.23] does not match pattern '^.*-\\d+$'"
  },
  "status" : 400
}

вторая проблема, как в ближайшие дни нужно свернуть, так как для них нет псевдонима ..

1 ответ

Во-первых, похоже, что код приложения выполняет "пролонгацию" сам по себе, поскольку он каждый день меняет имя индекса. Поэтому, если вы не можете изменить код приложения, у вас уже есть некоторая логика переноса, но она реализована непосредственно в коде вашего приложения.

Ошибка, которую вы получаете, связана с тем, что начальный начальный индекс ДОЛЖЕН заканчиваться порядковым номером , иначе он не будет работать.

Регулярное выражение ^.*-\\d+$означает "любое имя индекса, которое заканчивается одной или несколькими цифрами"

                                  add this
                               |
                               v
PUT order-service-2022.04.23-00001
{
  "aliases": {
    "order": {
      "is_write_index": true
    }
  }
}

Это также означает, что код приложения, составляющий имя индекса, НЕ сможет узнать текущий порядковый номер и, следовательно, ДОЛЖЕН писать непосредственно в orderвместо этого напишите псевдоним, иначе он не будет работать.

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