Observability & Operations

OpenTelemetry Backends

Connect PURISTA traces and metrics to your preferred observability platform

PURISTA emits OpenTelemetry traces, metrics, and logs automatically for every command, subscription, stream, and queue job. You choose where that data goes by wiring a SpanProcessor at startup — no changes to business logic, no instrumentation required.

How it works in PURISTA

PURISTA instruments traces by accepting a SpanProcessor at construction time. You create a SpanProcessor wrapping your chosen exporter and pass it directly to the event bridge and each service — no global tracer registration required:

import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http'
import { SimpleSpanProcessor } from '@opentelemetry/sdk-trace-node'
import { AmqpBridge } from '@purista/amqpbridge'

const spanProcessor = new SimpleSpanProcessor(
  new OTLPTraceExporter({ url: 'http://localhost:4318/v1/traces' })
)

const eventBridge = new AmqpBridge({ spanProcessor })
const myService = await myV1Service.getInstance(eventBridge, { spanProcessor })

If you also want auto-instrumentation for Node.js built-ins (HTTP, fetch, database drivers), initialize NodeSDK before starting PURISTA:

import { NodeSDK } from '@opentelemetry/sdk-node'
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http'

const sdk = new NodeSDK({
  traceExporter: new OTLPTraceExporter({ url: 'http://localhost:4318/v1/traces' }),
})
sdk.start()
// Then start your PURISTA event bridge and services

Both approaches are compatible — use NodeSDK for broad auto-instrumentation and the SpanProcessor injection for PURISTA-specific span control.

Supported backends

Choose the backend that fits your stack. Every one uses the same SpanProcessor pattern above — only the exporter changes.

BackendProtocolSelf-hostedManaged
CloudGridOTLP HTTP / gRPC
JaegerOTLP HTTP
ZipkinZipkin wire
Grafana TempoOTLP HTTPGrafana Cloud
SigNozOTLP HTTPSigNoz Cloud
UptraceOTLP HTTPUptrace Cloud
TeletraceOTLP HTTP
AWS X-RayOTLP / ADOTVia ADOTAWS managed
Azure MonitorOTLPAzure managed
Google Cloud TraceCloud Trace exporterGCP managed

For PURISTA AI Harness systems, CloudGrid AI Evaluation is the product layer around the harness eval helpers: datasets, experiment runs, per-item score records, comparisons, optimization candidates, and trace-backed evidence live beside the telemetry they depend on.

Choosing a backend

flowchart TD
    Q["Where do you run?"] --> A["Local dev / open source"]
    Q --> B["Already using Grafana"]
    Q --> C["AWS infrastructure"]
    Q --> D["Azure infrastructure"]
    Q --> E["GCP infrastructure"]
    A --> A1["Jaeger or SigNoz<br/>— single Docker container"]
    B --> B1["Grafana Tempo<br/>— Loki + trace correlation"]
    C --> C1["AWS X-Ray<br/>— via ADOT Collector"]
    D --> D1["Azure Monitor<br/>— Application Insights"]
    E --> E1["Google Cloud Trace<br/>— native GCP exporter"]

Graceful shutdown

Always flush spans before your process exits:

gracefulShutdown(logger, [
  eventBridge,
  myService,
  {
    name: 'OTSpanProcessor',
    destroy: () => spanProcessor.shutdown(),
  },
])

Next steps

Pick a backend from the list in the left sidebar, or start with Jaeger for the fastest local setup.

Related

Read Next
Getting Started

from Learning Paths & Tutorials