Create a free workspace for your API key, then pick your stack below and copy the command. Live in under two minutes.
Choose your platform & installation method
For Python apps calling OpenAI or Anthropic. Every call is traced — cost, tokens, latency — with no change to your existing code.
1. Install the SDK, plus whichever provider library you use. sentrinode-llm does not pull these in for you.
2. Save this as test_llm.py. This is Python — it goes in a file, not typed into a terminal prompt. instrument() only patches the client, so the example makes a real call afterwards; without one, nothing is sent.
3. Run it. Keep keys in the environment rather than in the file, so they can’t be committed by accident.
Your call appears on the dashboard within a few seconds. In production, drop the arguments to instrument() entirely and set SENTRINODE_TENANT and SENTRINODE_API_KEY in the environment — the SDK reads them itself.
A native Node SDK is in the works. coming soon
Until then, Node and Next.js apps can send telemetry today over OpenTelemetry — point any OTLP exporter at the ingest endpoint with your tenant headers. See the cURL / OTLP tab for the endpoint and headers.
Any language. Point an OpenTelemetry/HTTP exporter at the ingest endpoint with your tenant headers — no language-specific SDK required.
Monitor the machine itself — CPU, memory, disk and network — with the OpenTelemetry Collector. Works on Windows, macOS and Linux; nothing SentriNode-specific to install.
Save that as otel-config.yaml, then run the collector against it:
Host metrics arrive as node state — they populate the nodes view, not the LLM cost panels. For cost and token tracking, use the Python or Node tab instead.
Two ways to run SentriNode yourself. The difference is whether you bring a Supabase project or not.
A. Standalone — no Supabase. Postgres holds tenants and API keys, and the whole stack comes up from one file. Ingest, storage, budgets, alerts and the /v1 API.
There is no dashboard to create a key from, so mint one in Postgres. The raw key is shown once:
What you get: ingest on port 8000, the /v1 API, budgets and alerts. What you don’t: the web dashboard — it authenticates through Supabase Auth, so it is not part of the standalone stack. Read your data through the /v1 endpoints.
B. Full stack, dashboard included — runs Supabase’s own components locally (Postgres, GoTrue, PostgREST) alongside SentriNode, so you get the web dashboard, accounts and row-level security with nothing hosted elsewhere.
Dashboard on :3000, ingest on :8000. Sign up in the UI to create the first account, then set DISABLE_SIGNUP=true so nobody else can. Budget about 4 GB of RAM — nine containers including Postgres and Neo4j.
Where your traces live. Both self-host options write every LLM call to disk as JSON Lines — one file per tenant per UTC day, on the trace_data volume. No database and no cloud account: the in-memory view is only 60 seconds of rates and 24 hours of buckets, and it does not survive a restart, so this is what gives you real history.
Files are pruned by age and by total size — TRACE_RETENTION_DAYS (30) and TRACE_MAX_TOTAL_MB (2048). The size cap is the one that matters: age alone lets a busy month fill the disk, and a full volume stops ingestion.
C. With hosted Supabase — the same stack the hosted product runs, including Neo4j and the graph API. Needs a Supabase project with the migrations in supabase/migrations/ applied.
New to this? The self-hosting guide has a four-step walkthrough, plus configuration, backups and troubleshooting.
The repository is currently private — email support@sentrinode.com for access before either option.