Утилита bucketfill
Назначение утилиты
Утилита предназначена для копирования prometheus-совместимых блоков с метриками из одного S3-хранилища в другое. Необходимость такой процедуры может возникнуть при частичной или полной потере данных в хранилище метрик одного из ЦОДов при отказоустойчивой конфигурации, либо после длительной недоступности ЦОДа, когда устаревшие метрики уже не могут быть доставлены.
Принцип работы и требования
Копирование метрик выполняется путем последовательного скачивания блоков из S3-хранилища источника и загрузки их в S3-хранилище ЦОДа избыточность которого требуется восстановить. Конфигурация программы или использование аргументов командной строки позволяют задать временной интервал для которого будут скопированы блоки с метриками.
Утилита может запускаться с любой машины, при условии что она имеет сетевую связность с обоими ЦОД-ами и достаточную полосу пропускания. В процессе копирования, программа параллельно буферизирует не более одного блока каждого тенанта на диск, поэтому, для бесперебойной работы программы, необходимо обеспечить достаточное количество свободного места на диске в каталоге /tmp
, в особенности, когда суточный объем данных достаточно большой. Рекомендуем иметь не менее 50 GB свободного места.
Описание конфигурационного файла
Конфигурационный YAML-файл имеет следующий вид:
# Исходное и целевое хранилища (обязательно)
bucketStores:
# Исходное хранилище (обязательно)
src:
bucket: "blocks" # Имя корзины (обязательно)
endpoint: "s3-storage:9000" # Точка подключения S3 (обязательно)
accessKeyID: "aws_access_key_id" # ID ключа доступа S3 (обязательно)
secretAccessKey: "aws_secret_access_key" # Секретный ключ доступа S3 (обязательно)
disableSSL: false # Отключение проверки SSL (обязательно)
# Целевое хранилище (обязательно)
dest:
bucket: "blocks" # Имя корзины (обязательно)
endpoint: "s3-storage-backup:9000" # Точка подключения S3 (обязательно)
accessKeyID: "aws_access_key_id" # ID ключа доступа S3 (обязательно)
secretAccessKey: "aws_secret_access_key" # Секретный ключ доступа S3 (обязательно)
disableSSL: false # Отключение проверки SSL (обязательно)
# Локальное хранилище файлов (опционально, по умолчанию: /tmp/bucketfill)
tmpDir: /tmp/bucketfill
# Временные границы обрабатываемых блоков (обязательно)
targetWindow:
from: 1699370055 # Начальное время в формате UNIX-time (можно указать в формате: '-from=-1h' в командной строке)
to: 1699373655 # Конечное время в формате UNIX-time (можно указать в формате: '-to=now' в командной строке)
# Уровень логирования (опционально, по умолчанию: info)
logLevel: debug
Значения параметров заполняются следующим образом:
-
В качестве
endpoint
в конфигурации указывается домен S3 каждого из ЦОД-ов (s3.<clusterBaseDomain>
), например:s3.dc1.domain
иs3.dc2.domain
-
Имя бакета источника и назначения можно получить выполнив следующую команду в кластере-источнике и кластере-назначения:
kubectl -n op-metrics get cm op-metrics-s3 -o json | jq -r '.data["BUCKET_NAME"]'
-
accessKeyID
иsecretAccessKey
для бакетов можно получить, выполнив команду в кластере-источнике и кластере-назначения:kubectl -n op-metrics get secret op-metrics-s3 -o json | jq -r '.data | map_values(@base64d)'
-
В
targetWindow.from
иtargetWindow.to
указываются даты (в формате UNIX-timestamp) начала и окончания временного диапазона, который нужно скопировать. Эти значения можно переопределить из командной строки.
Запуск команды
Скачать утилиту можно непосредственно api-домена любого кластера (доступно в модуле op-storage
версии 1.0.14 и выше), например:
curl https://api.dc1.domain/download/bucketfill -o bucketfill && chmod +x bucketfill
После подготовки конфигурационного файла (см. выше) запустить команду:
./bucketfill -config=config.yml
временной диапазон можно переопределить с помощью аргументов:
./bucketfill -config=config.yml -from=-1d -to=now
При задании интервалов можно использовать следующие суффиксы:
- Секунды:
s
,sec
,secs
,second
,seconds
- Минуты:
m
,min
,mins
,minute
,minutes
- Часы:
h
,hour
,hours
- Дни:
d
,day
,days
- Недели:
w
,week
,weeks
- Месяцы:
mon
,month
,months
- Года:
y
,year
,years