Удаление временных рядов из VictoriaMetrics
В некоторых случаях, например, при неправильной настройке плагинов, в VictoriaMetrics записываются неправильные данные. Удалить их можно только вместе с соответствующим временным рядом. Выборочное удаление данных ряда только за указанный период времени невозможно.
Особенности удаления временных рядов
Используйте механизм удаления временных рядов только по необходимости, так как эта операция создаёт большую нагрузку на CPU и RAM.
Дисковое пространство, занятое удалённым временным рядом, не освобождается мгновенно. Фактическое освобождение происходит при последующих фоновых слияниях файлов данных. Если удалены очень старые данные (срок давности — несколько месяцев), то фоновое слияние по месячным партициями для них может не запускаться. В этом случае нужно будет запустить принудительное слияние, которое создаёт большую нагрузку на CPU и RAM.
Удалённые временные ряды перестают быть доступными не сразу. Они не будут доступны в запросах, но могут какое-то время (до следующей очистки) храниться на диске.
IndexDB для удалённого временного ряда очищается не сразу, а согласно политике Retention. Из-за этого автодополнение для удалённых имён и меток может работать ещё некоторое время после удаления связанного с ними временного ряда.
Принятые обозначения
В приведённых ниже командах используются обозначения, указанные в таблице. Если вы не изменяли соответствующие настройки, используйте значения из колонки Значение по умолчанию.
| Обозначение | Описание | Значение по умолчанию |
|---|---|---|
|
Пароль пользователя для авторизации BasicAuth |
|
|
Префикс VictoriaMetrics. Значение задаётся в параметре |
|
|
Порт VictoriaMetrics |
8428 |
|
Селектор временного ряда |
— |
|
Имя пользователя для авторизации BasicAuth |
|
Поскольку в большинстве случаев эндпоинты API недоступны для внешних подключений, все приведённые ниже команды выполняйте на узле, на котором установлен соответствующий компонент. Если эндпоинт API разрешает внешние подключения, вместо IP-адреса локального узла 127.0.0.1 используйте внешний IP-адрес узла.
Подготовка к работе
Для удаления временного ряда:
-
Определите селектор временного ряда.
Используйте селектор по названию метрики или максимально точное выражение. Использование слишком широких селекторов приведёт к удалению избыточного количества данных.
Пример 1. Примеры селекторов-
Временной ряд метрики
bad_metric:match[]=bad_metric -
Временной ряд с меткой
env, равнойstaging:match[]{env="staging"} -
Временной ряд метрики
bad_metric, для которого меткаjobравнаnode_exporter, а метка_pak_idравнаПАК1илиПАК2:match[]=bad_metric{job="node_exporter", _pak_id=~"ПАК1|ПАК2"}
-
-
Подготовьте параметры для аутентификации в API.
Все версии Визион используют для защиты эндпоинтов BasicAuth. Соответствующие значения задаются в параметрах
-httpAuth.usernameи-httpAuth.password.Значение параметра -httpAuth.passwordв конфигурации компонента дополнительно шифруется.Эндпоинты VictoriaMetrics и vmselect могут быть дополнительно защищены. Подробности см. в документации VictoriaMetrics.
-
Убедитесь, что на узлах с нужным компонентом установлены утилиты
curlиjq.
Проверка селектора
Чтобы случайно не удалить не тот временной ряд, перед удалением проверьте данные выбранного ряда: метки, количество записей и другие свойства. Для этого выполните команду:
curl -ksG 'https://127.0.0.1:<port><pathPrefix>/prometheus/api/v1/series' \
-u <username>:<password> \
--data-urlencode 'match[]=<selector>' | jq
По умолчанию этот запрос возвращает данные только с начала последних суток по UTC. Чтобы получить данные более старых временных рядов, задайте значения параметров start и end, например:
curl -ksG 'https://127.0.0.1:<port><pathPrefix>/prometheus/api/v1/series' \
-u <username>:<password> \
--data-urlencode 'match[]=<selector>' \
--data-urlencode 'start=2020-01-01T00:00:00Z' \
--data-urlencode 'end=now' | jq
Удаление серий
Если удаляемый ряд выбран корректно, переходите к удалению.
|
Эндпоинт |
Количество удаляемых серий задаётся в значениях двух параметров:
-
-search.maxDeleteSeriesМаксимальное количество удаляемых записей.
Значение по умолчанию:
1000000. -
-search.maxDeleteDurationОграничение по времени на удаление записей.
Значение по умолчанию:
5m0s(5 минут).
Если указанных значений будет недостаточно, измените параметры запуска компонента.
Для удаления временных рядов выполните команду:
curl -kvG 'https://127.0.0.1:<port><pathPrefix>/api/v1/admin/tsdb/delete_series' \
-u <username>:<password> \
--data-urlencode 'match[]=<selector>'
Ожидаемый код ответа — HTTP 204 No content.
Проверка
Чтобы убедиться в удалении нужного временного ряда, выполните команду:
curl -ksG 'https://127.0.0.1:<port><pathPrefix>/prometheus/api/v1/series' \
-u <username>:<password> \
--data-urlencode 'match[]=<selector>' \
--data-urlencode 'start=2020-01-01T00:00:00Z' \
--data-urlencode 'end=now' | jq
В этот раз запрос вернёт пустой массив данных. Удалённые временные ряды могут ещё какое-то время отображаться, но выбрать данные из них будет уже нельзя.