Aller au contenu

Ajouter des métriques

Pydantic Logfirepeut être utilisé pour collecter des métriques de votre application et les envoyer au backend des métriques.

Voyons comment créer et utiliser des indicateurs dans votre application.

import logfire

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

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

Types d'indicateur

Les métriques sont un bon moyen d'enregistrer des valeurs numériques dans lesquelles vous souhaitez voir des agrégats de données (par exemple, au fil du temps) plutôt que des valeurs individuelles.

Le compteur

L'indicateur Counter est particulièrement utile lorsque vous souhaitez mesurer la fréquence ou le nombre d'occurrences d'un événement ou d'un état particulier dans votre application.

Vous pouvez utiliser cet indicateur pour calculer les éléments suivants:

  • Nombre d'anomalies capturées.

  • Le nombre de demandes reçues.

  • Nombre de projets traités.

Pour créer un indicateur de compteur, utilisez la fonction 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 L'argument est facultatif, mais il est préférable de le spécifier. il devrait s'agir d'une chaîne de caractères représentant l'unité du compteur. si la mesure est_Sans unité_De, vous pouvez utiliser “1”。

Peut être obtenu dans Documentation pour OpenTelemetry En savoir plus sur l'indicateur Counter.

Histogramme

L'indicateur histogramme est particulièrement utile lorsque vous souhaitez mesurer la distribution d'un ensemble de valeurs.

Vous pouvez utiliser cette métrique pour mesurer:

  • Durée de la demande.

  • Taille du fichier.

  • Le nombre d'éléments dans la liste.

Pour créer un indicateur d'histogramme, utilisez la fonctionnalité 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 Le paramètre est facultatif, mais il est préférable de le spécifier. il devrait s'agir d'une chaîne de caractères représentant les unités de l'histogramme.

Vous pouvez en savoir plus sur l'indicateur de l'histogramme dans le document OpenTelemetry.

Haut et Bas Counter

Un « compteur de haut en bas » est un indicateur de compteur qui permet à la fois incrémentation (hausse) et décrémentation (baisse) opérations Contrairement aux compteurs réguliers qui permettent seulement incréments, les compteurs haut et bas peuvent être augmentés ou diminués en fonction de l'événement ou de l'état à suivre.

Vous pouvez utiliser cette métrique pour mesurer:

  • Le nombre de connexions actives.

  • Le nombre d'éléments dans la file d'attente.

  • Nombre d'utilisateurs en ligne.

Pour créer des indicateurs de compteur supérieur et inférieur, utilisez la fonction 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. Le paramètre unit est facultatif, mais il est préférable de le spécifier. il devrait s'agir d'une chaîne représentant les unités des compteurs supérieurs et inférieurs.“1”。 peut être utilisé si la mesure est_united_.

Vous pouvez le faire dans Documentation pour OpenTelemetry En savoir plus sur l'indicateur Up-Down Counter.

La jauge

L'indicateur Gauge est particulièrement utile lorsque vous souhaitez mesurer la valeur actuelle d'un état ou d'un événement spécifique dans votre application. Contrairement à l'indicateur de compteur, l'indicateur de compteur n'accumule pas de valeur au fil du temps.

Vous pouvez utiliser cette métrique pour mesurer:

  • température actuelle.
  • Utilisation actuelle de la mémoire.

  • Nombre de connexions actives actuelles.

  • Nombre d'utilisateurs actuellement en ligne.

Pour créer un indicateur de compteur, utilisez la fonctionnalité logfire.metric_gauge :

import logfire

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

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

Vous pouvez en savoir plus sur l'indicateur Gauge dans le document OpenTelemetry.

Indicateurs de callback

Un indicateur de rappel ou un indicateur observable est un moyen de créer un indicateur qui se met à jour automatiquement en fonction d'un intervalle de temps.

Rappel du compteur

Pour créer un indicateur de rappel de compteur, utilisez la fonction 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',
)

Vous pouvez en savoir plus sur les métriques de compteur dans le document OpenTelemetry.

Rappel de l'instrument

Les métriques de compteur sont particulièrement utiles lorsque vous souhaitez mesurer la valeur actuelle d'un état ou d'un événement spécifique dans votre application. Contrairement aux métriques de compteur, les métriques de compteur n'accumulent pas de valeurs au fil du temps.

Pour créer un indicateur de rappel de compteur, utilisez logfire.metric_gauge_callback Fonctions:

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',
)

Vous pouvez le faire dans Documentation pour OpenTelemetry En savoir plus sur l'indicateur de Gauge.

Up-Down Counter callback par rappel

Il s'agit d'une version de rappel de l'indicateur de compteur supérieur et inférieur.

Pour créer l'indicateur de rappel du compteur supérieur et inférieur, utilisez logfire.metric_up_down_counter_callback Fonctionnalités:

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',
)

Vous pouvez en savoir plus sur l'indicateur Up-Down Counter dans la documentation OpenTelemetry.

Mesures du système

Par défaut, Logfirene collecte pas de métriques système.

Pour activer les indicateurs, il vous suffit d'installer logfire[system-metrics] Extra:

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

Si installé logfire[system-metrics] Extrait, Logfire Les indicateurs système sont automatiquement collectés.

Pour en savoir plus sur les métriques système à collecter, consultez Indicateurs systématiques document.


本文总阅读量次