Skip to main content

stillpoint

Lightweight local observability: a FastAPI collector with a live dashboard for requests, logs, spans, and quick correlation by trace/request IDs.

Install (PyPI)

python -m pip install -U stillpoint

Quick start

1) Run the collector

stillpoint

Open http://127.0.0.1:7000/.

2) Instrument a FastAPI app

from stillpoint.agent import install_observability

client = install_observability(
    app_instance,
    collector_url="http://127.0.0.1:7000/ingest",
    token="dev-secret",
    service_name="my-api:8000",
    emit_request_span=True,  # optional single span per request
)

3) Tail access logs instead (no code changes)

set OBS_LOG_FILES=serviceA=/path/to/access.log
set OBS_TAIL_FROM_START=1
stillpoint

Usage scenarios

Single service + live UI

Run the collector, instrument your API, then browse the dashboard to:

  • see live request volume, error rates, and p95 latency
  • view recent requests and open trace details
  • export a trace bundle as JSON

Multiple services

Point multiple services at the same collector URL with different service_name values. The dashboard will tag and filter by service.

Access-log only mode

When code changes are not possible, tail access logs via OBS_LOG_FILES. Note: spans and per-request logs are not available unless emitted by the app.

Configuration

Collector environment variables:

  • OBS_TOKEN: bearer token for /ingest (default dev-secret)
  • OBS_HOST, OBS_PORT: bind host/port (defaults 127.0.0.1:7000)
  • OBS_RELOAD: set to 1 for reload (dev only)
  • OBS_LOG_LEVEL: uvicorn log level (default info)
  • OBS_WINDOW_S: metrics window seconds (default 120)
  • OBS_MAX_EVENTS: SSE buffer size (default 30000)
  • OBS_LOG_FILES: tail access logs (comma-separated svc=/path.log)
  • OBS_TAIL_FROM_START: set 1 to read logs from start
  • OBS_SLOW_MS: slow request threshold (default 750)
  • OBS_SAMPLE_RATE: sample rate for normal traffic (default 0.05)
  • OBS_TRACE_STORE: max traces stored (default 2000)
  • OBS_TRACE_LOGS: max logs per trace (default 200)
  • OBS_TRACE_SPANS: max spans per trace (default 200)
  • OBS_RECENT_REQS: max recent requests kept (default 2000)

Agent config (per app):

  • collector_url, token, service_name in install_observability
  • emit_request_span=True to get a default request span

Data points collected

Events emitted and stored:

  • req_start / req_end: method, path/route, status, duration, client info, trace_id, span_id, request_id, plus headers subset
  • log: level, logger, message, optional trace
  • span: name, duration, optional metadata (type, db, http, cache)
  • gauge: used for inflight counts when emitted by the app

Derived metrics:

  • RPS, error rates, status buckets (2xx/3xx/4xx/5xx)
  • per-endpoint p50/p95/p99 and tail latency thresholds
  • recent requests list and slowest individual traces

Local development

Run from source (no install):

python -m uvicorn stillpoint.collector_app:app --app-dir src --host 127.0.0.1 --port 7000 --reload

Tests:

python -m pytest

Code structure:

  • src/stillpoint/collector_app.py: FastAPI collector + metrics + API
  • src/stillpoint/agent.py: app-side middleware + log handler
  • src/stillpoint/ui/: dashboard assets

Metadata

Release files for stillpoint 0.1.2

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

Source distribution (sdist)

Source distribution for stillpoint 0.1.2
File Size Uploaded
stillpoint-0.1.2.tar.gz 25.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for stillpoint 0.1.2
File Interpreter ABI Platform
stillpoint-0.1.2-py3-none-any.whl Python 3 none any Details

Total release size: 47.4 kB

Release files / stillpoint-0.1.2.tar.gz

Download URL stillpoint-0.1.2.tar.gz
Size 25.3 kB
Tags Source
SHA-256 checksum
How to use checksums
815c361f5f1a23020e6d22fa7da3dae87c5eb259933dd13cc32ccfe639f66af0
BLAKE2b-256 checksum
How to use checksums
3331769764f41762b42f8a4837da010607350574359edc0fe0c70d303eef2850
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.0

Release files / stillpoint-0.1.2-py3-none-any.whl

Download URL stillpoint-0.1.2-py3-none-any.whl
Size 22.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d826ee27d9f47ce81f4fea7cd91df04a0fe7ee22601b41c747631f1b4c02cf72
BLAKE2b-256 checksum
How to use checksums
1394b491b234c51d6d4cc9f19e58544bd7485fb32c75542f74b4acaac40f970c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.0

Release history Release notifications | RSS feed

This release

0.1.2 This release

2 release files

0.1.1

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