Sending telemetry (endpoints, keys, languages, Collector)
Endpoints, auth headers, environment variables and per-language setup.
Endpoint: https://<address>.powertraces.com on port 443 takes both OTLP gRPC and OTLP HTTP (the standard paths /v1/traces, /v1/logs, /v1/metrics). Ports 4317 (gRPC) and 4318 (HTTP) also work. Authentication: one header, X-Otel-Api-Key: <key> (or Authorization: Bearer <key>). Servers and collectors use a server key; web pages use a browser key. There is no secret. Standard environment variables (every SDK reads them, no code changes): OTEL_SERVICE_NAME=checkout-api OTEL_EXPORTER_OTLP_PROTOCOL=grpc (or http/protobuf) OTEL_EXPORTER_OTLP_ENDPOINT=https://<address>.powertraces.com OTEL_EXPORTER_OTLP_HEADERS=X-Otel-Api-Key=<server key> OTEL_RESOURCE_ATTRIBUTES=deployment.environment=production,service.version=1.4.2 Languages: - .NET: add OpenTelemetry.Extensions.Hosting, OpenTelemetry.Exporter.OpenTelemetryProtocol and the AspNetCore, Http and Runtime instrumentation packages; call AddOpenTelemetry().WithTracing(...).WithMetrics(...).WithLogging().UseOtlpExporter(). ILogger logs go too. - Node.js: npm install @opentelemetry/api @opentelemetry/auto-instrumentations-node, then start with node --require @opentelemetry/auto-instrumentations-node/register app.js. Covers Express, Fastify, NestJS, http, pg, mysql, Redis. Node defaults to HTTP; set OTEL_LOGS_EXPORTER=otlp for logs. - Java: download opentelemetry-javaagent.jar and run java -javaagent:opentelemetry-javaagent.jar -jar app.jar. Instruments Spring, JAX-RS, JDBC, Kafka and gRPC, and bridges Logback/Log4j logs. - Python: pip install opentelemetry-distro opentelemetry-exporter-otlp, run opentelemetry-bootstrap -a install, then start with opentelemetry-instrument (for example opentelemetry-instrument gunicorn app:app). Set OTEL_PYTHON_LOGGING_AUTO_INSTRUMENTATION_ENABLED=true for logs. Covers Django, Flask, FastAPI, requests, SQLAlchemy and psycopg. - Go: use the OpenTelemetry Go SDK with the otlptracegrpc exporter and wrap HTTP handlers with otelhttp so routes reach API health. - Browser: @opentelemetry/sdk-trace-web with the OTLP HTTP exporter to https://<address>.powertraces.com/v1/traces, using a browser key that lists the allowed websites (browser code is public). Let fetch propagate the trace header to your APIs so a page and its API calls land in one trace. Browsers send over HTTP only. - OpenTelemetry Collector: receive OTLP from services and export with the otlp exporter to <address>.powertraces.com:443 with a server key. Recommended: one Collector per cluster, so the key lives in one place and noisy attributes can be dropped. Any other language with an OpenTelemetry SDK (Ruby, PHP, Rust, Swift, Erlang/Elixir and more) works the same way through OTLP.