Добавить метрики
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)
-
Параметр
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)
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)
-
Параметр
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будет автоматически собирать системные индикаторы.
Для получения дополнительной информации о том, какие системные индикаторы собираются, ознакомьтесь с документацией по системным индикаторам .
本文总阅读量次