跳转至

Pydantic Logfire 简介

Logfire 来自 Pydantic 背后的团队,是一个可观察性平台,建立在与我们的开源库相同的信念之上——最强大的工具可以易于使用。

Logfire的与众不同之处:

  • 简单而强大:Logfire的仪表板相对于它提供的功能来说很简单,确保您的整个工程团队都会实际使用它。
  • 以 Python 为中心的见解:从丰富的 Python 对象显示,到事件循环遥测,再到分析 Python 代码和数据库查询,Logfire 为您提供了对 Python 应用程序行为的无与伦比的可见性。
  • SQL格式:使用标准 SQL 查询数据 — 所有控件,(对许多人来说)无需学习任何新知识。使用 SQL 还意味着您可以使用现有的 BI 工具和数据库查询库查询数据。
  • OpenTelemetry:Logfire 是 OpenTelemetry 的一个自以为是的包装器,允许您利用现有的工具、基础设施和工具来开发许多常见的 Python 包,并支持几乎任何语言。
  • Pydantic 集成:了解流经 Pydantic 模型的数据,并获得有关验证的内置分析。

Pydantic Logfire帮助您用更少的代码、更少的时间和更好的理解来检测您的应用程序。

在_堆栈跟踪_中查找针头

Logfire FastAPI screenshot

我们了解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)!
  1. Pydantic Logfire SDK 可以从 PyPI 或 Conda 安装,了解更多

  2. SDK 附带一个用于身份验证等的 CLI,请了解详细信息

然后在您的代码中:

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)!
1. 这应该在日志记录之前调用一次以初始化 Logfire。如果未为当前目录配置任何项目,则交互式提示将引导您创建项目。

  1. 这将记录带有信息级别的 Hello world!name='world' 将被存储为可以使用 SQL 查询的属性。

  2. 跨度允许您嵌套其他 Logfire 调用,还可以测量代码运行所需的时间。它们是痕迹的基本组成部分!

  3. 尝试从用户输入中提取日期。如果引发任何异常,外部跨度将包含异常的详细信息。

  4. 例如,这将记录 dob=2000-01-01 age=datetime.timedelta(days=8838)调试级别。

这可能看起来类似于简单的日志记录,但它的功能要强大得多 - 您可以获得:

  • 日志中的结构化数据
  • 嵌套日志/跟踪,用于将您正在查看的内容置于上下文中
  • 一个定制的平台,用于查看您的数据,无需配置
  • 以及更多,例如 Python 对象的漂亮显示 — 见下文

注意

如果您有现有的应用程序要检测,那么在开始向代码添加 logfire.* 调用之前,您将从配置 OTel 集成中获得最大价值。

Logfire hello world screenshot

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)!
  1. 这将显示用户处理的:User(name='Anne', country_code='US', dob=datetime.date(2000, 1, 1))),但也允许您在Logfire平台中看到模型的“漂亮”视图。

Logfire pydantic manual screenshot

或者,我们可以自动记录有关验证的信息:

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')
  1. 此配置意味着将记录有关所有 Pydantic 模型验证的详细信息。您还可以仅记录有关验证失败的详细信息,或仅记录指标;参见 Pydantic 插件文档

  2. 由于我们已经启用了 Pydantic 插件,因此所有 Pydantic 验证都将记录在 Logfire 中。

在此处了解有关 Pydantic 插件的更多信息。

Logfire pydantic plugin screenshot

OpenTelemetry 在引擎盖下:望远镜:{#otel}

由于 Pydantic Logfire 是基于 OpenTelemetry 构建的,因此您可以使用大量现有的工具和基础设施,包括许多常见 Python 包的检测

例如,我们只需 2 行代码即可检测一个简单的 FastAPI 应用程序:

fastapi_example.py
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'}
  1. 除了配置 logfire 之外,这行通常是使用 Logfire 检测 FastAPI 应用程序所需的全部内容,这同样适用于大多数其他流行的 Python Web 框架。

  2. “集成”页面包含有关如何检测应用的其他部分的更多信息。

我们需要安装 FastAPI contrib 包、FastAPI 本身和 uvicorn 来运行它:

pip install 'logfire[fastapi]' fastapi uvicorn  # (1)!
uvicorn fastapi_example:app # (2)!
  1. 安装带有 'fastapi' extra、FastAPI 和 uvicorn 的 'logfire' 包。

  2. 使用 uvicorn 运行 FastAPI 应用。

这将为您提供有关 HTTP 请求的信息,以及成功输入验证的结果的详细信息:

Logfire FastAPI 200 response screenshot

以及失败的输入验证的详细信息:

Logfire FastAPI 422 response screenshot

结构化数据和 SQL :abacus: {#sql}

使用纯粹的规范 Postgres SQL 查询数据 — 所有控制权,(对许多人来说)无需学习任何新知识。我们甚至提供对底层 Postgres 数据库的直接访问,这意味着您可以使用任何您喜欢的 Postgres 兼容工具查询 Logfire。这包括 Superset、Grafana 和 Google Looker Studio 等仪表板构建平台,还包括 PandasSQLAlchemy 甚至 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'

Logfire explore query screenshot

您还可以进行过滤,以在实时取景中仅显示与美国用户相关的跟踪

attributes->'result'->>'country_code' = 'USA'

Logfire search query screenshot


本文总阅读量