Skip to content

OpenTelemetry

New here? Start with the Quickstart to launch Icelake + Grafana locally and send your first telemetry in 5 minutes.

Icelake speaks OTLP/HTTP protobuf natively for logs and metrics. Ship observability data from any OTel-instrumented application or from the OpenTelemetry Collector — no adapters in between.

Traces are not supported yet. Keep traces in your existing tracing backend for now; logs that carry a trace_id / span_id keep them, so you can correlate.

All OTLP endpoints authenticate via HTTP Basic auth — username is your client ID, password is your API key (ilk_ + 64 hex characters).

Point your OTel Collector’s otlphttp exporter at Icelake:

otel-collector-config.yaml
exporters:
otlphttp:
# The exporter appends /v1/logs and /v1/metrics to this base URL
endpoint: "https://api.icelake.eu/otlp"
auth:
authenticator: basicauth/icelake
extensions:
basicauth/icelake:
client_auth:
username: "your-client-id"
password: "ilk_your-api-key-here"
service:
extensions: [basicauth/icelake]
pipelines:
logs:
receivers: [otlp]
processors: [batch]
exporters: [otlphttp]
metrics:
receivers: [otlp]
processors: [batch]
exporters: [otlphttp]

Check that the service is up and that data is arriving. OTLP data is stored with your service.name resource attribute as its source_id (or otlp when it’s not set):

Terminal window
# Health check
curl https://api.icelake.eu/healthz
# Latest OTel logs of one service, via the PostgreSQL wire protocol
psql "postgresql://your-client-id:ilk_your-api-key-here@sql.icelake.eu:5432/icelake?sslmode=require" \
-c "SELECT timestamp, log_level, message FROM logs WHERE source_id = 'my-service' ORDER BY timestamp DESC LIMIT 10"

The service also appears under Data → Data Sets in the admin UI.

Both endpoints accept OTLP/HTTP protobuf payloads with Basic auth.

POST https://api.icelake.eu/otlp/v1/logs
Content-Type: application/x-protobuf
Authorization: Basic <base64("client_id:api_key")>

OTel log records are mapped to Icelake’s log storage with:

  • body → log message
  • resource.attributes → labels
  • timestamp → nanosecond precision timestamp
  • severity → log level label
POST https://api.icelake.eu/otlp/v1/metrics
Content-Type: application/x-protobuf
Authorization: Basic <base64("client_id:api_key")>

OTel metrics are converted to Prometheus-compatible format:

  • Gauge → Prometheus gauge
  • Sum (monotonic) → Prometheus counter
  • Histogram → Prometheus histogram
  • Attributes → Prometheus labels

Not supported yet — see the note at the top of this page.

For simple setups, export directly from your application:

Python Example
import base64
from opentelemetry.exporter.otlp.proto.http.log_exporter import OTLPLogExporter
creds = base64.b64encode(b"your-client-id:ilk_your-api-key-here").decode()
exporter = OTLPLogExporter(
endpoint="https://api.icelake.eu/otlp/v1/logs",
headers={"Authorization": f"Basic {creds}"},
)
Node.js Example
const { OTLPLogExporter } = require('@opentelemetry/exporter-logs-otlp-http');
const creds = Buffer.from('your-client-id:ilk_your-api-key-here').toString('base64');
const exporter = new OTLPLogExporter({
url: 'https://api.icelake.eu/otlp/v1/logs',
headers: {
Authorization: `Basic ${creds}`,
},
});

OTel data is stored alongside Prometheus and Loki data in the same ClickHouse tables, so one query can join signals from all three:

TableContents
metricsPrometheus remote-write and OTLP metrics (one row per sample)
logsLoki push and OTLP logs, with trace_id / span_id when the record carries them

Both are partitioned by tenant and month and sorted by source and time, with 10-minute, hourly and daily rollups maintained automatically.

EndpointMethodContent-TypeDescription
/otlp/v1/logsPOSTapplication/x-protobufOTLP log ingestion
/otlp/v1/metricsPOSTapplication/x-protobufOTLP metric ingestion

Pro tip: use the OpenTelemetry Collector as a gateway to batch, filter, and route data before sending to Icelake.

  • Use the batch processor in your OTel Collector for efficient ingestion
  • Map resource attributes to meaningful labels for queryability
  • Set up separate pipelines for logs and metrics
  • Monitor collector health alongside Icelake ingestion rates
  • Quickstart — your first data in Icelake in minutes
  • Prometheus — remote write path for metrics-only pipelines
  • Loki & LogQL — log-shipping alternative if you’re not on OTEL