/quickstart
OTLP / HTTP + gRPC
free plan / 1 gb-mo
telemtra.io
// quickstart

From signup to first span
in 60 seconds.

Telemtra accepts standard OpenTelemetry over OTLP. No proprietary SDK, no custom agent, no instrumentation rewrite. Sign up, copy your workspace API key, set two environment variables, and your app or Collector starts shipping data.

// new / ai agent quickstart

Want your AI coding agent to wire OTel for you?

Paste one prompt into Claude Code, Cursor, or Cline and your app is instrumented end-to-end — no copy-paste of snippets, no SDK reading. Available for Node.js, Python, Go, .NET, Rust, plus a generic fallback.

// three steps

Three steps to live telemetry.

The same three steps work for every OpenTelemetry language and for the Collector.

[01] / create your workspace

Sign up and copy your API key.

Sign up with email, confirm, and your free workspace is created. Open Workspace settings → API keys and copy the key. Keep it in a secret manager or an environment file - do not commit it.

[02] / two environment variables

Set OTEL_EXPORTER_OTLP_ENDPOINT and _HEADERS.

These two variables work for any OpenTelemetry SDK that supports OTLP HTTP - which is all of them.

shell .env
OTEL_EXPORTER_OTLP_ENDPOINT=https://ingest.telemtra.io
OTEL_EXPORTER_OTLP_HEADERS=x-api-key=${TELEMTRA_API_KEY}

If you prefer gRPC, use ingest.telemtra.io:443 as the endpoint and set OTEL_EXPORTER_OTLP_PROTOCOL=grpc. Everything else stays the same.

[03] / run

Start your app under the OTel launcher.

Wrap your existing start command with the OpenTelemetry launcher (auto-instrumentation), or rely on your SDK setup if you already initialise OTel manually. Examples in the next section.

// pick your stack

Copy a working snippet.

Each path below is a complete, copy-pasteable starting point. Drop it in, run, and your first span lands in Telemtra.

// python

Python OpenTelemetry config

Auto-instrument a Flask, Django, or FastAPI app without touching source code. Install the OpenTelemetry distro, set two environment variables, and launch under opentelemetry-instrument — auto-instrumentation patches frameworks at import time.

python shell
pip install opentelemetry-distro opentelemetry-exporter-otlp-proto-http
opentelemetry-bootstrap --action=install

export OTEL_SERVICE_NAME=checkout-api
export OTEL_EXPORTER_OTLP_ENDPOINT=https://ingest.telemtra.io
export OTEL_EXPORTER_OTLP_HEADERS="x-api-key=${TELEMTRA_API_KEY}"

opentelemetry-instrument python app.py

Full OpenTelemetry Python guide →

// node.js

Node.js OpenTelemetry config

Auto-instrument Express, Fastify, NestJS, Koa, and most popular Node.js libraries by registering auto-instrumentations-node at process start with --require. No code changes inside your app.

node.js shell
npm install @opentelemetry/api @opentelemetry/auto-instrumentations-node \
  @opentelemetry/exporter-trace-otlp-http \
  @opentelemetry/exporter-logs-otlp-http \
  @opentelemetry/exporter-metrics-otlp-http

export OTEL_SERVICE_NAME=checkout-api
export OTEL_EXPORTER_OTLP_ENDPOINT=https://ingest.telemtra.io
export OTEL_EXPORTER_OTLP_HEADERS="x-api-key=${TELEMTRA_API_KEY}"

node --require @opentelemetry/auto-instrumentations-node/register app.js

Full OpenTelemetry Node.js guide →

// go

Go OpenTelemetry config

Go has no auto-instrumentation; wire the SDK explicitly in main and add per-library instrumentations (otelhttp, otelgin, otelpgx) as needed. The block below is the minimum trace exporter setup that sends OTLP/HTTP to Telemtra.

go main.go
import (
  "go.opentelemetry.io/otel"
  "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp"
  sdktrace "go.opentelemetry.io/otel/sdk/trace"
)

exp, _ := otlptracehttp.New(ctx,
  otlptracehttp.WithEndpointURL("https://ingest.telemtra.io"),
  otlptracehttp.WithHeaders(map[string]string{
    "x-api-key": os.Getenv("TELEMTRA_API_KEY"),
  }),
)
tp := sdktrace.NewTracerProvider(sdktrace.WithBatcher(exp))
otel.SetTracerProvider(tp)

Full OpenTelemetry Go guide →

// java

Java OpenTelemetry config

Attach the OpenTelemetry Java agent JAR at JVM startup — zero source code, build file, or dependency changes. The agent instruments Spring, JDBC, Kafka, gRPC, OkHttp, Jetty, and dozens more at class load.

java shell
curl -L -o opentelemetry-javaagent.jar \
  https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/latest/download/opentelemetry-javaagent.jar

java \
  -javaagent:opentelemetry-javaagent.jar \
  -Dotel.service.name=checkout-api \
  -Dotel.exporter.otlp.endpoint=https://ingest.telemtra.io \
  -Dotel.exporter.otlp.protocol=http/protobuf \
  -Dotel.exporter.otlp.headers=x-api-key=${TELEMTRA_API_KEY} \
  -jar app.jar

Full OpenTelemetry Java guide →

// .net

.NET OpenTelemetry config

Register OpenTelemetry in Program.cs with NuGet packages for ASP.NET Core, HttpClient, and Entity Framework Core. OTLP/HTTP export over https://ingest.telemtra.io; the hosted service flushes pending spans on graceful shutdown.

.net Program.cs
dotnet add package OpenTelemetry.Extensions.Hosting
dotnet add package OpenTelemetry.Exporter.OpenTelemetryProtocol
dotnet add package OpenTelemetry.Instrumentation.AspNetCore

// Program.cs
builder.Services.AddOpenTelemetry()
    .ConfigureResource(r => r.AddService("checkout-api"))
    .WithTracing(t => t
        .AddAspNetCoreInstrumentation()
        .AddOtlpExporter(o =>
        {
            o.Endpoint = new Uri("https://ingest.telemtra.io/v1/traces");
            o.Protocol = OtlpExportProtocol.HttpProtobuf;
            o.Headers = $"x-api-key={Environment.GetEnvironmentVariable("TELEMTRA_API_KEY")}";
        }));

Full OpenTelemetry .NET guide →

// rust

Rust OpenTelemetry config

Rust routes everything through the tracing crate: a single tracing-opentelemetry layer turns your existing tracing::info! and #[instrument] calls into OTLP spans. Add the crates with cargo add opentelemetry opentelemetry_sdk opentelemetry-otlp tracing tracing-opentelemetry tracing-subscriber, then wire the exporter once at startup.

rust main.rs
use opentelemetry::global;
use opentelemetry_otlp::WithExportConfig;
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};

let exporter = opentelemetry_otlp::new_exporter()
    .http()
    .with_endpoint("https://ingest.telemtra.io")
    .with_headers(std::collections::HashMap::from([(
        "x-api-key".to_string(),
        std::env::var("TELEMTRA_API_KEY")?,
    )]));
let tracer_provider = opentelemetry_otlp::new_pipeline()
    .tracing()
    .with_exporter(exporter)
    .install_batch(opentelemetry_sdk::runtime::Tokio)?;
global::set_tracer_provider(tracer_provider.clone());

tracing_subscriber::registry()
    .with(tracing_opentelemetry::layer().with_tracer(tracer_provider.tracer("checkout-api")))
    .init();

Full OpenTelemetry Rust guide →

// docker

Docker Compose OpenTelemetry config

Add three OTEL environment variables to any service in docker-compose.yml. Pair with any OpenTelemetry SDK above to ship traces, logs, and metrics from a containerised app to Telemtra.

docker docker-compose.yml
services:
  app:
    image: your-app:latest
    environment:
      OTEL_SERVICE_NAME: checkout-api
      OTEL_EXPORTER_OTLP_ENDPOINT: https://ingest.telemtra.io
      OTEL_EXPORTER_OTLP_HEADERS: "x-api-key=${TELEMTRA_API_KEY}"

Full OpenTelemetry Docker guide →

// kubernetes

Kubernetes OpenTelemetry config

Store the API key in a Kubernetes Secret, load it into the pod as TELEMTRA_API_KEY, then build the full OTLP header from it with Kubernetes' $(VAR) substitution. OTel expects x-api-key=<key>, not the raw key, so the OTEL_EXPORTER_OTLP_HEADERS value is composed in a second env entry.

kubernetes deployment.yaml
apiVersion: v1
kind: Secret
metadata:
  name: telemtra
stringData:
  api-key: tk_live_xxxxxxxxxxxxxxxxxxxx
---
env:
  - name: OTEL_SERVICE_NAME
    value: checkout-api
  - name: OTEL_EXPORTER_OTLP_ENDPOINT
    value: https://ingest.telemtra.io
  - name: TELEMTRA_API_KEY
    valueFrom:
      secretKeyRef:
        name: telemtra
        key: api-key
  - name: OTEL_EXPORTER_OTLP_HEADERS
    value: "x-api-key=$(TELEMTRA_API_KEY)"

Full OpenTelemetry Kubernetes guide →

// collector

OpenTelemetry Collector config

If your apps already export OTLP to a Collector, add this exporter and pipeline reference — no SDK changes upstream. Run side-by-side with your current backend's exporter to evaluate Telemtra without committing to a cut-over.

collector otelcol-config.yaml
exporters:
  otlp/telemtra:
    endpoint: ingest.telemtra.io:443
    headers:
      x-api-key: ${env:TELEMTRA_API_KEY}

service:
  pipelines:
    traces:  { exporters: [otlp/telemtra] }
    logs:    { exporters: [otlp/telemtra] }
    metrics: { exporters: [otlp/telemtra] }

Full OpenTelemetry Collector guide →

// what you see in 60 seconds

The workspace fills itself in.

You do not configure dashboards before data arrives. The signals just show up.

→

Traces and Service Map appear first

Spans land in Traces within seconds. As soon as two services exchange a request, the Service Map draws the edge with p95 latency, request count, and error rate per link.

→

Logs and metrics populate their views

Structured logs show up in Logs with severity, service, host, and any OTel attributes preserved as filters. Counters, gauges, and histograms appear in Metrics with count, sum, average, and p50–p99 chart modes.

→

One-click alerts from what you already see

Filter logs or traces, save the filter, and turn it into an alert. Delivery goes to email or a signed webhook - no separate alerting setup.

→

Clean the noise before it is stored

Data Shaper rules drop, mask, and rewrite noisy log fields at ingest - chatty health-check logs and sensitive payloads never reach retention.

// already running otel?

Add an exporter to your Collector.

Keep your current setup unchanged. Multi-export to evaluate Telemtra side-by-side with your current backend, then cut over when you are confident.

// frequently asked

Questions about the quickstart.

OpenTelemetry compatibility, troubleshooting, and what counts against the Free plan.

Do I need to install a Telemtra SDK?

No. Telemtra accepts standard OpenTelemetry over OTLP. Use the official OpenTelemetry SDK for your language or the OpenTelemetry Collector. There is no proprietary library to add.

Can I run Telemtra alongside another vendor while I evaluate?

Yes. The OpenTelemetry Collector supports multiple exporters in the same pipeline. Add an otlp/telemtra exporter next to your existing one and your telemetry fans out to both backends. Switch when you are ready.

What if my first span never appears?

Three things to check: the x-api-key header is set on the OTLP request, the endpoint uses HTTPS (https://ingest.telemtra.io for HTTP, ingest.telemtra.io:443 for gRPC), and OTEL_EXPORTER_OTLP_PROTOCOL matches the exporter you installed. The workspace shows a connection status on the Ingest page if data has been received but rejected.

Does this work for every OpenTelemetry language?

Yes. Any SDK that emits OTLP — Python, Node.js, Go, Java, .NET, Ruby, Rust, PHP, plus the Collector itself — sends to Telemtra the same way: set the endpoint, attach the api key header, run.

Is the Free plan enough to test this with my real app?

Yes for a single small service. The Free plan includes 1 GB ingest per month and 7 day retention, which covers a development or staging service comfortably. Upgrade only when you point production traffic at it.

// next step

Ship your first span.

Create a workspace, copy an API key, paste the two environment variables, and your existing OpenTelemetry setup is live in Telemtra.