Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Guide [8.17] ›Управление данными

Поиск и устранение ошибок управления жизненным циклом индексов

Когда ILM выполняет политику жизненного цикла, возможны ошибки при выполнении необходимых операций с индексом на данном этапе. В этом случае ILM перемещает индекс на этап ERROR. Если ILM не может автоматически устранить ошибку, выполнение приостанавливается до тех пор, пока вы не решите проблемы с политикой, индексом или кластером.

См. это видео для пошагового решения текущих проблем со здоровьем ILM и это видео для пошагового решения проблем с историей ILM.

Например, у вас может быть политика shrink-index, которая уменьшает индекс до четырёх фрагментов, как только ему исполнится не менее пяти дней:

resp = client.ilm.put_lifecycle(
    name="shrink-index",
    policy={
        "phases": {
            "warm": {
                "min_age": "5d",
                "actions": {
                    "shrink": {
                        "number_of_shards": 4
                    }
                }
            }
        }
    },
)
print(resp)
response = client.ilm.put_lifecycle(
  policy: 'shrink-index',
  body: {
    policy: {
      phases: {
        warm: {
          min_age: '5d',
          actions: {
            shrink: {
              number_of_shards: 4
            }
          }
        }
      }
    }
  }
)
puts response
const response = await client.ilm.putLifecycle({
  name: "shrink-index",
  policy: {
    phases: {
      warm: {
        min_age: "5d",
        actions: {
          shrink: {
            number_of_shards: 4,
          },
        },
      },
    },
  },
});
console.log(response);
PUT _ilm/policy/shrink-index
{
  "policy": {
    "phases": {
      "warm": {
        "min_age": "5d",
        "actions": {
          "shrink": {
            "number_of_shards": 4
          }
        }
      }
    }
  }
}

Ничто не мешает вам применять политику shrink-index к новому индексу, имеющему только два фрагмента:

resp = client.indices.create(
    index="my-index-000001",
    settings={
        "index.number_of_shards": 2,
        "index.lifecycle.name": "shrink-index"
    },
)
print(resp)
response = client.indices.create(
  index: 'my-index-000001',
  body: {
    settings: {
      'index.number_of_shards' => 2,
      'index.lifecycle.name' => 'shrink-index'
    }
  }
)
puts response
const response = await client.indices.create({
  index: "my-index-000001",
  settings: {
    "index.number_of_shards": 2,
    "index.lifecycle.name": "shrink-index",
  },
});
console.log(response);
PUT /my-index-000001
{
  "settings": {
    "index.number_of_shards": 2,
    "index.lifecycle.name": "shrink-index"
  }
}

Через пять дней ILM пытается уменьшить my-index-000001 с двух фрагментов до четырёх. Поскольку действие уменьшения не может *увеличить* количество фрагментов, эта операция завершается неудачей, и ILM перемещает my-index-000001 на этап ERROR.

Вы можете использовать API ILM Explain, чтобы получить информацию о том, что пошло не так:

resp = client.ilm.explain_lifecycle(
    index="my-index-000001",
)
print(resp)
response = client.ilm.explain_lifecycle(
  index: 'my-index-000001'
)
puts response
const response = await client.ilm.explainLifecycle({
  index: "my-index-000001",
});
console.log(response);
GET /my-index-000001/_ilm/explain

Что возвращает следующую информацию:

{
  "indices" : {
    "my-index-000001" : {
      "index" : "my-index-000001",
      "managed" : true,
      "index_creation_date_millis" : 1541717265865,
      "time_since_index_creation": "5.1d",
      "policy" : "shrink-index",                
      "lifecycle_date_millis" : 1541717265865,
      "age": "5.1d",                            
      "phase" : "warm",                         
      "phase_time_millis" : 1541717272601,
      "action" : "shrink",                      
      "action_time_millis" : 1541717272601,
      "step" : "ERROR",                         
      "step_time_millis" : 1541717272688,
      "failed_step" : "shrink",                 
      "step_info" : {
        "type" : "illegal_argument_exception",  
        "reason" : "the number of target shards [4] must be less that the number of source shards [2]"
      },
      "phase_execution" : {
        "policy" : "shrink-index",
        "phase_definition" : {                  
          "min_age" : "5d",
          "actions" : {
            "shrink" : {
              "number_of_shards" : 4
            }
          }
        },
        "version" : 1,
        "modified_date_in_millis" : 1541717264230
      }
    }
  }
}

Политика, используемая для управления индексом: shrink-index

Возраст индекса: 5,1 дня

Фаза, в которой находится индекс: warm

Текущее действие: shrink

Этап, на котором находится индекс: ERROR

Этап, который не удалось выполнить: shrink

Тип ошибки и описание этой ошибки.

Определение текущей фазы из политики shrink-index

Чтобы решить эту проблему, можно обновить политику, чтобы уменьшить индекс до одного фрагмента через 5 дней:

resp = client.ilm.put_lifecycle(
    name="shrink-index",
    policy={
        "phases": {
            "warm": {
                "min_age": "5d",
                "actions": {
                    "shrink": {
                        "number_of_shards": 1
                    }
                }
            }
        }
    },
)
print(resp)
response = client.ilm.put_lifecycle(
  policy: 'shrink-index',
  body: {
    policy: {
      phases: {
        warm: {
          min_age: '5d',
          actions: {
            shrink: {
              number_of_shards: 1
            }
          }
        }
      }
    }
  }
)
puts response
const response = await client.ilm.putLifecycle({
  name: "shrink-index",
  policy: {
    phases: {
      warm: {
        min_age: "5d",
        actions: {
          shrink: {
            number_of_shards: 1,
          },
        },
      },
    },
  },
});
console.log(response);
PUT _ilm/policy/shrink-index
{
  "policy": {
    "phases": {
      "warm": {
        "min_age": "5d",
        "actions": {
          "shrink": {
            "number_of_shards": 1
          }
        }
      }
    }
  }
}

Повтор попытки выполнения не удавшихся этапов политики жизненного цикла

После устранения проблемы, поместившей индекс на этап ERROR, вам, возможно, потребуется явно попросить ILM повторить этот этап:

resp = client.ilm.retry(
    index="my-index-000001",
)
print(resp)
const response = await client.ilm.retry({
  index: "my-index-000001",
});
console.log(response);
POST /my-index-000001/_ilm/retry

ILM впоследствии попытается повторно выполнить не удавшийся этап. Вы можете использовать API ILM Explain, чтобы отслеживать процесс.

Общие проблемы с настройками ILM

Как рассчитывается min_age

При настройке политики ILM или автоматизации переключения с помощью ILM, обратите внимание, что min_age может относиться либо к времени переключения, либо к времени создания индекса.

Если вы используете переключение ILM, min_age рассчитывается относительно времени, когда индекс был переключен. Это происходит потому, что API переключения генерирует новый индекс и обновляет age предыдущего индекса, чтобы отразить время переключения. Если индекс не был переключен, то age совпадает с creation_date индекса.

Вы можете переопределить способ расчета min_age, используя index.lifecycle.origination_date и index.lifecycle.parse_origination_date настройки ILM.

Общие ошибки ILM

Вот как исправить самые распространенные ошибки, сообщаемые на этапе ERROR.

Проблемы с псевдонимами переключения являются распространенной причиной ошибок. Рассмотрите возможность использования потоков данных вместо управления переключением с помощью псевдонимов.

Псевдоним переключения [x] может указывать на несколько индексов, найден дублированный псевдоним [x] в шаблоне индекса [z]

Целевой псевдоним переключения указан в настройке шаблона индекса. Вам нужно один раз явно настроить этот псевдоним при начальной настройке индекса. Действие переключения затем управляет настройкой и обновлением псевдонима для переключения на каждый последующий индекс.

Не настраивайте этот же псевдоним в разделе псевдонимов шаблона индекса.

Посмотрите это видео по устранению неполадок с duplicate alias для примера пошагового руководства.

index.lifecycle.rollover_alias [x] не указывает на индекс [y]

Либо индекс использует неправильный псевдоним, либо псевдонима не существует.

Проверьте index.lifecycle.rollover_alias настройку индекса. Чтобы увидеть, какие псевдонимы настроены, используйте _cat/aliases.

Посмотрите это видео по устранению неполадок с not point to index для примера пошагового руководства.

Настройка [index.lifecycle.rollover_alias] для индекса [y] пуста или не определена

Настройка index.lifecycle.rollover_alias должна быть настроена для работы действия переключения.

Обновите настройки индекса, чтобы установить index.lifecycle.rollover_alias.

Посмотрите это видео по устранению неполадок с empty or not defined для примера пошагового руководства.

Псевдоним [x] имеет более одного индекса записи [y,z]

Только один индекс может быть назначен как индекс записи для определенного псевдонима.

Используйте API псевдонимов, чтобы установить is_write_index:false для всех индексов, кроме одного.

Посмотрите это видео по устранению неполадок с more than one write index для примера пошагового руководства.

Имя индекса [x] не соответствует шаблону ^.*-\d+

Имя индекса должно соответствовать регулярному выражению ^.*-\d+ для работы действия переключения. Наиболее распространенная проблема заключается в том, что имя индекса не содержит конечных цифр. Например, my-index не соответствует требованию шаблона.

Добавьте числовое значение к имени индекса, например my-index-000001.

Посмотрите это видео по устранению неполадок с does not match pattern для примера пошагового руководства.

CircuitBreakingException: [x] данные слишком большие, данные для [y]

Это указывает на то, что кластер достигает пределов ресурсов.

Прежде чем продолжить настройку ILM, вам необходимо принять меры для устранения проблем с ресурсами. Для получения дополнительной информации см. Ошибки разрыва цепи.

Высокая отметка вода на диске [x] превышена на [y]

Это указывает на то, что кластеру не хватает места на диске. Это может произойти, когда у вас не настроено управление жизненным циклом индексов для переключения с горячих на теплые узлы. Для получения дополнительной информации см. Исправление ошибок отметки вода.

security_exception: действие [<имя_действия>] не авторизовано для пользователя [<имя_пользователя>] с ролями [<имя_роли>], это действие предоставлено привилегиями индекса [manage_follow_index,manage,all]

Это указывает, что действие ILM не может быть выполнено, потому что у пользователя, используемого ILM для выполнения действия, нет соответствующих привилегий. Это может произойти, когда привилегии пользователя были сняты после обновления политики ILM. Действия ILM выполняются так, как будто они были выполнены последним пользователем, который изменил политику. Учётная запись, используемая для создания или изменения политики, должна иметь разрешения на выполнение всех операций, которые являются частью этой политики.

© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/index-lifecycle-error-handling.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API