IMPALA-13237: [Patch 4 of 5] - Helpers to Visualize OpenTelemetry Traces

Adds helper scripts and configurations to run an OpenTelemetry OTLP
collector and a Jaeger instance. The collector is configured to
receive telemetry data on port 55888 via OTLP-over-http and to
forward traces to a Jaeger-all-in-one container receiving data on
port 4317.

Testing was accomplished by running this setup locally and verifying traces appeared in
the Jaeger UI.

Generated-by: Github Copilot (GPT-4.1)
Change-Id: I198c00ddc99a87c630a6f654042bffece2c9d0fd
Reviewed-on: http://gerrit.cloudera.org:8080/23100
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
This commit is contained in:
jasonmfehr
2025-06-27 12:27:11 -07:00
committed by Impala Public Jenkins
parent 3e6326538c
commit fdad954ce4
4 changed files with 190 additions and 0 deletions

View File

@@ -104,6 +104,7 @@ README*.md
*/README.txt
testdata/bin/README-BENCHMARK-TEST-GENERATION
testdata/bin/minicluster_lakekeeper/README.md
testdata/bin/otel-collector/README.md
testdata/scale_test_metadata/README.md
tests/comparison/ORACLE.txt
bin/distcc/README.md

110
testdata/bin/otel-collector/README.md vendored Normal file
View File

@@ -0,0 +1,110 @@
# OpenTelemetry Collector & Jaeger Integration
This directory contains configuration to run an [OpenTelemetry Collector](https://opentelemetry.io/docs/collector/) and a [Jaeger](https://www.jaegertracing.io/) instance for collecting and visualizing telemetry, primarily for Impala development and testing.
---
## Contents
- [`otel-config.yml`](./otel-config.yml): OpenTelemetry Collector configuration file.
- [`docker-compose.yml`](./docker-compose.yml): Alternative Docker Compose setup for both services.
---
## Quick Start
### Option 1: Run Interactively
```bash
docker-compose -f testdata/bin/otel-collector/docker-compose.yml up
```
- This command:
- Starts the OpenTelemetry Collector container with the `otel-config.yml` config.
- Starts the Jaeger container.
- Waits for both containers to be running.
- Continuously outputs both container logs to the terminal window.
### Option 2: Run Detached
```bash
docker-compose -f testdata/bin/otel-collector/docker-compose.yml up -d
```
- This command:
- Starts the OpenTelemetry Collector container with the `otel-config.yml` config.
- Starts the Jaeger container.
- Waits for both containers to be running.
- Exits back to the terminal prompt.
### Stop the Collector and Jaeger
```bash
docker-compose -f testdata/bin/otel-collector/docker-compose.yml down
```
- This command gracefully stops and removes the containers and network. Note this command must always be run. Pressing ctrl+c when the containers are run interactively does not stop the containers.
---
## Configuration Details
- **OpenTelemetry Collector** listens for OTLP traces on port `55888` (HTTP).
- **Jaeger** is configured to receive OTLP traces on port `4317` and exposes its UI on port `16686`.
The collector forwards all received traces to Jaeger using OTLP/gRPC.
---
## Sending Traces from Impala
To send traces from an Impala cluster to this collector, start Impala with the following arguments:
```bash
./bin/start-impala-cluster.py \
--cluster_size=2 \
--num_coordinators=1 \
--use_exclusive_coordinators \
--impalad_args="-v=2 --otel_trace_enabled=true \
--otel_trace_collector_url=http://localhost:55888/v1/traces
--otel_trace_span_processor=simple \
--cluster_id=local_cluster"
```
- Ensure the collector is running before starting Impala.
- Adjust `--otel_trace_collector_url` if running on a remote host.
---
## Viewing Traces
- Open the Jaeger UI in your browser: [http://localhost:16686/](http://localhost:16686/)
- If running remotely, use SSH port forwarding:
```bash
ssh -L 16686:localhost:16686 <your-dev-machine>
```
---
## Notes
- The scripts and Docker Compose setup are idempotent and safe to run multiple times.
- All containers and the custom network are cleaned up on stop.
- The provided configuration is suitable for local development and testing only.
---
## Troubleshooting
- **Ports already in use:** Ensure no other services are using ports `55888`, `4317`, or `16686`.
- **Containers not starting:** Check Docker logs for `otel-collector` and `jaeger` for errors:
```bash
docker logs otel-collector
docker logs jaeger
```
- **Configuration changes:** Edit `otel-config.yml` as needed and restart the services.
---

View File

@@ -0,0 +1,43 @@
##############################################################################
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
##############################################################################
version: '3.0'
services:
jaeger:
image: jaegertracing/jaeger:2.5.0
container_name: jaeger
ports:
- "16686:16686" # Jaeger UI
- "5778:5778" # Config REST API
- "4317:4317" # ingest
environment:
- COLLECTOR_OTLP_ENABLED=true
- COLLECTOR_OTLP_HTTP_ENABLED=true
otel-collector:
image: otel/opentelemetry-collector:latest
container_name: otel-collector
depends_on:
- jaeger
volumes:
- ./otel-config.yml:/etc/otel/config.yml
command: ["--config", "/etc/otel/config.yml"]
ports:
- "55888:55888" # Expose OTLP HTTP externally

View File

@@ -0,0 +1,36 @@
##############################################################################
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
##############################################################################
receivers:
otlp:
protocols:
http:
endpoint: 0.0.0.0:55888
exporters:
otlp:
endpoint: jaeger:4317
tls:
insecure: true
service:
pipelines:
traces:
receivers: [otlp]
exporters: [otlp]