Pydantic Logfire 简介¶
Logfire 来自 Pydantic 背后的团队,是一个可观察性平台,建立在与我们的开源库相同的信念之上——最强大的工具可以易于使用。
Logfire的与众不同之处:
- 简单而强大:Logfire的仪表板相对于它提供的功能来说很简单,确保您的整个工程团队都会实际使用它。
- 以 Python 为中心的见解:从丰富的 Python 对象显示,到事件循环遥测,再到分析 Python 代码和数据库查询,Logfire 为您提供了对 Python 应用程序行为的无与伦比的可见性。
- SQL格式:使用标准 SQL 查询数据 — 所有控件,(对许多人来说)无需学习任何新知识。使用 SQL 还意味着您可以使用现有的 BI 工具和数据库查询库查询数据。
- OpenTelemetry:Logfire 是 OpenTelemetry 的一个自以为是的包装器,允许您利用现有的工具、基础设施和工具来开发许多常见的 Python 包,并支持几乎任何语言。
- Pydantic 集成:了解流经 Pydantic 模型的数据,并获得有关验证的内置分析。
Pydantic Logfire帮助您用更少的代码、更少的时间和更好的理解来检测您的应用程序。
在_堆栈跟踪_中查找针头¶
我们了解Python及其特性。Pydantic Logfire 由 Python 开发人员为 Python 开发人员精心打造,旨在解决 Python 环境的独特挑战和机遇。这不仅仅是拥有数据;这是关于拥有_正确的_数据,以对 Python 应用程序有意义的方式呈现。
本着 Python 的精神
- 简单而强大:模仿 Pydantic 库的理念,Pydantic Logfire 为初学者提供了一个直观的起点,同时提供了专家所需的深度。它在易用性、复杂性和生产力之间取得了同样的平衡,并经过重新构想以实现可观察性。
- 诞生于 Python 和 Pydantic:随着创作者沉浸在 Python 开源生态系统中,我们设计了 Pydantic Logfire,以与 Python 和 Pydantic 的细微差别深度集成,提供比通用可观测性平台更加定制化的体验。
将数据提升为见解
- 通过深度的 Python 集成,Pydantic Logfire 会自动检测您的代码,以最少的手动工作量,提供对异步代码的卓越洞察,提供详细的性能分析,并以与解释器相同的方式显示 Python 对象。对于现有的 Pydantic 用户,它还为您使用 Pydantic 模型提供了无与伦比的洞察力。
- 结构化数据和直接 SQL 访问意味着您可以使用熟悉的工具(如 Pandas、SQLAlchemy 或
psql
)进行查询,可以与 BI 工具无缝集成,甚至可以利用 AI 生成 SQL,确保您的 Python 对象和结构化数据可用于查询。在整个平台中使用 vanilla PostgreSQL 作为查询语言可确保一致、强大和灵活的查询体验。 - 通过利用 OpenTelemetry,Pydantic Logfire 为流行的 Python 包提供自动检测,支持跨语言数据集成,并支持将数据导出到任何与 OpenTelemetry 兼容的后端或代理。
Pydantic Logfire:您值得拥有的可观测性平台¶
Pydantic Logfire 不仅仅是棚子里的另一个工具;它是 Python 开发人员为 Python 开发人员精心打造的定制解决方案,确保您的开发工作与 Python 本身一样顺畅和高效。
从最小的脚本到大规模的部署,Pydantic Logfire 都是您一直在等待的可观测性解决方案。
简单而强大 :rocket: {#simplicity}
Pydantic Logfire应该非常简单易上手,只需运行:
pip install logfire # (1)!
logfire auth # (2)!
然后在您的代码中:
import logfire
from datetime import date
logfire.configure() # (1)!
logfire.info('Hello, {name}!', name='world') # (2)!
with logfire.span('Asking the user their {question}', question='age'): # (3)!
user_input = input('How old are you [YYYY-mm-dd]? ')
dob = date.fromisoformat(user_input) # (4)!
logfire.debug('{dob=} {age=!r}', dob=dob, age=date.today() - dob) # (5)!
-
这将记录带有
信息
级别的Hello world!
。name='world'
将被存储为可以使用 SQL 查询的属性。 -
跨度允许您嵌套其他 Logfire 调用,还可以测量代码运行所需的时间。它们是痕迹的基本组成部分!
-
尝试从用户输入中提取日期。如果引发任何异常,外部跨度将包含异常的详细信息。
-
例如,这将记录
dob=2000-01-01 age=datetime.timedelta(days=8838)
的调试
级别。
这可能看起来类似于简单的日志记录,但它的功能要强大得多 - 您可以获得:
- 日志中的结构化数据
- 嵌套日志/跟踪,用于将您正在查看的内容置于上下文中
- 一个定制的平台,用于查看您的数据,无需配置
- 以及更多,例如 Python 对象的漂亮显示 — 见下文
注意
如果您有现有的应用程序要检测,那么在开始向代码添加 logfire.*
调用之前,您将从配置 OTel 集成中获得最大价值。
Python 和 Pydantic 洞察 :snake: {#python}
从丰富的 Python 对象显示到事件循环遥测和分析 Python 代码,Pydantic Logfire 可以让您比任何其他可观察性工具更清楚地了解 Python 的运行方式。
Logfire 还具有开箱即用的 Pydantic 集成,可让您了解通过 Pydantic 模型的数据并获得验证分析。
我们可以直接记录Pydantic模型:
from datetime import date
import logfire
from pydantic import BaseModel
logfire.configure()
class User(BaseModel):
name: str
country_code: str
dob: date
user = User(name='Anne', country_code='USA', dob='2000-01-01')
logfire.info('user processed: {user!r}', user=user) # (1)!
- 这将显示
用户处理的:User(name='Anne', country_code='US', dob=datetime.date(2000, 1, 1))
),但也允许您在Logfire平台中看到模型的“漂亮”视图。
或者,我们可以自动记录有关验证的信息:
from datetime import date
import logfire
from pydantic import BaseModel
logfire.configure(pydantic_plugin=logfire.PydanticPlugin(record='all')) # (1)!
class User(BaseModel):
name: str
country_code: str
dob: date
User(name='Anne', country_code='USA', dob='2000-01-01') # (2)!
User(name='Ben', country_code='USA', dob='2000-02-02')
User(name='Charlie', country_code='GBR', dob='1990-03-03')
-
此配置意味着将记录有关所有 Pydantic 模型验证的详细信息。您还可以仅记录有关验证失败的详细信息,或仅记录指标;参见 Pydantic 插件文档。
-
由于我们已经启用了 Pydantic 插件,因此所有 Pydantic 验证都将记录在 Logfire 中。
在此处了解有关 Pydantic 插件的更多信息。
OpenTelemetry 在引擎盖下:望远镜:{#otel}
由于 Pydantic Logfire 是基于 OpenTelemetry 构建的,因此您可以使用大量现有的工具和基础设施,包括许多常见 Python 包的检测。
例如,我们只需 2 行代码即可检测一个简单的 FastAPI 应用程序:
from datetime import date
import logfire
from pydantic import BaseModel
from fastapi import FastAPI
app = FastAPI()
logfire.configure()
logfire.instrument_fastapi(app) # (1)!
# next, instrument your database connector, http library etc. and add the logging handler (2)
class User(BaseModel):
name: str
country_code: str
dob: date
@app.post('/')
async def add_user(user: User):
# we would store the user here
return {'message': f'{user.name} added'}
-
除了配置 logfire 之外,这行通常是使用 Logfire 检测 FastAPI 应用程序所需的全部内容,这同样适用于大多数其他流行的 Python Web 框架。
-
“集成”页面包含有关如何检测应用的其他部分的更多信息。
我们需要安装 FastAPI contrib 包、FastAPI 本身和 uvicorn 来运行它:
pip install 'logfire[fastapi]' fastapi uvicorn # (1)!
uvicorn fastapi_example:app # (2)!
-
安装带有 'fastapi' extra、FastAPI 和 uvicorn 的 'logfire' 包。
-
使用 uvicorn 运行 FastAPI 应用。
这将为您提供有关 HTTP 请求的信息,以及成功输入验证的结果的详细信息:
以及失败的输入验证的详细信息:
结构化数据和 SQL :abacus: {#sql}
使用纯粹的规范 Postgres SQL 查询数据 — 所有控制权,(对许多人来说)无需学习任何新知识。我们甚至提供对底层 Postgres 数据库的直接访问,这意味着您可以使用任何您喜欢的 Postgres 兼容工具查询 Logfire。这包括 Superset、Grafana 和 Google Looker Studio 等仪表板构建平台,还包括 Pandas、SQLAlchemy 甚至 psql
。
使用最广泛使用的 SQL 数据库的一大优势是,像 ChatGPT 这样的生成式 AI 工具在为您编写 SQL 方面非常出色。
只需在 Logfire 调用(列表、字典、数据类、Pydantic 模型、数据帧等)中包含您的 Python 对象,它就会在我们的平台中作为结构化数据随时可供查询。
例如,使用上述用户
模型中的数据,我们可以列出来自美国的用户:
SELECT attributes->'result'->>'name' as name, age(attributes->'result'->>'dob') as age
FROM records
WHERE attributes->'result'->>'country_code' = 'USA'
您还可以进行过滤,以在实时取景中仅显示与美国用户相关的跟踪
attributes->'result'->>'country_code' = 'USA'
本文总阅读量次