Skip to content
Back to skills

Analyze Logfire Data

ASecurity

Query Logfire database and generate rich dashboards from results. Use when analyzing telemetry data, creating visualizations, or exploring Logfire records.

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 27, 2026
datapythongosqlexpressdatabase

Works with

  • mcp

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned September 27, 2026

npx -y skills add David-Li0406/meta-skill-evloving --skill analyze-logfire-data --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Analyze Logfire Data?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Analyze Logfire Data
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/david-li0406-analyze-logfire-data/badge)](https://www.skillsdirectory.com/skills/david-li0406-analyze-logfire-data)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: analyze-logfire-data
description: Query Logfire database and generate rich dashboards from results. Use when analyzing telemetry data, creating visualizations, or exploring Logfire records.
argument-hint: '[analysis goal]'
---

# Analyze Logfire Data

Query the Logfire database and generate interactive dashboards from telemetry data.

## Prerequisites

- `LOGFIRE_READ_TOKEN` environment variable must be set
- Run queries using: `uv run --with logfire python logfire_query.py`

## Workflow

### 1. Understand the Schema

First, use the `mcp__logfire__schema_reference` tool to understand the database schema. Key tables and columns:

- `records` table contains spans and logs
- Important columns: `message`, `span_name`, `trace_id`, `exception_type`, `exception_message`, `start_timestamp`, `service_name`, `attributes`
- Use `->` and `->>` operators for JSON fields in `attributes`

### 2. Query the Data

Use `logfire_query.py` from this skill directory to execute queries:

```python
from logfire_query import query_sync, load_results

# Execute query and save results
query_sync(
    '''
    SELECT span_name, count(*) as count
    FROM records
    WHERE start_timestamp > now() - INTERVAL '1 hour'
    GROUP BY span_name
    ORDER BY count DESC
    LIMIT 20
    ''',
    'results.json'
)

# Load results for analysis
rows = load_results('results.json')
```

Alternatively, use the `mcp__logfire__arbitrary_query` tool directly for simpler queries.

### 3. Generate Dashboards

Write custom Plotly code for rich, interactive dashboards. Do NOT use predefined chart utilities - write the visualization code directly.

#### Dashboard Guidelines

**Structure:**
- Use `plotly.subplots.make_subplots()` for multi-panel layouts
- Include multiple visualization types: bar, line, scatter, heatmap, pie
- Save as HTML for full interactivity

**Styling:**
- Consistent color scheme (use `plotly.express.colors` palettes)
- Clear, descriptive titles for each subplot
- Proper axis labels with units
- Legend placement that doesn't obscure data

**Interactivity:**
- Enable hover tooltips with relevant data
- Support zoom/pan for time series
- Add range sliders for date filtering where appropriate

#### Example Dashboard Code

```python
import plotly.graph_objects as go
from plotly.subplots import make_subplots
import plotly.express as px

# Create multi-panel dashboard
fig = make_subplots(
    rows=2, cols=2,
    subplot_titles=('Requests by Endpoint', 'Error Rate Over Time',
                    'Response Time Distribution', 'Top Error Types'),
    specs=[[{'type': 'bar'}, {'type': 'scatter'}],
           [{'type': 'histogram'}, {'type': 'pie'}]]
)

# Add traces to each subplot
fig.add_trace(
    go.Bar(x=endpoints, y=counts, marker_color=px.colors.qualitative.Set2),
    row=1, col=1
)

# ... add more traces ...

fig.update_layout(
    height=800,
    showlegend=True,
    title_text='Logfire Telemetry Dashboard',
    title_x=0.5
)

fig.write_html('dashboard.html')
print('Dashboard saved to dashboard.html')
```

## Common Query Patterns

### Find Exceptions
```sql
SELECT exception_type, exception_message, count(*) as count
FROM records
WHERE exception_type IS NOT NULL
  AND start_timestamp > now() - INTERVAL '24 hours'
GROUP BY exception_type, exception_message
ORDER BY count DESC
LIMIT 20
```

### Trace Latency Analysis
```sql
SELECT span_name,
       avg(duration) as avg_duration,
       percentile_cont(0.95) WITHIN GROUP (ORDER BY duration) as p95
FROM records
WHERE start_timestamp > now() - INTERVAL '1 hour'
GROUP BY span_name
ORDER BY avg_duration DESC
```

### Service Dependencies
```sql
SELECT service_name, span_name, count(*) as calls
FROM records
WHERE start_timestamp > now() - INTERVAL '1 hour'
GROUP BY service_name, span_name
ORDER BY calls DESC
```

## Output

- Save dashboards as `.html` files for interactivity
- Include the file path in your response so the user can open it
- For quick insights, print summary statistics to stdout

Files in this skill

  • SKILL.md3.9 KB
  • logfire_query.py2.5 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…