Pydanticの前の記事では、コード例の1つとしてLogfireを紹介し、これはPythonアプリケーションの洞察を開発者に提供するために設計された可観測性プラットフォームです。この記事では、Logfireとその機能について詳しく説明し、最終的にはトレースからデバッグ、ログ記録までの観測性の旅を簡素化します。
Logfireは、Pydanticの作成者によって開発された革新的な可観測性プラットフォームであり、開発者にPythonアプリケーションに対する強力な洞察を提供するよう設計されています。Pydanticの成功を受け継いで構築されたLogfireは、可観測性を簡単に実装して理解しやすくし、アプリケーションの挙動に深い洞察を提供することを目指しています。
主な特徴
シームレスな統合
Logfireは既存のPythonプロジェクトとシームレスに統合し、最小限のセットアップが必要です。数行のコードだけで、開発者はアプリケーションのパフォーマンスと挙動に関する貴重なデータを収集を開始できます。
Pydanticの統合
LogfireはPydanticモデルとの優れた統合を提供します。これにより、開発者はアプリケーション全体でのデータ検証とモデルの使用について前例のない洞察を得ることができます。
自動インストゥルメンテーション
Logfireは人気のあるライブラリやフレームワークを自動的にインストゥルメント化することができ、手動のログ記録やトレースの必要性を減らします。この機能により、時間が節約され、アプリケーションの挙動の包括的なカバレッジが確保されます。
OpenTelemetry互換
OpenTelemetryをベースに構築されたLogfireは、業界標準との互換性を確保し、柔軟なデータエクスポートオプションを可能にします。
前提条件
- Logfireにログインしてください。
- 指示に従ってアカウントを作成してください。このアカウントはプロジェクトを整理するのに役立ちます。
- 組織から、最初のプロジェクトを作成するには、New projectをクリックしてください。
始め方
Logfireを使用するには、次の簡単な手順に従ってください:
ステップ1。以下のコマンドでLogfireパッケージをインストールしてください。Jupyter Notebookを使用している場合は、!pip install logfire
を実行してください。
pip install logfire
ステップ2。Logfireサービスで認証してください。これにより、ブラウザが開かれ、logfireのログイン資格情報が求められます。
logfire auth
3. アプリケーションでLogfireを構成してください。パッケージがインストールされたら、以下のコマンドを使用してlogfireを構成する必要があります。
import logfire
logfire.configure()
プロジェクト設定の一環として手順に従うことができます:
基本的な使用法
Logfireのスパンはトレースの重要な構成要素です。logfire.spanでスパンを定義できます。以下の例では、外側のスパンはトピック(ユーザーの誕生日)を設定します。ユーザーは誕生日を入力するよう促され、端末またはコマンドプロンプトを介してキャプチャされます。スペースはユーザーの入力した誕生日をキャプチャします。
Logfireを手動トレースする方法の簡単な例を以下に示します:
import logfire
from datetime import date
logfire.configure()
logfire.info('Hello, {name}!', name='world')
with logfire.span('Asking the user their {question}', question='age'):
user_input = input('How old are you [YYYY-mm-dd]? ')
dob = date.fromisoformat(user_input)
logfire.debug('{dob=} {age=!r}', dob=dob, age=date.today() - dob)
DEBUG出力が表示されない場合は、Filter local data –> Levels –> debugをクリックしてください。
Pydantic統合
以前の記事で議論したように、Pydanticのコア機能はデータ検証です。Pythonタイプヒントを使用してデータの構造と型を自動的に検証します。 Pydanticモデルを定義すると、各フィールドに予想されるタイプが注釈付けされます。 Pydanticは、これらのフィールドに割り当てられたデータが指定された型に準拠していることを確認します。
LogfireとPydanticの統合は特に強力です。 Pydanticモデルの検証を記録する方法は次のとおりです:
from datetime import date
import logfire
from pydantic import BaseModel
logfire.configure()
logfire.instrument_pydantic()
class User(BaseModel):
name: str
country_code: str
dob: date
User(name='Anne', country_code='USA', dob='2000-01-01')
User(name='Ben', country_code='USA', dob='2000-02-02')
User(name='Charlie', country_code='GBR', dob='1990-03-03')
この構成では、すべてのPydanticモデルの検証に関する詳細が自動的に記録され、アプリケーション内でのデータ処理に関する貴重な洞察が得られます。
フレームワークの統合
Logfireは人気のあるPythonフレームワークやライブラリと統合しています。以下のPythonコード例では、OpenAI APIキーを提供し、必要なパッケージ(FASTAPI、instructor、OpenAIなど)をインストールする必要があります。
まずは、FastAPIは、開発者がアプリケーションプログラミングインターフェース(API)を作成するのを支援するPythonウェブフレームワークです。 FastAPIは、その拡張性、使いやすさ、高性能で知られています。
Instructorは、LLMsの出力からJSONなどの構造化データを簡単に抽出するのを支援するPythonパッケージです。
以下は、LogfireをFastAPI、OpenAI API、およびInstructorと統合する方法の例です。
from fastapi import FastAPI
from openai import AsyncOpenAI
import os
import instructor
import logfire
from pydantic import BaseModel
app = FastAPI()
openai_client = AsyncOpenAI(
api_key=os.environ.get("OPENAI_API_KEY"))
logfire.configure()
logfire.instrument_pydantic()
logfire.instrument_openai(openai_client)
logfire.instrument_fastapi(app)
client = instructor.from_openai(openai_client)
class UserData(BaseModel):
query: str
class UserDetail(BaseModel):
name: str
age: int
post("/user", response_model=UserDetail) .
async def endpoint_function(data: UserData) -> UserDetail:
user_detail = await client.chat.completions.create(
model="gpt-3.5-turbo",
response_model=UserDetail,
messages=[
{"role": "user", "content": f"Extract: `{data.query}`"},
],
)
return user_detail
このセットアップは、FastAPIリクエスト、OpenAI API呼び出し、およびPydanticモデルの検証のための包括的なログを提供し、アプリケーションの動作の包括的なビューを提供します。
結論
Logfireは、Python開発者にとって観測性をアクセスしやすく強力にする重要な進歩を表しています。Logfireは、使いやすさと深い洞察を組み合わせることで、開発者がアプリケーションをよりよく理解し最適化するのを可能にします。小規模プロジェクトや大規模アプリケーションに取り組んでいる場合でも、Logfireはコードの動作とパフォーマンスに関する貴重な洞察を得るためのツールを提供します。
この記事が役に立ったら、いいねを押してDevコミュニティと共有してください。
Source:
https://dzone.com/articles/logfire-uncomplicated-observability-for-python-app