コンテンツにスキップ

メトリクスの追加

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”。 を使用できます

カウンターメトリックの詳細については、OpenTelemometryドキュメントを参照してください。

ヒストグラム

ヒストグラムインジケーターは、一連の値の分布を測定する場合に特に役立ちます。

このメトリックを使用して、次のことを測定できます。

  • 要求の期間。

  • ファイルサイズ。

  • リスト内の項目の数。

ヒストグラム指標を作成するには、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 引数は任意ですが、指定しておくとよいでしょう。ヒストグラムの単位を表す文字列にするとよいでしょう。

ヒストグラムインジケーターの詳細については、OpenTelemometryドキュメントを参照してください。

カウンターの上下

「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”。 を使用できます

アップダウンカウンターインジケーターの詳細については、OpenTelemometryドキュメントで読むことができます。

ゲージ

ゲージインジケーターは、アプリケーション内の特定の状態またはイベントの現在の値を測定する場合に特に役立ちます。カウンターインジケーターとは異なり、ゲージインジケーターは時間の経過とともに値を蓄積しません。

このメトリックを使用して、次のことを測定できます。

  • 現在の温度。
  • 現在のメモリ使用量。

  • 現在アクティブな接続数。

  • 現在のオンラインユーザー数。

ゲージメトリックを作成するには、logfire.metric_gauge 関数を使用します。

import logfire

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

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

ゲージインジケーターの詳細については、OpenTelemometryドキュメントを参照してください。

コールバック指標

コールバック指標または観測可能指標は、時間間隔に基づいて自動的に更新される指標を作成する方法です。

カウンターコールバック

カウンターコールバックインジケーターを作成するには、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',
)

できます OpenTelemometryドキュメントでカウンターインジケーターの詳細をお読みください。

メーターコールバック

ゲージメトリックは、アプリケーション内の特定の状態またはイベントの現在の値を測定する場合に特に役立ちます。カウンターメトリックとは異なり、ゲージメトリックは時間の経過とともに値を蓄積しません。

ゲージコールバックインジケーターを作成するには、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',
)

ゲージインジケーターの詳細については、OpenTelemometryドキュメントを参照してください。

アップダウンカウンターコールバック

これはの上下カウンター指標のコールバックバージョンです。

上下のカウンターコールバックインジケーターを作成するには、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',
)

アップダウンカウンターインジケーターの詳細については、OpenTelemometryドキュメントで読むことができます。

システム測定指標

デフォルトでは、Logfireシステム指標は収集されません。

インジケーターを有効にするには、logfire[system-metrics] extraをインストールするだけです。

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

インストールした場合 logfire[system-metrics] 追加、ログファイア システム指標が自動的に収集されます。

収集するシステムメトリックの詳細については、システムメトリックドキュメントを参照してください。


本文总阅读量次