Collector Setup Guide
Native OpenTelemetry ingest is available in Hydrolix version 6.3 and later.
An OpenTelemetry Collector sits between applications and Hydrolix, receiving telemetry from one or more sources and forwarding it to the Hydrolix gRPC endpoint on port 4317. This guide covers configuring a Collector to route OpenTelemetry logs, metrics, and traces to Hydrolix tables.
For an overview of how Hydrolix ingests OpenTelemetry data, see OpenTelemetry ingest.
To send telemetry from an application without a Collector, see the SDK setup guide.
When to use a Collector⚓︎
Using a Collector is recommended for production deployments with benefits at scale:
- Batching and retries buffer data and smooth out bursts, so a momentary network problem doesn't drop telemetry.
- Filtering and redaction drop or mask fields before they leave the network, which helps keep sensitive data out of storage.
- Fan-out and aggregation let many applications share one egress path to Hydrolix instead of each holding its own connection.
Prerequisites⚓︎
Before configuring the Collector, create the tables and transforms that receive the data. Each target table and its transform must exist before the Collector sends data.
Set up the following in Hydrolix:
- Native OpenTelemetry ingest enabled on the target cluster. A Collector can't reach the endpoint until it is. See Enable OpenTelemetry ingest.
- A table for each signal type you plan to send, named in
project.tableformat. See Projects and tables. - A transform for each table that maps the OpenTelemetry fields to columns. See Reference transforms for the standard logs, metrics, and traces schemas.
Configure the OTLP exporter⚓︎
Hydrolix accepts OTLP over gRPC and over HTTP. This guide configures the Collector's otlp exporter to point at the cluster endpoint on port 4317. Add routing headers to identify the target table and transform. To send over HTTP instead, use the otlphttp exporter with the endpoints listed under Protocol.
| Collector Exporter for Hydrolix | |
|---|---|
Routing headers⚓︎
Hydrolix schemas are user-defined. Each request must carry metadata headers that identify the target table and transform.
| Header | Required | Description |
|---|---|---|
x-hdx-table |
Yes | Target table in project.table format |
x-hdx-transform |
No | Transform to apply. Uses the table's default transform if omitted. |
Route signal types to separate tables⚓︎
Write each signal type to its own table:
- Define one
otlpexporter per target table. Give each exporter its ownx-hdx-tableheader. - Add each exporter to the pipeline for its signal type.
This example sends logs, metrics, and traces to separate tables:
Test the connection⚓︎
telemetrygen sends synthetic telemetry to verify that data reaches a table before wiring up real applications. This command sends 400 log records (100 from each of 4 workers). The --rate 0 flag removes the default one-record-per-second limit so they send right away:
| Send Test Logs with telemetrygen | |
|---|---|
The endpoint uses TLS, so telemetrygen connects securely without extra flags. Add --otlp-insecure only when the target cluster has TLS disabled, such as a development cluster.
When the command finishes, query the target table to confirm all 400 rows arrived:
| Confirm Test Data Arrived | |
|---|---|
A count of 400 confirms that the Collector reached the endpoint and the transform accepted the data.
Authentication⚓︎
The gRPC endpoint requires a bearer token, which can be a service account token. Add an Authorization header to each exporter:
| Bearer Token Authentication | |
|---|---|
Limitations⚓︎
Hydrolix doesn't create tables or transforms. Both must exist before the Collector sends data.