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