Перейти к содержанию

Добавить метрики

Pydantic Logfireможно использовать для сбора индикаторов из вашего приложения и отправки их в бэкэнд индикаторов.

Давайте посмотрим, как создавать и использовать индикаторы в приложении.

import logfire

# 创建计数器指标
messages_sent = logfire.metric_counter('messages_sent')

# 增加计数器
def send_message():
    messages_sent.add(1)

Типы показателей

Индикаторы-отличный способ записи числовых значений, в которых вы хотите видеть агрегированные данные (например, с течением времени), а не отдельные значения.

Счетчики

Индикатор Counter особенно полезен, когда вы хотите измерить частоту или количество событий или состояний в приложении.

Вы можете использовать этот индикатор для расчета следующих параметров:

  • Необычное количество захваченных.

  • Число полученных просьб.

  • Количество обработанных элементов.

Чтобы создать индикатор счетчика, используйте функции logfire.metric_counter :

import logfire

counter = logfire.metric_counter(
    'exceptions',
    unit='1',  # (1)!
    description='Number of exceptions caught'
)

try:
    raise Exception('oops')
except Exception:
    counter.add(1)
  1. Параметр unit является необязательным, но лучше указать его. Это должна быть строка, обозначающая единицу счетчика. Если мера является_без единиц_, то можно использовать “1”。

Более подробную информацию о индикаторах счетчика можно найти в документации OpenTelemetry.

Гистограмма

Индикаторы гистограммы особенно полезны, когда нужно измерить распределение набора значений.

Вы можете использовать этот показатель для измерения следующих параметров:

  • Продолжительность запроса.

  • Размер файла.

  • Количество элементов в списке.

Чтобы создать индикатор гистограммы, воспользуйтесь функцией logfire.metric_histogram :

import logfire

histogram = logfire.metric_histogram(
    'request_duration',
    unit='ms',  # (1)!
    description='Duration of requests'
)

for duration in [10, 20, 30, 40, 50]:
    histogram.record(duration)
1.
unit Параметр является необязательным, но лучше указать его. Это должна быть строка, обозначающая единицы гистограммы.

Более подробную информацию о индикаторах гистограммы вы можете прочитать в документации OpenTelemetry.

Счетчик сверху и вниз

«Up-Down Counter»-это индикатор счетчика, который позволяет делать действия по нарастанию (вверх) и снижению (вниз). В отличие от обычных счетчиков, которые допускают только инкрементные, нижний и нижний счетчик может быть увеличен или уменьшен в зависимости от события или состояния, которое требуется отслеживать.

Вы можете использовать этот показатель для измерения следующих параметров:

  • Количество активных соединений.

  • Число элементов в очереди.

  • Количество пользователей в сети.

Чтобы создать индикатор нижнего и верхнего счетчика, используйте функцию logfire.metric_up_down_counter :

import logfire

active_users = logfire.metric_up_down_counter(
    'active_users',
    unit='1',  # (1)!
    description='Number of active users'
)

def user_logged_in():
    active_users.add(1)

def user_logged_out():
    active_users.add(-1)
  1. Параметр unit является необязательным, но лучше указать его. Это должна быть строка, представляющая нижний и нижний счетчик. Если мера является_без единиц_, то можно использовать “1”。

Более подробную информацию о индикаторе Up-Down Counter вы можете прочитать в документации OpenTelemetry.

Ширина колеи

Индикатор Gauge особенно полезен, когда вы хотите измерить текущее значение определенного состояния или события в приложении. В отличие от индикатора счетчика, индикатор прибора не накапливает значения с течением времени.

Вы можете использовать этот показатель для измерения следующих параметров:

  • Текущая температура.
  • Текущее потребление памяти.

  • Текущее число активных подключений.

  • Число пользователей в сети.

Для создания индикатора прибора используйте функцию logfire.metric_gauge :

import logfire

temperature = logfire.metric_gauge(
    'temperature',
    unit='°C',
    description='Temperature'
)

def set_temperature(value: float):
    temperature.set(value)

Вы можете находиться Документация OpenTelemetry Узнайте больше о индикаторе Gauge.

Показатель обратного вызова

Индикатор обратного вызова или наблюдаемый индикатор-это способ создания индикатора, который автоматически обновляется с интервалом времени.

Возврат счетчика

Чтобы создать индикатор обратного вызова счетчика, воспользуйтесь функцией logfire.metric_counter_callback :

import logfire
from opentelemetry.metrics import CallbackOptions, Observable


def cpu_time_callback(options: CallbackOptions) -> Iterable[Observation]:
    observations = []
    with open("/proc/stat") as procstat:
        procstat.readline()  # skip the first line
        for line in procstat:
            if not line.startswith("cpu"):
                break
            cpu, user_time, nice_time, system_time = line.split()
            observations.append(
                Observation(int(user_time) // 100, {"cpu": cpu, "state": "user"})
            )
            observations.append(
                Observation(int(nice_time) // 100, {"cpu": cpu, "state": "nice"})
            )
            observations.append(
                Observation(int(system_time) // 100, {"cpu": cpu, "state": "system"})
            )
    return observations

logfire.metric_counter_callback(
    'system.cpu.time',
    unit='s',
    callbacks=[cpu_time_callback],
    description='CPU time',
)

Более подробную информацию о индикаторах счетчика можно прочитать в документации OpenTelemetry.

Прибор

Измерения приборов особенно полезны, когда вы хотите измерить текущее значение определенного состояния или события в приложении. В отличие от индикатора счетчика, индикатор прибора не накапливает значения с течением времени.

Чтобы создать индикатор обратного вызова прибора, воспользуйтесь функцией logfire.metric_gauge_callback :

import logfire


def get_temperature(room: str) -> float:
    ...


def temperature_callback(options: CallbackOptions) -> Iterable[Observation]:
    for room in ["kitchen", "living_room", "bedroom"]:
        temperature = get_temperature(room)
        yield Observation(temperature, {"room": room})


logfire.metric_gauge_callback(
    'temperature',
    unit='°C',
    callbacks=[temperature_callback],
    description='Temperature',
)

Вы можете прочитать дополнительную информацию о индикаторе Gauge в документации OpenTelemetry.

Возврат счетчика Up-Down

Это версия обратного вызова индикатора и выше счетчика.

Чтобы создать индикатор обратного вызова счетчика, используйте logfire.metric_up_down_counter_callback :

import logfire


def get_active_users() -> int:
    ...


def active_users_callback(options: CallbackOptions) -> Iterable[Observation]:
    active_users = get_active_users()
    yield Observation(active_users, {})


logfire.metric_up_down_counter_callback(
    'active_users',
    unit='1',
    callbacks=[active_users_callback],
    description='Number of active users',
)

Вы можете находиться Документация OpenTelemetry Узнайте больше о индикаторе Up-Down Counter.

Систематические показатели измерения

По умолчанию, LogfireСистематические показатели не собираются.

Чтобы включить индикаторы, вам просто нужно установить logfire[system-metrics] extra:

pip install 'logfire[系统指标]'
rye add logfire -E 系统指标
poetry add 'logfire[系统指标]'

Если вы используете logfire[system-metrics] extra, Logfireбудет автоматически собирать системные индикаторы.

Для получения дополнительной информации о том, какие системные индикаторы собираются, ознакомьтесь с документацией по системным индикаторам .


本文总阅读量次