Метрики
OpenTelemetry Metrics API позволяет измерять числовые характеристики системы: счётчики запросов, время ответа, использование ресурсов и другие показатели. Метрики периодически собираются и экспортируются в формате OTLP.
Архитектура
ОтелПровайдерМетрик
└── ОтелМетр
├── ОтелСчетчик
├── ОтелРеверсивныйСчетчик
├── ОтелДатчик
├── ОтелГистограмма
├── ОтелЭкспоненциальнаяГистограмма
├── ОтелНаблюдаемыйСчетчик
├── ОтелНаблюдаемыйРеверсивныйСчетчик
└── ОтелНаблюдаемыйДатчикСоздание провайдера
#Использовать opentelemetry
Ресурс = Новый ОтелРесурс();
Ресурс.Атрибуты().Установить("service.name", "my-service");
Транспорт = Новый ОтелHttpТранспорт("http://localhost:4318");
Экспортер = Новый ОтелЭкспортерМетрик(Транспорт);
// Периодический читатель — экспортирует каждые 60 секунд
Читатель = Новый ОтелПериодическийЧитательМетрик(Экспортер, 60000);
Читатель.Запустить();
Провайдер = Новый ОтелПостроительПровайдераМетрик()
.УстановитьРесурс(Ресурс)
.ДобавитьЧитатель(Читатель)
.Построить();
Метр = Провайдер.ПолучитьМетр("my-library", "1.0.0");Синхронные инструменты
Counter (Счётчик)
Монотонно возрастающий счётчик. Используется для подсчёта событий, запросов, байт и т.п.
// Создание
Счетчик = Метр.СоздатьСчетчик("http.requests", "Количество запросов", "1");
// Использование
Счетчик.Добавить(1);
// С атрибутами
Атрибуты = Новый ОтелАтрибуты();
Атрибуты.Установить("http.method", "GET");
Атрибуты.Установить("http.status_code", 200);
Счетчик.Добавить(1, Атрибуты);UpDownCounter (Реверсивный счётчик)
Счётчик, который может как увеличиваться, так и уменьшаться. Используется для очередей, пула соединений.
ОчередьСчетчик = Метр.СоздатьРеверсивныйСчетчик("queue.size", "Размер очереди", "1");
ОчередьСчетчик.Добавить(1); // задача добавлена
ОчередьСчетчик.Добавить(-1); // задача обработанаGauge (Датчик)
Фиксирует последнее измеренное значение. Используется для CPU, памяти, температуры.
Датчик = Метр.СоздатьДатчик("cpu.usage", "Загрузка CPU", "%");
Датчик.Записать(75.5);
// С атрибутами
Атрибуты = Новый ОтелАтрибуты();
Атрибуты.Установить("cpu.core", "0");
Датчик.Записать(62.3, Атрибуты);Histogram (Гистограмма)
Распределяет значения по корзинам. Идеально для времени ответа, размеров запросов.
Гистограмма = Метр.СоздатьГистограмму("http.duration", "Время ответа", "ms");
// Запись измерения
Гистограмма.Записать(150);
// С атрибутами
Атрибуты = Новый ОтелАтрибуты();
Атрибуты.Установить("http.route", "/api/orders");
Гистограмма.Записать(230, Атрибуты);ExponentialHistogram (Экспоненциальная гистограмма)
Гистограмма с автоматическими экспоненциальными корзинами. Более точная при широком диапазоне значений.
ЭксГистограмма = Метр.СоздатьЭкспоненциальнуюГистограмму("db.query.duration", "Время запроса к БД", "ms");
ЭксГистограмма.Записать(45);Наблюдаемые (асинхронные) инструменты
Наблюдаемые инструменты вызывают callback-функцию при каждом сборе метрик. Это удобно для измерений, которые дорого получать по запросу.
ObservableCounter
// Регистрация callback
Функция ПолучитьОшибки(Наблюдение) Экспорт
// вызывается при каждом сборе метрик
Наблюдение.Записать(ПолучитьКоличествоОшибокИзСистемы());
КонецФункции
НаблСчетчик = Метр.СоздатьНаблюдаемыйСчетчик("process.errors", "Количество ошибок", "1");
НаблСчетчик.ДобавитьCallback(ЭтотОбъект, "ПолучитьОшибки");ObservableUpDownCounter
Функция ПолучитьРазмерПула(Наблюдение) Экспорт
Наблюдение.Записать(ПулСоединений.Размер());
КонецФункции
НаблРеверсивный = Метр.СоздатьНаблюдаемыйРеверсивныйСчетчик("db.pool.size", "Размер пула", "1");
НаблРеверсивный.ДобавитьCallback(ЭтотОбъект, "ПолучитьРазмерПула");ObservableGauge
Функция ПолучитьПамять(Наблюдение) Экспорт
Наблюдение.Записать(ПолучитьИспользуемуюПамятьМб());
КонецФункции
НаблДатчик = Метр.СоздатьНаблюдаемыйДатчик("process.memory", "Использование памяти", "MB");
НаблДатчик.ДобавитьCallback(ЭтотОбъект, "ПолучитьПамять");Периодический читатель метрик
ОтелПериодическийЧитательМетрик запускает фоновый поток, который собирает и экспортирует метрики с заданным интервалом.
// Интервал задаётся в миллисекундах (60000 = 60 секунд)
Читатель = Новый ОтелПериодическийЧитательМетрик(Экспортер, 60000);
Читатель.Запустить();
// ... работа приложения ...
// При завершении — сброс накопленных метрик
Провайдер.Закрыть();Настройка через переменную окружения:
export OTEL_METRIC_EXPORT_INTERVAL=30000 # каждые 30 секундЧитатель Prometheus
ОтелПрометеусЧитательМетрик предоставляет метрики в формате Prometheus для scraping:
Читатель = Новый ОтелПрометеусЧитательМетрик();
Провайдер = Новый ОтелПостроительПровайдераМетрик()
.УстановитьРесурс(Ресурс)
.ДобавитьЧитатель(Читатель)
.Построить();Представления (Views)
ОтелПредставление позволяет переименовывать инструменты, фильтровать атрибуты и менять агрегацию.
// Оставить только нужные атрибуты, убрать чувствительные данные
Селектор = Новый ОтелСелекторИнструментов();
Селектор.УстановитьИмяИнструмента("http.requests");
Представление = Новый ОтелПредставление();
Представление.УстановитьСелектор(Селектор);
Представление.УстановитьФильтрАтрибутов(Новый ОтелФильтрМетрик("http.method", "http.status_code"));
Провайдер = Новый ОтелПостроительПровайдераМетрик()
.ДобавитьПредставление(Представление)
.Построить();// Использовать экспоненциальную гистограмму вместо явных корзин
Селектор = Новый ОтелСелекторИнструментов();
Селектор.УстановитьИмяИнструмента("http.duration");
Представление = Новый ОтелПредставление();
Представление.УстановитьСелектор(Селектор);
Представление.УстановитьАгрегацию(ОтелАгрегация.ExponentialHistogram());
Провайдер = Новый ОтелПостроительПровайдераМетрик()
.ДобавитьПредставление(Представление)
.Построить();Агрегации
ОтелАгрегация определяет, как измерения объединяются в точку данных:
| Метод | Описание |
|---|---|
ОтелАгрегация.Sum() | Сумма всех измерений (Counter, UpDownCounter) |
ОтелАгрегация.LastValue() | Последнее значение (Gauge) |
ОтелАгрегация.ExplicitBucketHistogram() | Гистограмма с явными корзинами |
ОтелАгрегация.ExponentialHistogram() | Экспоненциальная гистограмма |
ОтелАгрегация.Drop() | Отбросить измерения (отключить инструмент) |
Временна́я агрегация
ОтелВременнаяАгрегация определяет, как агрегируются данные во времени:
| Значение | Описание |
|---|---|
Cumulative | Накопительные значения с начала работы (по умолчанию) |
Delta | Разница за интервал экспорта |
# Настройка через переменную окружения
export OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE=deltaСмотрите также
- Автоконфигурация — настройка через
OTEL_METRICS_EXPORTER,OTEL_METRIC_EXPORT_INTERVAL - Экспорт — эндпоинт
/v1/metrics - API: ОтелМетр
- API: ОтелПровайдерМетрик
