Skip to content

ОтелСчетчик ​

Счётчик (Counter) — монотонный инструмент для суммирования неотрицательных значений.

Описание ​

ОтелСчетчик реализует спецификацию OpenTelemetry Counter. Агрегирует значения суммой. Принимает только неотрицательные значения — отрицательные игнорируются с предупреждением. Все методы безопасны для конкурентного вызова из нескольких потоков.

Для значений, которые могут уменьшаться, используйте ОтелРеверсивныйСчетчик.

Thin facade — логика хранения в ОтелБазовыйСинхронныйИнструмент.

Методы ​

Добавить, Записать и Вид определены в самом классе, остальные методы унаследованы от ОтелБазовыйСинхронныйИнструмент.

Добавить ​

Добавляет значение к счётчику. Отрицательное значение и значение, которое не является числом, игнорируются с предупреждением в лог, исключение не бросается.

ПараметрТипПо умолчаниюОписание
ЗначениеЧисло—Неотрицательное значение для добавления
АтрибутыОтелАтрибутыНеопределеноАтрибуты точки данных
КонтекстСоответствие, НеопределеноНеопределеноЯвный контекст

Записать ​

То же, что Добавить. Метод есть у всех синхронных инструментов, у счётчика он тоже не принимает отрицательные значения. Параметры такие же, как у Добавить.


Включен ​

Проверяет, включён ли инструмент — записывает ли он измерения (спецификация Metrics API, раздел Enabled). У выключенного инструмента Добавить ничего не записывает, поэтому по результату можно не вычислять атрибуты и значение измерения.

Возвращает Ложь, если:

  • инструмент отключён закрытием провайдера: Закрыть() провайдера отключает инструменты его метров, в том числе созданные после закрытия;
  • инструмент создан no-op метром: его выдаёт закрытый провайдер и no-op провайдер, пока SDK не настроен;
  • все потоки инструмента используют агрегацию Drop (ОтелАгрегация.Отбросить()): её задаёт View или агрегация читателя по умолчанию для вида инструмента.

Иначе возвращает Истина.

Вызывайте Включен перед каждой записью измерения и не кэшируйте результат: он может измениться во время работы, например после регистрации View или закрытия провайдера.

ПараметрТипПо умолчаниюОписание
АтрибутыОтелАтрибуты, НеопределеноНеопределеноЗарезервирован для будущих версий, на результат не влияет

Возвращает: Булево — Истина, если инструмент записывает измерения


Вид ​

Возвращает вид инструмента.

Возвращает: Строка — "Counter"


Имя ​

Возвращает имя инструмента. Если имя уже было зарегистрировано в метре в другом регистре, возвращается имя первой регистрации. View с НовоеИмя меняет имя метрики в экспорте, а не имя инструмента.

Возвращает: Строка


Описание ​

Возвращает описание, с которым создан инструмент.

Возвращает: Строка — пустая строка, если описание не задано


ЕдиницаИзмерения ​

Возвращает единицу измерения, с которой создан инструмент.

Возвращает: Строка — пустая строка, если единица не задана

Внутренние методы ​

Экспортированы только для вызова из других модулей SDK (в OneScript нет внутренней видимости), приложению вызывать их не нужно:

  • Записать — записывает значение во все потоки инструмента; его вызывает Добавить после проверки знака, сам Записать отрицательные значения не отклоняет;
  • СобратьДляЧитателя — собирает потоки инструмента для читателя (вызывает ОтелМетр.СобратьДляЧитателя);
  • Отключить — отключает инструмент: измерения больше не записываются, Включен возвращает Ложь (метр вызывает его при закрытии провайдера);
  • Хранилища, УстановитьХранилища — возвращают и заменяют хранилища потоков инструмента (поток на читателя и View): метр задаёт их при создании инструмента и после изменения View или читателей;
  • Дескриптор, УстановитьДескриптор — дескриптор инструмента (имя, вид, единица, advisory-параметры), по которому метр разрешает потоки;
  • УстановитьМетрВключен — передаёт инструменту общий с метром флаг включённости (метр — при создании инструмента).

Остальные экспортные методы SDK не вызывает, их используют тесты; приложению они не нужны:

  • УстановитьЛог — подменяет логгер, в который счётчик пишет предупреждение об отрицательном значении;
  • Собрать — возвращает данные первого потока инструмента, не начиная новый интервал сбора;
  • ОчиститьТочкиДанных — завершает интервал сбора всех потоков: при дельта-временности начинает новый интервал, при кумулятивной сбрасывает exemplars;
  • КоличествоСерий — возвращает количество серий атрибутов первого потока;
  • УстановитьЛимитМощности — задаёт лимит мощности всех потоков (потокам метра его задают View, читатель или сам метр);
  • УстановитьФильтрЭкземпляров — задаёт фильтр exemplars всех потоков (потокам метра его задаёт провайдер);
  • УстановитьФабрикуРезервуаров — задаёт фабрику резервуаров exemplars всех потоков;
  • УстановитьРезервуарЭкземпляров — устаревший вариант: один резервуар exemplars на все серии потока, пишет предупреждение в лог;
  • УстановитьРазрешенныеКлючиАтрибутов, УстановитьИсключенныеКлючиАтрибутов — задают фильтр ключей атрибутов всех потоков (потокам метра его задаёт View).

Пример ​

bsl
Счетчик = Метр.СоздатьСчетчик("http.requests.total", "Всего HTTP-запросов");

// Без атрибутов
Счетчик.Добавить(1);

// С атрибутами
Атрибуты = Новый ОтелАтрибуты();
Атрибуты.Установить("http.method", "GET");
Атрибуты.Установить("http.status_code", "200");
Счетчик.Добавить(1, Атрибуты);

// Дорогие атрибуты вычисляются, только если счётчик включён.
// Включен вызывается перед каждой записью: результат может измениться
Если Счетчик.Включен() Тогда
    Счетчик.Добавить(1, ВычислитьАтрибутыЗапроса());
КонецЕсли;