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

Node.js
Python
Go
Ruby
PHP
.NET
Java

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