OpenTelemetry
New here? Start with the Quickstart to launch Icelake + Grafana locally and send your first telemetry in 5 minutes.
Overview
Section titled “Overview”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_idkeep 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).
Getting started
Section titled “Getting started”1. Configure the OpenTelemetry Collector
Section titled “1. Configure the OpenTelemetry Collector”Point your OTel Collector’s otlphttp exporter at Icelake:
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]2. Verify ingestion
Section titled “2. Verify ingestion”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):
# Health checkcurl https://api.icelake.eu/healthz
# Latest OTel logs of one service, via the PostgreSQL wire protocolpsql "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.
OTLP endpoints
Section titled “OTLP endpoints”Both endpoints accept OTLP/HTTP protobuf payloads with Basic auth.
POST https://api.icelake.eu/otlp/v1/logsContent-Type: application/x-protobufAuthorization: Basic <base64("client_id:api_key")>OTel log records are mapped to Icelake’s log storage with:
body→ log messageresource.attributes→ labelstimestamp→ nanosecond precision timestampseverity→ log level label
Metrics
Section titled “Metrics”POST https://api.icelake.eu/otlp/v1/metricsContent-Type: application/x-protobufAuthorization: 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
Traces
Section titled “Traces”Not supported yet — see the note at the top of this page.
Application instrumentation
Section titled “Application instrumentation”Direct OTLP export (no Collector)
Section titled “Direct OTLP export (no Collector)”For simple setups, export directly from your application:
import base64from 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}"},)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}`, },});Storage layout
Section titled “Storage layout”OTel data is stored alongside Prometheus and Loki data in the same ClickHouse tables, so one query can join signals from all three:
| Table | Contents |
|---|---|
metrics | Prometheus remote-write and OTLP metrics (one row per sample) |
logs | Loki 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.
API reference
Section titled “API reference”| Endpoint | Method | Content-Type | Description |
|---|---|---|---|
/otlp/v1/logs | POST | application/x-protobuf | OTLP log ingestion |
/otlp/v1/metrics | POST | application/x-protobuf | OTLP metric ingestion |
Best practices
Section titled “Best practices”Pro tip: use the OpenTelemetry Collector as a gateway to batch, filter, and route data before sending to Icelake.
- Use the
batchprocessor 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
Related docs
Section titled “Related docs”- 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