Observability
OpenTelemetry in, without the collector homework.
Point any OTel SDK or Collector at your Temps instance. Traces, metrics, and logs land in Postgres or ClickHouse, with compressed log history — queryable from the same dashboard as everything else.
Every language's OTel SDK reads these vars automatically
Distributed traces — per-request latency, span counts, and errors across services.
Any OTel SDK or Collector
Point your existing OpenTelemetry SDK or Collector at your Temps instance's OTLP endpoint — no proprietary agent to install.
Traces, metrics, and logs in one dashboard
All three OpenTelemetry signals land in the same place as your deploys, error tracking, and analytics — no second tool to correlate them in.
Storage backend you choose
Observability data lands in Postgres (TimescaleDB) or ClickHouse depending on how storage is configured — pick what fits your scale.
Compressed log history
Log retention is kept compressed by default, so keeping months of history doesn't turn into a disk-cost problem.
No change to your existing projects
Every deployment already has the env vars set.
Temps injects OTEL_EXPORTER_OTLP_ENDPOINT, _PROTOCOL, _HEADERS, and OTEL_SERVICE_NAME into every deployment automatically. Any OTel SDK that reads the standard env vars — which is most of them, out of the box — just needs to start. No manual endpoint, no token to paste in.
// otel.ts — import first in main.ts, before any other module.
// Endpoint, protocol, headers, and service name all come from the
// OTEL_* env vars Temps already injected — nothing to configure.
import { getNodeAutoInstrumentations } from "@opentelemetry/auto-instrumentations-node";
import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-proto";
import { OTLPMetricExporter } from "@opentelemetry/exporter-metrics-otlp-proto";
import { PeriodicExportingMetricReader } from "@opentelemetry/sdk-metrics";
import { NodeSDK } from "@opentelemetry/sdk-node";
if (process.env.OTEL_EXPORTER_OTLP_ENDPOINT) {
new NodeSDK({
traceExporter: new OTLPTraceExporter(),
metricReader: new PeriodicExportingMetricReader({
exporter: new OTLPMetricExporter(),
}),
instrumentations: [getNodeAutoInstrumentations()],
}).start();
}Point your OTel SDK somewhere that's already yours.
No separate observability vendor, no second bill tied to how much you log this month.
Try it yourself — quickstart guide