Настройка времени хранения метрик в Graphite

Mitigator хранит данные графиков в Graphite. В базовой настройке метрики хранятся максимум 182 дня, при необходимости можно изменить время хранения и точность.

Параметры задаются в файле конфигурации storage-schemas.conf, базовое содержимое:

[mitigator]
pattern = ^mitigator\.
retentions = 5s:1d,10s:7d,1m:30d,5m:145d,10m:182d

[carbon]
pattern = ^carbon\.
retentions = 60s:5d,5m:30d

[default_1min_for_1day]
pattern = .*
retentions = 60s:1d,5m:10d

Синтаксис файла конфигурации описан в документации Graphite. В базовом варианте данные за последние сутки хранятся с интервалом 5 секунд, за последнюю неделю — 10 секунд и т. д. Важно понимать, что времена хранения не суммируются, то есть самые старые данные будут на 182 дня назад. Рекомендуется менять только параметры раздела [mitigator].

Для изменения настроек нужно подготовить и примонтировать новый файл конфигурации сервису Graphite. Если файл создан в /srv/mitigator, монтирование выполняется через docker-compose.override.yml следующим образом:

version: "2.1"
services:
  graphite:
    volumes:
    - ./storage-schemas.conf:/etc/go-carbon/storage-schemas.conf:ro

Все манипуляции выполняются на остановленном контейнере Graphite.

docker-compose stop graphite

Новый файл конфигурации будет иметь силу только для новых файлов метрик, то есть не будет работать для существующих политик. Для их обновления имеется штатный скрипт whisper-resize (оригинал, deb-пакет python3-whisper).

Файлы метрик Mitigator´а хранятся в директории /var/lib/docker/volumes/mitigator_graphite/_data/mitigator.

Обновить все файлы метрик для хранения, например, до 2 лет (730 дней) можно следующим образом:

find /var/lib/docker/volumes/mitigator_graphite/_data/mitigator -name '*.wsp' \
    -exec whisper-resize {} 5s:1d 10s:7d 1m:30d 5m:145d 10m:182d 30m:730d \;

Cкрипт может выполняться несколько часов для базы с большим количеством политик.

Увеличится объем дискового пространства, занимаемого метриками. Чтобы оценить эффект, можно запустить скрипт на одном файле, затем умножить разницу в размерах на количество файлов:
find /var/lib/docker/volumes/mitigator_graphite/_data/mitigator -name '*.wsp' | wc -l

Запустить Graphite с новыми настройками:

docker-compose up -d graphite

Скрипт создает файлы с расширением .bak для каждой метрики перед изменением. После успешного обновления их можно удалить:

find /var/lib/docker/volumes/mitigator_graphite -name '*.bak' -delete