Opentelemetry является структурой наблюдаемости с открытым исходным кодом для генерации, захвата и сбора данных телеметрии для программного обеспечения Cloud-National. На предыдущих постах в этой серии я обсудил, какая наблюдаемость, как это относится к OpenTelemetry, а какая трассировка. Сегодня я хотел бы покрыть второй основной участок API apentelemetry: метрики.
Methrics apentelemetry Metrics поддерживает отчетность диагностических измерений от службы с использованием трех основных видов приборов. Эти инструменты обычно известны как счетчики, датчики и меры. Разработчики используют эти объекты, чтобы получить видимость в эксплуатационные метрики об их обслуживании.
Большинство разработчиков знакомы с метриками в каком-то моде. Например, это чрезвычайно распространено для мониторинга метрических значений, таких как использование процессов или частота ошибок, а также создание предупреждений, чтобы указать, когда служба нарушает заранее определенный порог. В дополнение к этим общим измерениям, метрики мероприятия потоки для этих инструментов могут применяться другими уникальными способами, в том числе путем агрегированного и записанного по трассировке или регистрационным системам. Имея в виду, давайте посмотрим на инструменты, доступные через API apentelemetry Metrics, и обсудить, как их можно использовать.
API отличает между метрическими приборами, доступными через их семантическое значение, а не в результате возможного типа значения, который они экспортируют. Это несколько нетрадиционно, и оно связано из конструкции самого opentelemetry — разделение между API и SDK заставляет SDK в конечном итоге определить, что должно происходить с каким-либо конкретным метрическим событием, и может потенциально реализовать данный инструмент в очевидный или нестандартный путь. Если вы знакомы с существующими метрическими API (например, PROMETHEUS API), это объясняет, почему нет метода для экспорта гистограммы или краткого распределения. Они считаются мерами, а SDK может быть сконфигурирован для экспорта гистограммы или сводки из меры.
С точки зрения разработчика, точный поддерживающий инструмент несколько непрозрачен по дизайну, так как API предназначен для переносимости. Разработчики используют методы Add, Set и записи с дополнительными объявлениями для установки ограничений на конкретную меру (например, чтобы позволить счетчик поддерживать положительные и отрицательные значения), и SDK заботится о остальных. Это сказано, что из них вы должны использовать для любого данного сценария?
Если вы пытаетесь записать счет чего-либо — например, сумма ошибок со временем — тогда вы должны использовать способ добавления, который поддерживается счетчиком. Счетчик по умолчанию, по умолчанию, монотонный, что означает, что он ожидает только положительных значений. Это свойство позволяет интерпретировать счетчик по умолчанию в виде измерения скорости. Цены представляют собой сравнение между двумя величинами — байтами, переданными в секунду, например. Также поддерживаются немонотонные счетчики, которые могут быть полезны для отчетности изменений в количестве (например, количество элементов в наборе, поскольку они добавляются и удалены).
Как насчет обстоятельств, где вам нужен счет, но не количество? Например, если вы измеряете что-то над произвольным интервалом, или вам не заботится о скорости изменения, просто текущее значение? Это когда вы будете использовать датчик, вызывая набор. Вы можете подумать о датчике, как термостат, или соотношение (например, расход памяти против общего доступной памяти). Как вы можете ожидать, по умолчанию для этих инструментов не монотонный, но монотонный вариант также доступен. Почему? Сообщить об изменении, по сравнению с суммой. Если вы пытаетесь сообщить об сумме, вы должны использовать датчик, но если вы сообщаете, что вы можете использовать счетчик.
Наконец, что вы должны использовать, когда вы заботитесь об индивидуальных измерениях? Рассмотрим обстоятельство, где вы хотите знать как считать, так и сумму данного события, либо когда вы заинтересованы в группировках событий в квантилеки? Вы будете использовать запись для этих значений, так как это выражает меру. Общее применение мер состоит в том, чтобы создать гистограмму или сводку значений. Вы можете использовать их для расчета средних, таких как средний размер определенного ответа, или средняя продолжительность HTTP-запросов.
Это становится довольно долго, поэтому давайте сделаем быстрый обзор. Существует три инструмента, которые вы можете использовать в OpenTelemetry, каждый из которых определяется методом, который вы вызываете, чтобы отправить метрическое событие. Они есть:
- Счетчики, которые вы Добавить ценность для. Это хорошо для ценностей, которые вы хотели бы думать о скорости или изменения в количестве.
- Датчики, которые вы Установить значение. Вы можете думать об этом как о одометре автомобиля (монотонный датчик, он никогда не уменьшается), либо спидометр автомобиля (немонотонный датчик, так как он может идти вверх и вниз.)
- Меры, на которые вы Запись ценность. Они полезны для создания гистограмм или резюме, метрические прогнозы, которые позволяют рассчитать средние значения многих значений.
Точный механизм, посредством которого вы будете использовать каждый из этих инструментов, является немного языковым, специфичным к языку — opentelemetry, по дизайну, пытается разрешить каждому языку SIG реализовать API таким образом, что является обычным для языка, который он реализован в Отказ Это означает, что точные данные о создании нового метрического события могут точно соответствовать спецификации точно, вам следует обратиться к документации для вашей конкретной реализации OpenTelemetry для получения дополнительной информации. На высоком уровне, однако, вот как это работает.
Во-первых, вам нужно создать инструмент подходящего вида и дать ему описательное имя. Каждое имя прибора должно быть уникальным в его процессе. Вы также можете предоставить ключи этикетки, которые являются необязательными значениями ключей, которые используются для оптимизации метрического конвейера экспорта. Вам также необходимо инициализировать labelset, который представляет собой набор меток (как клавиш, так и значений), которые соответствуют устанавливаемым атрибутам на ваших метрических событиях. Как это выглядит?
// in our init or in middleware... requestKeys = ["path", "host"] // label keys // now we initialize instruments for our keys, a Count and a Measure requestBytes = NewIntCounter("request.bytes", WithKeys(requestKeys), withUnit(unit.Bytes)) requestLatency = NewFloatMeasure("request.latency", WithKeys(requestKeys), withUnit(unit.Second)) // then, define the labels for each key (and add more if required) labels = meter.DefineLabels({"path": "/api/getFoo/{id}", "host": "host.name"})
Опять же, специфики будут немного отличаться для каждого языка, но основной гид одинаково — в начале, вы создаете фактические метрические инструменты, давая им имя, и сообщив им, какие ключи будут видеть. После этого либо явно добавляют этикетки для ваших инструментов (или получить пустой набор меток, если это необходимо). Как только вы достигли этого, фактически записывающие метрические события довольно просты.
requestBytes.Add(labels, req.bytes) requestLatency.Record(labels, req.latency)
Другой вариант, для высокопроизводительных сценариев, состоит в том, чтобы использовать ручку. Это эффективно пропускает шаг, предварительно провожив инструмент и этикетки (в конце концов, вы можете добавить произвольные метки на набор меток, и вызов инструменте через набор метки добавит это событие для каждой комбинации метки + инструмент), полезно, если вы в критическом характере, критически важном.
requestBytesHandle = requestBytes.GetHandle(labels) requestLatencyHandle = requestLatency.GetHandle(labels) for req in requestBatch { ... requestBytesHandle.Add(req.bytes) requestLatencyHandle.Record(req.latency) ... }
Однако одна вещь, которую нужно помнить с ручками, это то, что вы несете ответственность за «уборку» после того, как вы закончите, освободив ручку и освободив его!
Итак, чтобы обобщить еще один раз:
- Метрические события записываются через приборы.
- Вам необходимо создать уникальный инструмент для каждой метрики, который вы хотите записать, и дать ему уникальное имя.
- Вы можете применить дополнительные метаданные на ваш инструмент через этикетки.
- Регистрация метрических событий выполняется либо путем вызова соответствующего метода на самом инструменте, либо путем предварительно перемещенной ручки и вызова метода там.
Надеюсь, это дало вам лучшее понимание того, как функционирует API метрики opentelemetry Metrics. Это много, чтобы взять! Однако реальная мощность OpenTelemetry не просто она предоставляет API трассировки и метрики для вас для использования. В моем следующем посте я покрою модель экспортера, а коллектор OpenTelemetry, который являются способами, которые вы получите данные из OpenTelemetry и в систему анализа, такие как Lightstep.
Оригинал: «https://dev.to/lightstep/opentelemetry-101-what-are-metrics-d9e»