ОтелФильтрЭкземпляров
Модуль фильтров exemplars (ExemplarFilter): какие измерения могут стать exemplars.
Описание
Exemplar — измерение, сохранённое вместе с точкой метрики: значение, время, ID трассировки и спана и атрибуты, которые отбросил фильтр атрибутов потока (формат — в ОтелДанныеМетрики). Фильтр решает, какие измерения предлагаются резервуару exemplars серии, а резервуар — какие из них сохранить (спецификация Metrics SDK, раздел ExemplarFilter).
| Фильтр | Значение | OTEL_METRICS_EXEMPLAR_FILTER | Какие измерения предлагаются резервуару |
|---|---|---|---|
ВсегдаВключен() | 1 | always_on | Все |
ВсегдаВыключен() | 2 | always_off | Никакие: резервуары exemplars у серий не создаются |
ПоТрассировке() | 3 | trace_based | Записанные в контексте сэмплированного спана |
Фильтр один на провайдер метрик и действует на все его инструменты. По умолчанию — ПоТрассировке(). Задают фильтр:
- методом
УстановитьФильтрЭкземпляровОтелПостроительПровайдераМетрик или третьим параметром конструктора ОтелПровайдерМетрик (Ресурс,Читатели,ФильтрЭкземпляров); - переменной окружения
OTEL_METRICS_EXEMPLAR_FILTER: построитель провайдера читает её при создании, аУстановитьФильтрЭкземпляровзаменяет это значение; конструкторОтелПровайдерМетрикпеременную не читает. Автоконфигурация берёт фильтр из того же параметра (otel.metrics.exemplar.filter). Пустое значение не меняет фильтр, нераспознанное — тоже, о нём пишется предупреждение в лог; - в файле конфигурации — значением
exemplar_filterсекцииmeter_provider(те же значения).
Фильтр провайдера возвращает его метод ФильтрЭкземпляров(). Выключить exemplars одного потока можно и без фильтра: резервуаром ОтелФабрикаNoopРезервуаров в представлении (ОтелПредставление).
Для ПоТрассировке() спан берётся из контекста измерения: явного параметра Контекст метода записи синхронного инструмента (Добавить, Записать), а без него — из текущего контекста. Спан должен быть валидным и сэмплированным (флаг sampled). У асинхронных инструментов фильтр применяется при сборе наблюдений, к текущему контексту потока, который выполняет сбор; ID трассировки и спана в их exemplars не попадают.
Функции
ВсегдаВключен
Возвращает фильтр AlwaysOn: резервуару предлагаются все измерения.
Возвращает: Число — 1
ВсегдаВыключен
Возвращает фильтр AlwaysOff: exemplars не собираются. Резервуары exemplars у серий не создаются, поэтому накладных расходов на exemplars нет.
Возвращает: Число — 2
ПоТрассировке
Возвращает фильтр TraceBased — фильтр по умолчанию: резервуару предлагаются измерения, записанные в контексте сэмплированного спана.
Возвращает: Число — 3
ИзСтроки
Возвращает фильтр по значению в формате OTEL_METRICS_EXEMPLAR_FILTER: always_on, always_off или trace_based, без учёта регистра и пробелов по краям. Так построитель провайдера и автоконфигурация разбирают значение переменной окружения; приложение может так же разобрать значение из своих настроек.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
Значение | Строка, Неопределено | — | Значение фильтра |
Возвращает: Число, Неопределено — константа фильтра; Неопределено, если значение не строка или не распознано
Внутренние функции
Экспортированы только для вызова из других модулей SDK (в OneScript нет внутренней видимости), приложению вызывать их не нужно:
ДолженЗахватить— проверяет по фильтру и контексту измерения, предлагать ли измерение резервуару exemplars; вызывают хранилища потоков метрик при записи измерений и сборе наблюдений.
Пример
// Exemplars для всех измерений, а не только для сэмплированных спанов
Провайдер = Новый ОтелПостроительПровайдераМетрик()
.УстановитьРесурс(Ресурс)
.ЗарегистрироватьЧитатель(Читатель)
.УстановитьФильтрЭкземпляров(ОтелФильтрЭкземпляров.ВсегдаВключен())
.Построить();
// Фильтр из настроек приложения в формате OTEL_METRICS_EXEMPLAR_FILTER
Фильтр = ОтелФильтрЭкземпляров.ИзСтроки("always_off"); // ОтелФильтрЭкземпляров.ВсегдаВыключен()
Если Фильтр = Неопределено Тогда
Фильтр = ОтелФильтрЭкземпляров.ПоТрассировке();
КонецЕсли;
Провайдер = Новый ОтелПостроительПровайдераМетрик()
.УстановитьФильтрЭкземпляров(Фильтр)
.Построить();