Skip to content

Getting Started

MiniAPM is the smallest useful APM—a self-hosted solution for monitoring application performance and tracking errors. Built in Rust with SQLite storage, it requires zero external dependencies.

MiniAPM consists of two services:

ServicePortDescription
miniapm3000Collector — Ingestion API for traces, errors, deploys
miniapm-admin3001Dashboard — Web UI for viewing and managing data

Both share the same SQLite database.

docker-compose.yml
services:
miniapm:
image: ghcr.io/miniapm/miniapm
command: miniapm
ports:
- "3000:3000"
volumes:
- miniapm_data:/data
environment:
- SQLITE_PATH=/data/miniapm.db
- RUST_LOG=mini_apm=info
miniapm-admin:
image: ghcr.io/miniapm/miniapm
command: miniapm-admin
ports:
- "3001:3001"
volumes:
- miniapm_data:/data
environment:
- SQLITE_PATH=/data/miniapm.db
- RUST_LOG=mini_apm_admin=info
- ENABLE_USER_ACCOUNTS=true
- SESSION_SECRET=change-me-to-random-string
depends_on:
- miniapm
volumes:
miniapm_data:
Terminal window
docker compose up -d

On first run, check collector logs for your API key:

docker compose logs miniapm
INFO mini_apm::server: Single-project mode - API key: proj_abc123...

Point your OpenTelemetry SDK at the collector:

Terminal window
OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:3000/ingest
OTEL_EXPORTER_OTLP_HEADERS=Authorization=Bearer proj_abc123...

Navigate to http://localhost:3001 to see your traces and errors.

MiniAPM ingests traces via the OpenTelemetry Protocol (OTLP/HTTP JSON). Each request to your application creates a trace, which contains multiple spans representing individual operations (HTTP requests, database queries, external calls).

Errors are automatically captured with full stack traces and grouped by fingerprint to prevent duplicate noise. You can mark errors as resolved or ignored.

Every HTTP endpoint in your application gets performance metrics: P50, P95, P99 latencies, request counts, error rates, and database time breakdown.