Переключение 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
вместо этого напишите псевдоним, иначе он не будет работать.