ОтелЭкспортерМетрик
Экспортер метрик в формате OTLP.
Описание
Реализует экспорт метрик по спецификации OpenTelemetry (OtlpMetricExporter). Отправляет данные метрик на адрес /v1/metrics через любой транспорт: ОтелHttpТранспорт, ОтелGrpcТранспорт, ОтелКонсольныйТранспорт или ОтелВПамятьТранспорт.
Поддерживает типы метрик: Сумма, Датчик, Гистограмма, ЭкспоненциальнаяГистограмма и Сводка (Summary от продюсеров метрик; у датчика и сводки временной агрегации нет). Перед отправкой выполняет валидацию совместимости агрегаций и темпоральности. Метаданные метрики (ОтелДанныеМетрики.Метаданные()) передаются в поле metadata.
Все методы безопасны для конкурентного вызова. Поля состояния либо иммутабельны (назначаются в конструкторе), либо хранятся в АтомарноеБулево. Экспорт идёт в вызывающем потоке и ограничен сроком: транспорт получает время, оставшееся до срока, и укладывает в него все попытки отправки и паузы между ними.
Конструктор
Новый ОтелЭкспортерМетрик(
Транспорт,
СелекторВременнойАгрегации,
ПутьСигнала,
ТаймаутМс,
АгрегацияГистограммПоУмолчанию,
НовыйЗакрыватьТранспорт
)| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
Транспорт | ОтелHttpТранспорт, ОтелGrpcТранспорт, ОтелКонсольныйТранспорт, ОтелВПамятьТранспорт | — | Транспорт для отправки данных |
СелекторВременнойАгрегации | УниФункция | Неопределено | Функция-селектор: Применить(ТипИнструмента) → Число; определяет временну́ю агрегацию для каждого типа инструмента. Готовые селекторы — ОтелСелекторВременнойАгрегации |
ПутьСигнала | Строка | "/v1/metrics" | Путь OTLP-адреса для отправки метрик |
ТаймаутМс | Число | 10000 | Таймаут экспорта в миллисекундах (OTLP Timeout), 0 — без ограничения |
АгрегацияГистограммПоУмолчанию | Строка, Соответствие | "explicit_bucket_histogram" | Агрегация гистограмм по умолчанию (OTEL_EXPORTER_OTLP_METRICS_DEFAULT_HISTOGRAM_AGGREGATION); читатель метрик берёт её у экспортера |
НовыйЗакрыватьТранспорт | Булево | Ложь | Истина — транспорт создала библиотека (автоконфигурация, файл конфигурации), экспортер закрывает его вместе с собой. Ложь — транспорт передал пользователь и закрывает его сам: один транспорт может обслуживать несколько экспортеров |
Методы
Экспортировать
Экспортирует данные метрик. Перед отправкой валидирует совместимость типов метрик и темпоральности: данные неподдерживаемого типа или без временной агрегации (AggregationTemporality) не экспортируются — метод пишет предупреждение и возвращает Ложь. По спецификации OTel Export() не должен блокироваться бесконечно: срок экспорта — меньший из таймаута вызова и таймаута экспортера (незаданный или 0 таймаут не ограничивает). Отправка идёт в вызывающем потоке, транспорт получает время, оставшееся до срока.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
МассивДанныхМетрик | Массив из ОтелДанныеМетрики | — | Данные метрик для экспорта |
Таймаут | Число | Неопределено | Таймаут вызова в миллисекундах; Неопределено или 0 — действует только таймаут экспортера |
Возвращает: Булево — Истина, если экспорт успешен; Ложь при ошибке или по истечении срока
СброситьБуфер
Принудительно отправляет все накопленные данные. Для синхронного экспортера буферизация отсутствует — всегда возвращает успех. Операция тривиально потокобезопасна (no-op).
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
ТаймаутМс | Число | 0 | Таймаут в миллисекундах (0 — без ограничения) |
Возвращает: ОтелРезультатЭкспорта — результат операции
Закрыть
Завершает работу экспортера. После вызова метод Экспортировать() возвращает Ложь. Если транспорт создала библиотека (НовыйЗакрыватьТранспорт), первый вызов закрывает и транспорт. Операция идемпотентна: повторные вызовы ничего не делают.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
ТаймаутМс | Число | 30000 | Таймаут операции в миллисекундах |
Возвращает: ОтелРезультатЗакрытия — результат закрытия; ошибка, если не удалось закрыть транспорт
ПринудительноВыгрузитьСРезультатом
Принудительно выгружает накопленные данные и возвращает результат. Для синхронного экспортера буферизация отсутствует — операция всегда успешна, если экспортер не закрыт.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
ТаймаутМс | Число | 30000 | Таймаут операции в миллисекундах |
Возвращает: ОтелРезультатЗакрытия — результат операции
ПолучитьВременнуюАгрегацию
Возвращает временну́ю агрегацию для указанного типа инструмента.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
ТипИнструмента | Строка | — | Тип инструмента: "counter", "up_down_counter", "histogram", "gauge" и т.д. |
Возвращает: Число — значение из ОтелВременнаяАгрегация
АгрегацияПоУмолчанию
Возвращает агрегацию по умолчанию для вида инструмента: читатель метрик берёт её у экспортера. Гистограммам — агрегация гистограмм экспортера, остальным видам — агрегация по умолчанию.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
ВидИнструмента | Строка | — | Вид инструмента: "Counter", "Histogram", "Gauge" и т.д. |
Возвращает: Строка, Соответствие — агрегация; "default" — агрегация по умолчанию для вида
Пример
#Использовать opentelemetry
// Создать экспортер с HTTP-транспортом
Транспорт = Новый ОтелHttpТранспорт("http://localhost:4318");
Экспортер = Новый ОтелЭкспортерМетрик(Транспорт);
// С другим селектором временной агрегации из ОтелСелекторВременнойАгрегации
Транспорт = Новый ОтелGrpcТранспорт("http://localhost:4317");
Экспортер = Новый ОтелЭкспортерМетрик(Транспорт, ОтелСелекторВременнойАгрегации.ПредпочтительноДельта());
// Закрыть после использования
Экспортер.Закрыть();