Skip to main content

🔬 autopsy

Turn raw logs into incident postmortems — zero setup, fully local.

PyPI version Python 3.11+ License: MIT PRs Welcome

autopsy ingests logs from multiple services, correlates them by timestamp, detects anomalies, and outputs a structured incident postmortem — all from your terminal.

No agents. No cloud. No account. Just logs in, postmortem out.


🎬 Demo

$ autopsy --file api.log --file worker.log --file nginx.log

╭─────────────────────────────────────────╮
│ 🔬 autopsy  — incident postmortem generator │
╰─────────────────────────────────────────╯

📂 Reading: api.log       ✓ 16 events  (api)
📂 Reading: worker.log    ✓ 11 events  (worker)
📂 Reading: nginx.log     ✓ 11 events  (nginx)

⏱  Building timeline...
🔍 Running anomaly detection...
   ⚠  9 anomalies detected

╭─────────────── 📊 Summary ───────────────╮
│ Total events   38                        │
│ Errors         15  (39.5%)               │
│ Warnings        5                        │
│ Services       api, nginx, worker        │
│ Window         14:00:00 → 14:10:25       │
╰──────────────────────────────────────────╯

╭──────────────── 🚨 Anomalies ────────────────╮
│ 14:03:00  CRITICAL  error_spike              │
│           Error rate jumped to 93.3%         │
│                                              │
│ 14:03:01  ERROR     cascade                  │
│           worker erroring 14s after api      │
│                                              │
│ 14:03:10  WARNING   silence                  │
│           No logs from nginx for 430s        │
╰──────────────────────────────────────────────╯

✅ Done.

✨ Why autopsy?

Every observability tool assumes you have a budget, a team, and weeks to set up agents.

autopsy assumes you have a terminal and a log file.

autopsy Datadog Incident.io
Setup time 30 seconds Days Weeks
Cost Free $$$ $$
Agents required ❌ ✅ ✅
Cloud account ❌ ✅ ✅
Logs leave machine ❌ Never ✅ ✅
Works offline ✅ ❌ ❌
Works in air-gapped envs ✅ ❌ ❌

🚀 Install

pip install mr-autopsy==0.1.0

Requires Python 3.11+


⚡ Quick Start

# Analyze a single log file
autopsy --file app.log

# Multiple services at once
autopsy --file api.log --file worker.log --file nginx.log

# Filter to your incident window
autopsy --file api.log --from "2026-08-04 14:00" --to "2026-08-04 16:00"

# Read from a Docker container
autopsy --docker my-api --since 2h

# Pipe from kubectl
kubectl logs my-pod --since=2h | autopsy --stdin --stdin-service api

# Save a Markdown postmortem
autopsy --file api.log --output markdown --save ./postmortem-2026-08-04.md

📋 All Options

Options:
  -f, --file TEXT            Log file(s) to analyze
  -s, --service TEXT         Override service name (matches --file positionally)
  -d, --docker TEXT          Docker container name(s)
      --since TEXT           Docker --since value e.g. 2h, 30m
      --stdin                Read from stdin
      --stdin-service TEXT   Service name for stdin input  [default: stdin]
      --from TEXT            Start of time window (YYYY-MM-DD HH:MM:SS)
      --to TEXT              End of time window   (YYYY-MM-DD HH:MM:SS)
  -o, --output TEXT          Output format: terminal | markdown | json
      --save TEXT            Save report to file
      --bucket INTEGER       Bucket size in seconds for rate analysis [default: 60]
      --help                 Show this message and exit.

📁 Supported Log Formats

Format is auto-detected — you never need to specify it.

JSON (pino, winston, structlog, zerolog)

{"time":"2026-08-04T14:03:05Z","level":"error","msg":"DB timeout","service":"api"}

logfmt

ts=2026-08-04T14:03:05Z level=error msg="job failed" service=worker

Plaintext (nginx, syslog, any custom format)

2026-08-04 14:03:05 ERROR upstream returned 502 Bad Gateway

🚨 Anomaly Detection

autopsy runs three detectors on every analysis:

1. Error Spike

Detects when the error rate suddenly jumps above baseline.

14:00 ░░░░░░░░  2%   normal
14:01 ░░░░░░░░  3%   normal
14:02 ░░░░░░░░  5%   normal
14:03 ████████ 93%   ← CRITICAL: error spike detected

2. Cascading Failure

Detects when Service B starts failing shortly after Service A — suggesting an upstream dependency failure.

14:03:01  api     → first ERROR
14:03:05  nginx   → first ERROR  (4s later  → cascade detected)
14:03:15  worker  → first ERROR  (14s later → cascade detected)

3. Service Silence

Detects when a service stops emitting logs unexpectedly.

14:03:10  nginx  last log before silence
              ↕  430 seconds — no logs
14:10:20  nginx  logs resume

📄 Output Formats

Terminal (default)

Rich colored output with summary panel, anomaly table, and top errors.

Markdown

autopsy --file api.log --output markdown

Outputs a complete postmortem document:

# 🔬 Incident Postmortem
> Generated by autopsy v0.1.0

## 📊 Summary
| Window   | 2026-08-04 14:00:00 → 14:10:25 UTC |
| Duration | 10m 25s                             |
| Errors   | 15 (39.5%)                          |

## 🚨 Anomalies Detected
### 1. 🔴 Error spike detected
...

## 🕐 Event Timeline
...

## ✅ Action Items
- [ ] Identify root cause
- [ ] Add alerting for recurrence

JSON

autopsy --file api.log --output json

Machine-readable output for scripting or integrations.


🏗️ Architecture

Ingest → Parse → Correlate → Detect → Report
Layer Job
Ingest Read raw lines from files, Docker, or stdin
Parse Convert each line into a structured LogEvent
Correlate Merge all services into one sorted timeline
Detect Find error spikes, silences, and cascades
Report Render Markdown, JSON, or terminal output

Every layer has a single input and output type — swap any layer independently without touching the rest.


🗺️ Roadmap

  • v0.1 — File ingestion, auto-detect format, timeline, anomaly detection, Markdown report
  • v0.2 — Latency anomaly detection, HTML report output
  • v0.3 — Custom log format config (.autopsy.yaml)
  • v0.4 — Local LLM root cause summary via Ollama (offline AI, no API key)
  • v1.0 — Full docs site, 80%+ test coverage, GitHub Actions CI/CD

🤝 Contributing

Contributions are welcome! Here's how to get started:

# Clone the repo
git clone https://github.com/yourusername/autopsy
cd autopsy

# Create virtual environment
uv venv
source venv/bin/activate

# Install with dev dependencies
uv pip install -e ".[dev]"

# Run tests
python -m pytest tests/ -v

Please open an issue before submitting a large PR — let's discuss the approach first.

See CONTRIBUTING.md for full guidelines.


💬 FAQ

Does autopsy send my logs anywhere? Never. Everything runs locally on your machine. No network calls are made.

What Python version do I need? Python 3.11 or higher.

Can I use this in CI/CD? Yes. Use --output json for machine-readable output and --save to persist the report as an artifact.

My log format isn't being detected correctly. What do I do? Open an issue with a sample (sanitized) log line and we'll add support. Format detection is a moving target and community samples help a lot.

Will you add real-time monitoring? No. autopsy is intentionally a post-incident tool. Use Prometheus, Grafana, or Datadog for real-time monitoring. Use autopsy after the incident to understand what happened.


📝 License

MIT © Tharun


Built for the developer who gets paged at 2am with nothing but a terminal.

Metadata

Release files for mr-autopsy 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mr-autopsy 0.1.1
File Size Uploaded
mr_autopsy-0.1.1.tar.gz 42.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for mr-autopsy 0.1.1
File Interpreter ABI Platform
mr_autopsy-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 64.3 kB

Release files / mr_autopsy-0.1.1.tar.gz

Download URL mr_autopsy-0.1.1.tar.gz
Size 42.3 kB
Tags Source
SHA-256 checksum
How to use checksums
17fe1b39a5f83f776b1c8ac9bf24189e7498654d4575487ec6589a935b9acad7
BLAKE2b-256 checksum
How to use checksums
44ec300f514a6dc828c3dbef8408e46c1e3585f2d13be8fe065adaa80a47f00c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.6

Release files / mr_autopsy-0.1.1-py3-none-any.whl

Download URL mr_autopsy-0.1.1-py3-none-any.whl
Size 22.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d1486c1090b6ba97d612bfcc4b0e4f385791deb6c8757f276ef15a628597a021
BLAKE2b-256 checksum
How to use checksums
1866f8056197c8206a44fd9bea51e900699dda590b47fbdf1f6c90113c5dc773
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.6

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page