VictoriaMetrics — Удаление временных рядов

В некоторых случаях, например, при неправильной настройке плагинов, в 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