ОтелСелекторИнструментов
Селектор инструментов (InstrumentSelector) — критерии, по которым представление (View) выбирает инструменты.
Описание
Селектор передаётся вместе с представлением в ЗарегистрироватьПредставление(Селектор, Представление)построителя провайдера метрик или провайдера метрик. Для каждого инструмента SDK проверяет селекторы всех зарегистрированных View: каждый View, селектор которого выбрал инструмент, даёт отдельный поток метрики у каждого читателя, а инструмент, который не выбрал ни один селектор, получает поток по умолчанию (правила применения View — на странице ОтелПредставление). Селекторы проверяются при создании инструмента и при регистрации View: View, зарегистрированный после создания инструмента, применяется к измерениям, записанным после регистрации.
Критерии селектора:
| Критерий | С чем сравнивается | Сравнение |
|---|---|---|
Имя | имя инструмента | без учёта регистра; "*" — любой инструмент |
ТипИнструмента | вид инструмента | точное, с учётом регистра |
ИмяМетра | имя метра — имя инструментирующей библиотеки из ПолучитьМетр | точное, с учётом регистра |
Единица | единица измерения инструмента | точное, с учётом регистра (ms и MS — разные единицы) |
ВерсияМетра | версия метра | точное, с учётом регистра |
АдресСхемыМетра | адрес схемы метра | точное, с учётом регистра |
Незаданный критерий (Неопределено) пропускает любые инструменты. Заданные критерии объединяются по «И»: селектор выбирает инструмент, только если совпали все заданные критерии. Селектор без критериев выбирает все инструменты.
Шаблонов в критериях нет. Особое значение имеет только имя "*" целиком; * и ? внутри имени — обычные символы: селектор "http.*" выбирает только инструмент с именем http.*, а не все инструменты с префиксом http..
Вид инструмента — строка: Counter, UpDownCounter, Histogram, Gauge, ObservableCounter, ObservableUpDownCounter, ObservableGauge. Единица инструмента, созданного без единицы измерения, — пустая строка.
Если View задаёт НовоеИмя, селектор должен выбирать не больше одного инструмента, иначе несколько инструментов получат одно имя метрики (спецификация Metrics SDK, раздел View). Для такого View с селектором без точного имени (Имя не задано или "*") метр пишет предупреждение в лог. Если потоки одного читателя всё же получили одно имя, все они экспортируются, в лог пишется предупреждение о конфликте идентичности метрик.
Критерии ТипИнструмента и Единица разводят одноимённые инструменты разного вида или единицы: при такой повторной регистрации метр пишет в лог предупреждение и советует View с селектором по имени и виду (или единице) и новым именем метрики.
Конструктор
Новый ОтелСелекторИнструментов(Имя, ТипИнструмента, ИмяМетра, Единица, ВерсияМетра, АдресСхемыМетра)Все параметры необязательные.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
Имя | Строка | Неопределено | Имя инструмента без учёта регистра; "*" — любой инструмент |
ТипИнструмента | Строка | Неопределено | Вид инструмента: Counter, Histogram, ObservableGauge, ... |
ИмяМетра | Строка | Неопределено | Имя метра (инструментирующей библиотеки) |
Единица | Строка | Неопределено | Единица измерения инструмента |
ВерсияМетра | Строка | Неопределено | Версия метра |
АдресСхемыМетра | Строка | Неопределено | Адрес схемы метра |
Методы
Совпадает
Проверяет, выбирает ли селектор инструмент с указанными параметрами. SDK вызывает метод при разрешении потоков инструмента: передаёт имя, вид и единицу инструмента и имя, версию и адрес схемы его метра. Вызвать метод можно и самому, чтобы проверить селектор.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
ИмяИнструмента | Строка | — | Имя инструмента |
ТипИнструмента | Строка | "" | Вид инструмента |
НовоеИмяМетра | Строка | "" | Имя метра |
ЕдиницаИнструмента | Строка | "" | Единица измерения инструмента |
НоваяВерсияМетра | Строка | "" | Версия метра |
НовыйАдресСхемыМетра | Строка | "" | Адрес схемы метра |
Возвращает: Булево — Истина, если совпали все заданные критерии селектора
Имя
Возвращает критерий имени инструмента.
Возвращает: Строка, Неопределено — имя или "*"; Неопределено, если критерий не задан
ТипИнструмента
Возвращает критерий вида инструмента.
Возвращает: Строка, Неопределено — вид инструмента (Counter, Histogram, ...); Неопределено, если критерий не задан
ИмяМетра
Возвращает критерий имени метра.
Возвращает: Строка, Неопределено — Неопределено, если критерий не задан
ВерсияМетра
Возвращает критерий версии метра.
Возвращает: Строка, Неопределено — Неопределено, если критерий не задан
Единица
Возвращает критерий единицы измерения инструмента.
Возвращает: Строка, Неопределено — Неопределено, если критерий не задан
АдресСхемыМетра
Возвращает критерий адреса схемы метра.
Возвращает: Строка, Неопределено — Неопределено, если критерий не задан
Пример
// Отбросить все инструменты библиотеки legacy-lib
СелекторБиблиотеки = Новый ОтелСелекторИнструментов("*", , "legacy-lib");
Отбросить = Новый ОтелПредставление(, , , , ОтелАгрегация.Отбросить());
// Переименовать одну гистограмму: точное имя, вид и единица
СелекторЗадержки = Новый ОтелСелекторИнструментов("http.client.duration", "Histogram", , "ms");
Переименовать = Новый ОтелПредставление("http.client.duration.ms");
Провайдер = Новый ОтелПостроительПровайдераМетрик()
.ЗарегистрироватьЧитатель(Читатель)
.ЗарегистрироватьПредставление(СелекторБиблиотеки, Отбросить)
.ЗарегистрироватьПредставление(СелекторЗадержки, Переименовать)
.Построить();
// Имя сравнивается без учёта регистра, единица - с учётом
Выбран = СелекторЗадержки.Совпадает("HTTP.Client.Duration", "Histogram", "my-lib", "ms"); // Истина
Выбран = СелекторЗадержки.Совпадает("http.client.duration", "Histogram", "my-lib", "s"); // Ложь