Skip to main content

Историческая телеметрия

Платформа Strix использует ClickHouse как колоночную аналитическую СУБД для хранения исторических данных телеметрии. Архитектура трёхуровневой агрегации обеспечивает баланс между точностью данных, скоростью запросов и объёмом хранения.

Архитектура хранения

Три уровня агрегации

УровеньТаблицаРазрешениеСрок храненияАгрегатыРазмер / устройство
Rawtelemetry_rawКаждое значение (1--5 с)7 дней--~50 МБ/сут
1 минtelemetry_1min1 минута90 днейavg, min, max, count~1 МБ/сут
1 часtelemetry_1hour1 час2 годаavg, min, max, count~20 КБ/сут
Materialized Views

Агрегация выполняется автоматически при вставке данных через Materialized Views ClickHouse. Никаких cron-задач или фоновых процессов не требуется -- агрегат обновляется синхронно с каждым INSERT в telemetry_raw.

Структура таблиц

telemetry_raw

CREATE TABLE telemetry_raw (
equipment_id String,
parameter String,
ts DateTime64(3),
value Float64,
quality UInt8, -- 0=good, 1=uncertain, 2=bad
source String -- mqtt, opcua, rest, manual
) ENGINE = MergeTree()
PARTITION BY toYYYYMMDD(ts)
ORDER BY (equipment_id, parameter, ts)
TTL ts + INTERVAL 7 DAY;

telemetry_1min

CREATE MATERIALIZED VIEW telemetry_1min
ENGINE = AggregatingMergeTree()
PARTITION BY toYYYYMM(ts_min)
ORDER BY (equipment_id, parameter, ts_min)
TTL ts_min + INTERVAL 90 DAY
AS SELECT
equipment_id,
parameter,
toStartOfMinute(ts) AS ts_min,
avg(value) AS avg_value,
min(value) AS min_value,
max(value) AS max_value,
count() AS sample_count
FROM telemetry_raw
GROUP BY equipment_id, parameter, ts_min;

Retention-cleanup сервис

Сервис retention-cleanup ежечасно проверяет политику хранения из субмодели StoragePolicy (на facility shell) и удаляет устаревшие данные:

Параметр StoragePolicyОписаниеПо умолчанию
RawRetentionDaysСрок хранения raw-данных7
AggRetentionDaysСрок хранения 1-мин агрегатов90
ArchiveRetentionDaysСрок хранения 1-час агрегатов730 (2 года)
Переопределение по типу оборудования

В StoragePolicy можно задать Overrides[] с фильтром MatchEquipmentType, чтобы увеличить retention для критического оборудования (например, 30 дней raw для мельниц вместо 7).

Конфигурационный каскад

Параметры хранения и опроса определяются каскадом с приоритетом от частного к общему:

Запросы из фронтенда

Composable useClickHouseQuery автоматически выбирает уровень агрегации в зависимости от запрашиваемого периода:

Запрашиваемый периодИспользуемая таблицаОбоснование
До 2 часовtelemetry_rawМаксимальная детализация, допустимый объём
2 часа -- 7 днейtelemetry_1minБаланс точности и скорости
Более 7 днейtelemetry_1hourМинимальная нагрузка на ClickHouse

Пример использования

const { data, loading, error } = useClickHouseQuery({
equipmentId: 'pump-401',
parameter: 'MotorCurrent',
from: '2026-03-25T00:00:00Z',
to: '2026-03-26T00:00:00Z',
// tier выбирается автоматически: 24ч → telemetry_1min
});

Флаги качества

Каждая запись в telemetry_raw маркируется флагом качества:

ФлагЗначениеИсточник
0 (good)Данные достоверныtelemetry-writer (по умолчанию)
1 (uncertain)Задержка доставки или восстановленное значениеtelemetry-writer / data-quality
2 (bad)Выброс, застывшее значение или ручная маркировкаdata-quality (ретроспективно)

При агрегации в telemetry_1min записи с quality=2 исключаются из расчёта avg_value, но учитываются в sample_count.

Pipeline записи данных

Сервис telemetry-writer получает значения из MQTT и записывает в ClickHouse:

  1. Подписка на MQTT-топики по маске из TelemetryConfig
  2. Буферизация входящих значений (flush каждые 5 с или при достижении 1000 записей)
  3. Пакетная вставка в telemetry_raw через HTTP-интерфейс ClickHouse
  4. Materialized Views автоматически обновляют агрегаты

Визуализация

Компонент TelemetryHistoryChart отображает исторические данные в виде интерактивного графика:

  • Автоматический выбор тира агрегации по масштабу
  • Наложение нескольких параметров на одну ось
  • Зоны качества данных (цветовая заливка по флагам)
  • Экспорт в CSV для внешнего анализа
  • Zoom / pan с автоматической подгрузкой детальных данных

Оценка объёмов хранения

ПараметрЗначение
Оборудований в проекте100
Параметров на оборудование (среднее)10
Период опроса5 с
Raw за сутки~5 ГБ (сжатие ClickHouse ~10x)
1 мин за сутки~100 МБ
1 час за сутки~2 МБ
Итого за год (с retention)~45 ГБ raw (7 дней) + 9 ГБ 1min (90 дней) + 0.7 ГБ 1hour (2 года)