Spec-Zone.ru › Elasticsearch 7
›Руководство по Elasticsearch [7.17] ›REST API ›API создания и восстановления моментальных снимков

API анализа репозитория

Анализирует репозиторий, сообщая о его характеристиках производительности и любых обнаруженных ошибках поведения.

POST /_snapshot/my_repository/_analyze?blob_count=10&max_blob_size=1mb&timeout=120s

Запрос

POST /_snapshot/<repository>/_analyze

Предварительные требования

  • Если включены функции безопасности Elasticsearch, у вас должен быть manage привилегии кластера для использования этого API. Дополнительная информация приведена в разделе о привилегиях безопасности.
  • Если включена функция привилегий оператора, этот API может использовать только пользователи-операторы.

Описание

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

API анализа репозитория выполняет набор операций чтения и записи в вашем репозитории, которые предназначены для выявления неправильного поведения и измерения характеристик производительности вашей системы хранения данных.

Значения параметров по умолчанию для этого API специально низкие, чтобы снизить влияние случайного запуска анализа. Для реалистичного эксперимента следует установить blob_count как минимум на 2000, max_blob_size как минимум на 2gb, и max_total_data_size как минимум на 1tb, и, скорее всего, потребуется увеличить timeout, чтобы дать время для успешного завершения процесса. Вы должны запустить анализ на многоузловом кластере, аналогичном вашему производственному кластеру, чтобы выявить любые проблемы, возникающие только при одновременном доступе к репозиторию многих узлов.

Если анализ завершился неудачей, Elasticsearch обнаружил неожиданное поведение вашего репозитория. Это обычно означает, что вы используете стороннюю систему хранения данных с неправильной или несовместимой реализацией API, который она якобы поддерживает. В этом случае эта система хранения данных не подходит для использования в качестве репозитория моментальных снимков. Вам необходимо будет обратиться к поставщику вашей системы хранения данных, чтобы устранить несовместимости, обнаруженные Elasticsearch. См. типы самообслуживаемых репозиториев для получения дополнительной информации.

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

Если соединение вашего клиента с Elasticsearch будет закрыто, в то время как клиент ожидает результат анализа, тест будет отменён. Некоторые клиенты настроены на закрытие соединения, если в течение определенного времени не будет получен ответ. Анализ занимает много времени, поэтому вам может потребоваться увеличить любые таймауты клиента. При отмене анализа он пытается очистить данные, которые он записывал, но может не удалить все. Путь к оставшимся данным записывается в журналы Elasticsearch. Вы должны самостоятельно проверить, что это местоположение было корректно очищено. Если в указанном месте все еще есть оставшиеся данные, необходимо удалить их вручную.

Если анализ завершился успешно, это означает, что не было обнаружено некорректного поведения. Однако это не гарантирует правильного поведения. Анализ пытается обнаружить распространённые ошибки, но, безусловно, не обеспечивает 100% охвата. Кроме того, он не тестирует следующее:

  • Ваш репозиторий должен выполнять долговременные записи. После записи блока он должен оставаться на месте до его удаления, даже после сбоя электропитания или аналогичной катастрофы.
  • Ваш репозиторий не должен страдать от скрытого повреждения данных. Содержимое блока после записи должно оставаться неизменным до его преднамеренного изменения или удаления.
  • Ваш репозиторий должен корректно работать даже при прерывании соединения с кластером. Чтение и запись могут завершиться неудачей в этом случае, но они не должны возвращать неверные результаты.

Анализ записывает значительное количество данных в ваш репозиторий, а затем считывает их обратно. Это расходует пропускную способность сети между кластером и репозиторием, а также пространство на хранении и пропускную способность ввода-вывода на самом репозитории. Необходимо убедиться, что эта нагрузка не влияет на других пользователей этих систем. Анализ учитывает параметры репозитория max_snapshot_bytes_per_sec и max_restore_bytes_per_sec, если они доступны, а также параметр кластера indices.recovery.max_bytes_per_sec, который вы можете использовать для ограничения используемой пропускной способности.

Этот API предназначен для использования людьми в исследовательских целях. Вы должны ожидать изменения параметров запроса и формата ответа в будущих версиях.

Этот API может работать некорректно в кластере с разными версиями.

Детали реализации

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

Анализ включает в себя несколько задач на уровне блоков, как задано параметром blob_count. Задачи на уровне блоков распределяются по узлам данных и мастер-узлам кластера для выполнения.

Для большинства задач на уровне блоков исполняющий узел сначала записывает блок в репозиторий, а затем инструктирует некоторые другие узлы кластера попытаться прочитать записанные данные. Размер блока выбирается случайным образом в соответствии с параметрами max_blob_size и max_total_data_size. Если какое-либо из этих чтений завершится неудачей, значит, репозиторий не реализует необходимые семантики чтения после записи, требуемые Elasticsearch.

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

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

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

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

Параметры пути

<repository>
(Обязательный, строка) Имя репозитория моментальных снимков для тестирования.

Параметры запроса

blob_count
(Необязательно, целое число) Общее количество блоков, которые нужно записать в хранилище во время тестирования. По умолчанию значение равно 100. Для реалистичных экспериментов следует установить это значение как минимум на 2000.
max_blob_size
(Необязательно, единицы измерения размера) Максимальный размер блока, который нужно записать во время тестирования. По умолчанию значение равно 10mb. Для реалистичных экспериментов следует установить это значение как минимум на 2gb.
max_total_data_size
(Необязательно, единицы измерения размера) Максимальный общий размер всех блоков, которые нужно записать во время тестирования. По умолчанию значение равно 1gb. Для реалистичных экспериментов следует установить это значение как минимум на 1tb.
timeout
(Необязательно, единицы измерения времени) Указывает период времени, в течение которого следует ожидать завершения тестирования. Если ответ не получен до истечения времени ожидания, тестирование отменяется, и возвращается ошибка. По умолчанию значение равно 30s.

Дополнительные параметры запроса

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

concurrency
(Необязательно, целое число) Количество операций записи, выполняемых параллельно. По умолчанию значение равно 10.
read_node_count
(Необязательно, целое число) Количество узлов, на которых будет выполняться операция чтения после записи каждого блока. По умолчанию значение равно 10.
early_read_node_count
(Необязательно, целое число) Количество узлов, на которых будет выполняться операция предварительного чтения во время записи каждого блока. По умолчанию значение равно 2. Операции предварительного чтения выполняются лишь в редких случаях.
rare_action_probability
(Необязательно, двойное число) Вероятность выполнения редкого действия (предварительного чтения, перезаписи или прерванной записи) для каждого блока. По умолчанию значение равно 0.02.
seed
(Необязательно, целое число) Зерно для генератора псевдослучайных чисел, используемого для генерации списка операций, выполняемых во время тестирования. Для повторения одного и того же набора операций в нескольких экспериментах используйте одно и то же зерно в каждом эксперименте. Обратите внимание, что операции выполняются параллельно, поэтому порядок их выполнения может отличаться в каждом запуске.
detailed
(Необязательно, логическое значение) Возвращать ли подробные результаты, включая временные данные для каждой выполненной операции анализа. По умолчанию значение равно false, что означает возврат только сводки анализа.
rarely_abort_writes
(Необязательно, логическое значение) Редко ли прерывать некоторые запросы на запись. По умолчанию значение равно true.

Тело ответа

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

coordinating_node

(объект) Указывает узел, который координировал анализ и выполнил окончательную очистку.

Свойства coordinating_node
id
(строка) Идентификатор узла-координатора.
name
(строка) Название узла-координатора
repository
(строка) Название хранилища, которое было предметом анализа.
blob_count
(целое число) Количество блоков, записанных в хранилище во время теста, равное параметру запроса ?blob_count.
concurrency
(целое число) Количество операций записи, выполненных параллельно во время теста, равное параметру запроса ?concurrency.
read_node_count
(целое число) Ограничение на количество узлов, на которых выполнялись операции чтения после записи каждого блока, равное параметру запроса ?read_node_count.
early_read_node_count
(целое число) Ограничение на количество узлов, на которых выполнялись предварительные операции чтения после записи каждого блока, равное параметру запроса ?early_read_node_count.
max_blob_size
(строка) Ограничение на размер блока, записанного во время теста, равное параметру ?max_blob_size.
max_blob_size_bytes
(длинное целое число) Ограничение, в байтах, на размер блока, записанного во время теста, равное параметру ?max_blob_size.
max_total_data_size
(строка) Ограничение на общий размер всех записанных блоков во время теста, равное параметру ?max_total_data_size.
max_total_data_size_bytes
(длинное целое число) Ограничение, в байтах, на общий размер всех записанных блоков во время теста, равное параметру ?max_total_data_size.
seed
(длинное целое число) Зерно для генератора псевдослучайных чисел, используемого для генерации операций, используемых во время теста. Равно параметру запроса ?seed, если он задан.
rare_action_probability
(двойное число) Вероятность выполнения редких действий во время теста. Равно параметру запроса ?rare_action_probability.
blob_path
(строка) Путь в хранилище, по которому все блоки были записаны во время теста.
issues_detected
(список) Список выявленных проблем корректности, который будет пустым, если API успешно завершился. Включено для того, чтобы подчеркнуть, что успешный ответ не гарантирует правильного поведения в будущем.
summary

(объект) Совокупность статистических данных, суммирующих результаты теста.

Свойства summary
write

(объект) Совокупность статистических данных, суммирующих результаты операций записи в тесте.

Свойства write
count
(целое число) Количество операций записи, выполненных в тесте.
total_size
(строка) Общий размер всех записанных блоков в тесте.
total_size_bytes
(длинное целое число) Общий размер всех записанных блоков в тесте в байтах.
total_throttled
(строка) Общее время ожидания из-за ограничения max_snapshot_bytes_per_sec.
total_throttled_nanos
(длинное целое число) Общее время ожидания из-за ограничения max_snapshot_bytes_per_sec в наносекундах.
total_elapsed
(строка) Общее время, затраченное на запись блоков в тесте.
total_elapsed_nanos
(длинное целое число) Общее время, затраченное на запись блоков в тесте, в наносекундах.
read

(объект) Совокупность статистических данных, суммирующих результаты операций чтения в тесте.

Свойства read
...
details

(массив) Описание каждой операции чтения и записи, выполненной во время теста. Возвращается только в том случае, если параметр запроса ?detailed установлен в значение true.

Свойства элементов в details
blob

(объект) Описание блоба, который был записан и прочитан.

Свойства blob
name
(строка) Имя блоба.
size
(строка) Размер блоба.
size_bytes
(целое число) Размер блоба в байтах.
read_start
(целое число) Позиция, в байтах, с которой начались операции чтения.
read_end
(целое число) Позиция, в байтах, до которой были завершены операции чтения.
read_early
(логическое значение) Были ли начаты какие-либо операции чтения до завершения операции записи?
overwritten
(логическое значение) Был ли боб перезаписан во время выполнения операций чтения?
writer_node

(объект) Идентифицирует узел, который записал этот боб и координировал операции чтения.

Свойства writer_node
id
(строка) Идентификатор узла-записывающего.
name
(строка) Название узла-записывающего.
write_elapsed
(строка) Время, затраченное на запись этого блоба.
write_elapsed_nanos
(целое число) Время, затраченное на запись этого блоба в наносекундах.
overwrite_elapsed
(строка) Время, затраченное на перезапись этого блоба. Пропускается, если боб не был перезаписан.
overwrite_elapsed_nanos
(целое число) Время, затраченное на перезапись этого блоба в наносекундах. Пропускается, если боб не был перезаписан.
write_throttled
(строка) Время ожидания ограничения max_snapshot_bytes_per_sec при записи этого блоба.
write_throttled_nanos
(целое число) Время ожидания ограничения max_snapshot_bytes_per_sec при записи этого блоба в наносекундах.
reads

(массив) Описание каждой операции чтения, выполненной над этим блобом.

Свойства элементов в reads
node

(объект) Идентифицирует узел, который выполнил операцию чтения.

Свойства node
id
(строка) Идентификатор узла-читающего.
name
(строка) Название узла-читающего.
before_write_complete
(логическое значение) Могла ли операция чтения начаться до завершения операции записи. Пропускается, если false.
found
(логическое значение) Был ли боб найден этой операцией чтения или нет. Может быть false, если чтение было начато до завершения записи, или запись была прервана до завершения.
first_byte_time
(строка) Время ожидания первого байта операции чтения. Пропускается, если боб не был найден.
first_byte_time_nanos
(целое число) Время ожидания первого байта операции чтения в наносекундах. Пропускается, если боб не был найден.
elapsed
(строка) Время, затраченное на чтение этого блоба. Пропускается, если боб не был найден.
elapsed_nanos
(целое число) Время, затраченное на чтение этого блоба в наносекундах. Пропускается, если боб не был найден.
throttled
(строка) Время ожидания из-за ограничений max_restore_bytes_per_sec или indices.recovery.max_bytes_per_sec во время чтения этого блоба. Пропускается, если боб не был найден.
throttled_nanos
(целое число) Время ожидания из-за ограничений max_restore_bytes_per_sec или indices.recovery.max_bytes_per_sec во время чтения этого блоба в наносекундах. Пропускается, если боб не был найден.
listing_elapsed
(строка) Время, затраченное на получение списка всех блобов в контейнере.
listing_elapsed_nanos
(целое число) Время, затраченное на получение списка всех блобов в контейнере в наносекундах.
delete_elapsed
(строка) Время, затраченное на удаление всех блобов из контейнера.
delete_elapsed_nanos
(целое число) Время, затраченное на удаление всех блобов из контейнера в наносекундах.

© 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/7.17/repo-analysis-api.html

Spec-Zone.ru

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