在我之前关于 Pydantic 的文章中,我在其中一个代码示例中介绍了 Logfire,它是一个旨在为开发者提供 Python 应用程序洞察的可观察性平台。在本文中,您将深入了解 Logfire 及其能力,从而简化您的可观察性旅程,从跟踪到调试再到日志记录。
Logfire 是一个由 Pydantic 的创作者开发的创新可观察性平台,旨在为开发者提供对其 Python 应用程序的强大洞察。Logfire 基于使 Pydantic 成功的相同原则,旨在使可观察性易于实施和理解,同时提供对应用程序行为的深刻洞察。
主要特点
无缝集成
Logfire 与现有的 Python 项目无缝集成,所需设置极少。只需几行代码,开发者就可以开始收集有关其应用程序性能和行为的宝贵数据。
Pydantic 集成
Logfire 与 Pydantic 模型的集成非常出色。这使得开发者能够获得前所未有的数据验证和模型使用洞察。
自动化仪器
Logfire 可以自动为流行的库和框架进行仪器化,减少手动日志记录和跟踪的需求。此功能节省时间并确保对应用程序行为的全面覆盖。
兼容 OpenTelemetry
构建在OpenTelemetry之上,Logfire确保与行业标准兼容,并允许灵活的数据导出选项。
先决条件
- 登录Logfire。
- 按照提示创建您的帐户。此帐户将帮助您组织项目。
- 从您的组织中,单击新项目以创建您的第一个项目。
入门指南
要开始使用Logfire,请按照以下简单步骤操作:
步骤 1。使用下面的命令安装Logfire软件包。如果您正在使用Jupyter Notebook,请运行!pip install logfire
。
pip install logfire
步骤 2。使用Logfire服务进行身份验证。这将打开一个浏览器并要求输入Logfire登录凭据。
logfire auth
3. 在您的应用程序中配置Logfire。安装软件包后,您需要使用以下命令来配置logfire。
import logfire
logfire.configure()
您可以按照项目设置的步骤进行操作:
基本用法
Logfire中的Span是跟踪的基本构建模块。您可以使用logfire.span定义一个Span。在下面的示例中,外部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输出,请点击“过滤本地数据”–>“级别”–>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 Web框架。FastAPI以其可扩展性、易用性和高性能而闻名。
Instructor是一个Python包,可以帮助您轻松地从LLMs输出中提取结构化数据,如JSON。
以下是如何将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都提供了工具,帮助您深入了解代码行为和性能。
请点个赞,并与您的开发社区分享。
Source:
https://dzone.com/articles/logfire-uncomplicated-observability-for-python-app