ОтелСелекторВременнойАгрегации
Модуль селекторов временной агрегации (AggregationTemporalitySelector) для экспортёра метрик.
Описание
Селектор задаёт временную агрегацию (ОтелВременнаяАгрегация) по типу инструмента. Его передают в конструктор ОтелЭкспортерМетрик параметром СелекторВременнойАгрегации; без него экспортёр использует ВсегдаКумулятивная().
Селектор — объект с функцией Применить(ТипИнструмента), которая возвращает ОтелВременнаяАгрегация.Кумулятивная() или ОтелВременнаяАгрегация.Дельта(). Функции модуля возвращают готовые селекторы; свой селектор — любой объект с такой функцией.
Как применяется селектор:
- Периодический читатель запрашивает у экспортёра (
ПолучитьВременнуюАгрегацию) временную агрегацию для вида инструмента каждого потока, собирает поток с ней и записывает её в данные метрики (ВременнаяАгрегация()ОтелДанныеМетрики). Значение, отличное отДельта(), читатель считает кумулятивной агрегацией. - OTLP-экспортёр передаёт временную агрегацию данных в OTLP, а для данных без неё (от продюсеров метрик) выбирает её селектором по типу метрики: монотонная сумма —
counter, немонотонная —up_down_counter, гистограмма —histogram, экспоненциальная гистограмма —exponentialHistogram. - Prometheus-читатель селектор не использует: его данные всегда кумулятивные.
С кумулятивной агрегацией точки содержат значения, накопленные с создания потока, с дельта-агрегацией — значения за время с прошлого сбора (у асинхронной суммы — разницу с наблюдением прошлого сбора). Дельта-поток синхронного инструмента не хранит серии между сборами: серия без измерений за интервал не выводится. У датчиков временной агрегации в OTLP нет, но от неё зависит сбор синхронного датчика: с дельтой выводятся только серии, записанные после прошлого сбора.
Типы инструментов
| Тип инструмента | Инструмент | ВсегдаКумулятивная | ПредпочтительноДельта | НизкоеПотреблениеПамяти |
|---|---|---|---|---|
counter | ОтелСчетчик | кумулятивная | дельта | дельта |
up_down_counter | ОтелРеверсивныйСчетчик | кумулятивная | кумулятивная | кумулятивная |
histogram | ОтелГистограмма | кумулятивная | дельта | дельта |
gauge | ОтелДатчик | кумулятивная | дельта | кумулятивная |
observable_counter | ОтелНаблюдаемыйСчетчик | кумулятивная | дельта | кумулятивная |
observable_up_down_counter | ОтелНаблюдаемыйРеверсивныйСчетчик | кумулятивная | кумулятивная | кумулятивная |
observable_gauge | ОтелНаблюдаемыйДатчик | кумулятивная | дельта | кумулятивная |
Другой тип (например, exponentialHistogram у данных продюсера) ПредпочтительноДельта относит к дельте, а НизкоеПотреблениеПамяти — к кумулятивной агрегации.
Настройка
Автоконфигурация (переменная окружения) и файл конфигурации (temporality_preference экспортёра otlp_http или otlp_grpc) выбирают селектор OTLP-экспортёра метрик по предпочтению временной агрегации:
| Селектор | OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE | temporality_preference |
|---|---|---|
ВсегдаКумулятивная | cumulative (по умолчанию) | cumulative (по умолчанию) |
ПредпочтительноДельта | delta | delta |
НизкоеПотреблениеПамяти | lowmemory | low_memory |
Значения читаются без учёта регистра. В переменной окружения подчёркивания не учитываются (подходит и low_memory). Нераспознанное значение даёт ВсегдаКумулятивная, автоконфигурация пишет о нём предупреждение в лог.
Функции
ВсегдаКумулятивная
Возвращает селектор для предпочтения cumulative: кумулятивная агрегация для всех типов инструментов. Селектор по умолчанию.
Возвращает: УниФункция — селектор: Применить(ТипИнструмента) возвращает ОтелВременнаяАгрегация.Кумулятивная()
ПредпочтительноДельта
Возвращает селектор для предпочтения delta (спецификация OTLP Metric Exporter, переменная OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE): кумулятивная агрегация для up_down_counter и observable_up_down_counter, дельта — для остальных типов. Спецификация задаёт дельту для счётчиков (синхронного и асинхронного) и гистограммы, а про датчики не говорит; SDK, как Java SDK, выбирает дельту и для датчиков.
Возвращает: УниФункция — селектор: Применить(ТипИнструмента) возвращает значение из ОтелВременнаяАгрегация
НизкоеПотреблениеПамяти
Возвращает селектор для предпочтения lowmemory (спецификация OTLP Metric Exporter, переменная OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE): дельта для counter и histogram (синхронные счётчик и гистограммы, включая экспоненциальную), кумулятивная агрегация — для остальных типов. Дельта-потоки синхронных инструментов не хранят серии между сборами.
Возвращает: УниФункция — селектор: Применить(ТипИнструмента) возвращает значение из ОтелВременнаяАгрегация
Внутренние функции
Экспортированы только для вызова из других модулей SDK (в OneScript нет внутренней видимости), приложению вызывать их не нужно:
ТипИнструментаДляВида— тип инструмента для селектора по виду инструмента ("Counter"→"counter","Histogram"→"histogram"); вызывает периодический читатель;ОпределитьТипИнструментаПоТипуМетрики— тип инструмента по типу метрики и признаку монотонности; вызывает OTLP-экспортёр для данных без временной агрегации.
Пример
// Дельта для счетчиков, гистограмм и датчиков, кумулятивная - для реверсивных счетчиков
Транспорт = Новый ОтелHttpТранспорт("http://localhost:4318");
Экспортер = Новый ОтелЭкспортерМетрик(Транспорт, ОтелСелекторВременнойАгрегации.ПредпочтительноДельта());
Читатель = Новый ОтелПериодическийЧитательМетрик(Экспортер);
// Временная агрегация селектора для типа инструмента
Селектор = ОтелСелекторВременнойАгрегации.НизкоеПотреблениеПамяти();
Временность = Селектор.Применить("observable_counter"); // ОтелВременнаяАгрегация.Кумулятивная()Свой селектор — класс с функцией Применить, файл СелекторДельтаГистограмм.os:
// Дельта только для гистограмм
Функция Применить(ТипИнструмента) Экспорт
Если ТипИнструмента = "histogram" Тогда
Возврат ОтелВременнаяАгрегация.Дельта();
КонецЕсли;
Возврат ОтелВременнаяАгрегация.Кумулятивная();
КонецФункцииПодключитьСценарий("СелекторДельтаГистограмм.os", "СелекторДельтаГистограмм");
Экспортер = Новый ОтелЭкспортерМетрик(Транспорт, Новый СелекторДельтаГистограмм());