В некоторых случаях, например, при неправильной настройке плагинов, в VictoriaMetrics записываются неправильные данные. Удалить их можно только вместе с соответствующим временным рядом. Выборочное удаление данных ряда только за указанный период времени невозможно.
Особенности удаления временных рядов#
Используйте механизм удаления временных рядов только по необходимости, так как эта операция создаёт большую нагрузку на CPU и RAM.
Дисковое пространство, занятое удалённым временным рядом, не освобождается мгновенно. Фактическое освобождение происходит при последующих фоновых слияниях файлов данных. Если удалены очень старые данные (срок давности — несколько месяцев), то фоновое слияние по месячным партициями для них может не запускаться. В этом случае нужно будет запустить принудительное слияние, которое создаёт большую нагрузку на CPU и RAM.
Удалённые временные ряды перестают быть доступными не сразу. Они не будут доступны в запросах, но могут какое-то время (до следующей очистки) храниться на диске.
IndexDB для удалённого временного ряда очищается не сразу, а согласно политике Retention . Из-за этого автодополнение для удалённых имён и меток может работать ещё некоторое время после удаления связанного с ними временного ряда.
Принятые обозначения#
В приведённых ниже командах используются обозначения, указанные в таблице. Если вы не изменяли соответствующие настройки, используйте значения из колонки «По умолчанию».
| Обозначение | Описание | Значение по умолчанию |
|---|---|---|
<password> |
Пароль пользователя для авторизации BasicAuth | skala-r |
<pathPrefix> |
Префикс VictoriaMetrics. Значение задаётся в параметре -http.pathPrefix |
/vision/victoriametrics |
<port> |
Порт VictoriaMetrics | 8428 |
<selector> |
Селектор временного ряда | — |
<username> |
Имя пользователя для авторизации BasicAuth | vision |
Поскольку в большинстве случаев эндпоинты API недоступны для внешних подключений, все приведённые ниже команды выполняйте на узле, на котором установлен соответствующий компонент. Если эндпоинт API разрешает внешние подключения, вместо IP-адреса локального узла 127.0.0.1 используйте внешний IP-адрес узла.
Подготовка к работе#
Для удаления временного ряда:
-
Определите селектор временного ряда .
Используйте селектор по названию метрики или максимально точное выражение. Использование слишком широких селекторов приведёт к удалению избыточного количества данных.
Примеры селекторов:
-
Временной ряд метрики
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
Удаление серий#
Если удаляемый ряд выбран корректно, переходите к удалению.
| Важно |
|---|
Эндпоинт /api/v1/admin/tsdb/delete_series принимает любой HTTP-метод. Это значит, что данные будут удалены даже при использовании метода GET, например, при переходе по ссылке в браузере. |
Количество удаляемых серий задаётся в значениях двух параметров:
| Параметр | Описание | Значение по умолчанию |
|---|---|---|
-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
В этот раз запрос вернёт пустой массив данных. Удалённые временные ряды могут ещё какое-то время отображаться, но выбрать данные из них будет уже нельзя.
Удаление старых данных#
Чтобы удалить данные с диска, запустите принудительное слияние старых месячных партиций:
curl -ksG 'https://127.0.0.1:<port><pathPrefix>/internal/force_merge?partition_prefix=YYYY_MM \
-u <username>:<password> | jq