feat(logfire): add Pydantic Logfire block, tools, and docs (#6075)

Four read-token tools over Logfire's query API: structured span/log search,
raw SQL against records/metrics, full-trace fetch by ID, and read-token
introspection. Plus the block, icon, registry wiring, and generated docs.

Requests go to /v2/query with the region resolved from the token's
pylf_v{n}_{region}_ prefix, overridable by an explicit region or a self-hosted
host (public HTTPS only, per the tool executor's URL policy). Structured
filters are emitted as escaped SQL literals, using DataFusion contains() so
%/_ in user input stay literal.

Co-authored-by: Claude <noreply@anthropic.com>
This commit is contained in:
Vikhyath Mondreti
2026-07-29 18:07:39 -07:00
committed by GitHub
co-authored by Claude
parent 0a0acc2bd8
commit f78367c4e8
22 changed files with 2309 additions and 0 deletions
@@ -0,0 +1,168 @@
---
title: Logfire
description: Query traces, logs, and metrics in Pydantic Logfire
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
<BlockInfoCard
type="logfire"
color="#E520E9"
/>
{/* MANUAL-CONTENT-START:intro */}
[Pydantic Logfire](https://pydantic.dev/logfire) is an observability platform built on OpenTelemetry. It collects the traces, logs, and metrics your services emit, stores every span in a queryable `records` table, and exposes that table through a read-only SQL API.
With Logfire, you can:
- **Search spans and logs**: Filter by message text, service, span name, severity, deployment environment, and whether an exception was recorded — no SQL required.
- **Run SQL directly**: Query the `records` and `metrics` tables with PostgreSQL-compatible syntax for aggregations like error rates and latency percentiles.
- **Reconstruct a request**: Pull every span in a trace, ordered earliest to latest, and walk the parent-child tree to see where time went and where it failed.
- **Confirm a credential**: Resolve which organization and project a read token targets before querying it.
Sim's Logfire integration lets agents read production telemetry as part of a run. Use it to triage errors against a live service, attach a root-cause summary to an incident ticket, or watch latency between deploys and page when it regresses.
Authentication uses a Logfire **read token**, which you create per project under Settings → Read tokens. The region is detected from the token's prefix, so Cloud users on US and EU need no extra configuration. Self-hosted instances set the Host field to their own base URL, which must be reachable over HTTPS at a publicly resolvable domain.
{/* MANUAL-CONTENT-END */}
## Usage Instructions
Integrate Pydantic Logfire into workflows. Run SQL over your observability data, search spans and logs with structured filters, pull an entire trace by ID, and confirm which project a read token targets.
## Actions
### `logfire_query`
Run a read-only SQL query against Logfire traces, logs, and metrics. Reads the records and metrics tables using PostgreSQL-compatible syntax.
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Yes | Logfire read token |
| `region` | string | No | Logfire data region: auto, us, or eu. Auto reads the region from the token. |
| `host` | string | No | Base URL of a self-hosted Logfire instance, e.g. https://logfire.example.com. Overrides region. Leave blank for Logfire Cloud. |
| `sql` | string | Yes | SQL SELECT query to run against the records or metrics table |
| `minTimestamp` | string | No | ISO 8601 lower bound on start_timestamp. Defaults to 2020-01-01T00:00:00Z when omitted. |
| `maxTimestamp` | string | No | ISO 8601 upper bound on start_timestamp |
| `limit` | number | No | Maximum rows to return. Logfire defaults to 100 and caps at 10000. |
| `timezone` | string | No | IANA timezone used to evaluate the query, for example Europe/Paris |
| `environment` | string | No | Restrict results to a single deployment environment |
#### Output
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `rows` | array | Result rows. Row fields depend on the query projection. |
| `columns` | array | Column metadata for the result set |
| ↳ `name` | string | Column name |
| ↳ `datatype` | json | Arrow datatype of the column |
| ↳ `nullable` | boolean | Whether the column is nullable |
| `rowCount` | number | Number of rows returned |
### `logfire_search_records`
Search Logfire spans and logs using structured filters for message text, service, span name, severity, environment, and exceptions. Returns the most recent matches first without writing SQL.
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Yes | Logfire read token |
| `region` | string | No | Logfire data region: auto, us, or eu. Auto reads the region from the token. |
| `host` | string | No | Base URL of a self-hosted Logfire instance, e.g. https://logfire.example.com. Overrides region. Leave blank for Logfire Cloud. |
| `query` | string | No | Case-insensitive text to match within the record message |
| `service` | string | No | Exact service name to filter on |
| `spanName` | string | No | Exact span name to filter on |
| `minLevel` | string | No | Minimum severity to include: trace, debug, info, notice, warn, error, or fatal |
| `exceptionsOnly` | boolean | No | Only return records that recorded an exception |
| `environment` | string | No | Restrict results to a single deployment environment |
| `minTimestamp` | string | No | ISO 8601 lower bound on start_timestamp. Defaults to 2020-01-01T00:00:00Z when omitted. |
| `maxTimestamp` | string | No | ISO 8601 upper bound on start_timestamp |
| `limit` | number | No | Maximum records to return. Logfire defaults to 100 and caps at 10000. |
#### Output
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `rows` | array | Matching spans and logs, most recent first |
| ↳ `startTimestamp` | string | UTC time the span started |
| ↳ `endTimestamp` | string | UTC time the span ended |
| ↳ `duration` | number | Span duration in seconds. Null for logs. |
| ↳ `level` | string | Severity name, such as info, warn, or error |
| ↳ `message` | string | Human-readable message |
| ↳ `spanName` | string | Template label for similar records |
| ↳ `kind` | string | Record kind: span, log, or span_event |
| ↳ `serviceName` | string | Service that emitted the record |
| ↳ `deploymentEnvironment` | string | Deployment environment of the record |
| ↳ `traceId` | string | Trace this record belongs to |
| ↳ `spanId` | string | Identifier of this span |
| ↳ `parentSpanId` | string | Parent span identifier |
| ↳ `isException` | boolean | Whether an exception was recorded on the span |
| ↳ `exceptionType` | string | Fully qualified exception class name |
| ↳ `exceptionMessage` | string | Exception message |
| `rowCount` | number | Number of rows returned |
| `sql` | string | SQL query that was executed against Logfire |
### `logfire_get_trace`
Fetch every span and log belonging to a Logfire trace, ordered from earliest to latest, so a single request can be reconstructed end to end.
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Yes | Logfire read token |
| `region` | string | No | Logfire data region: auto, us, or eu. Auto reads the region from the token. |
| `host` | string | No | Base URL of a self-hosted Logfire instance, e.g. https://logfire.example.com. Overrides region. Leave blank for Logfire Cloud. |
| `traceId` | string | Yes | 32-character hexadecimal trace identifier |
| `minTimestamp` | string | No | ISO 8601 lower bound on start_timestamp. Defaults to 2020-01-01T00:00:00Z when omitted. |
| `maxTimestamp` | string | No | ISO 8601 upper bound on start_timestamp |
| `limit` | number | No | Maximum spans to return. Logfire defaults to 100 and caps at 10000. |
#### Output
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `rows` | array | Spans and logs in the trace, earliest first |
| ↳ `startTimestamp` | string | UTC time the span started |
| ↳ `endTimestamp` | string | UTC time the span ended |
| ↳ `duration` | number | Span duration in seconds. Null for logs. |
| ↳ `level` | string | Severity name, such as info, warn, or error |
| ↳ `message` | string | Human-readable message |
| ↳ `spanName` | string | Template label for similar records |
| ↳ `kind` | string | Record kind: span, log, or span_event |
| ↳ `serviceName` | string | Service that emitted the record |
| ↳ `deploymentEnvironment` | string | Deployment environment of the record |
| ↳ `traceId` | string | Trace this record belongs to |
| ↳ `spanId` | string | Identifier of this span |
| ↳ `parentSpanId` | string | Parent span identifier |
| ↳ `isException` | boolean | Whether an exception was recorded on the span |
| ↳ `exceptionType` | string | Fully qualified exception class name |
| ↳ `exceptionMessage` | string | Exception message |
| `rowCount` | number | Number of rows returned |
| `sql` | string | SQL query that was executed against Logfire |
### `logfire_get_token_info`
Resolve which Logfire organization and project a read token belongs to. Useful for confirming a credential targets the expected project before querying it.
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Yes | Logfire read token |
| `region` | string | No | Logfire data region: auto, us, or eu. Auto reads the region from the token. |
| `host` | string | No | Base URL of a self-hosted Logfire instance, e.g. https://logfire.example.com. Overrides region. Leave blank for Logfire Cloud. |
#### Output
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `organizationName` | string | Logfire organization the read token belongs to |
| `projectName` | string | Logfire project the read token belongs to |
@@ -140,6 +140,7 @@
"linkedin",
"linkup",
"linq",
"logfire",
"logs",
"loops",
"luma",