From 52aef04711ef72fac497c082eb5ce8cf984c7077 Mon Sep 17 00:00:00 2001 From: Becky Smith Date: Mon, 23 Feb 2026 17:30:18 +0000 Subject: [PATCH 1/7] Upgrade otel-collector and replace removed logging exporter --- services/otel-gateway/Dockerfile | 5 ++++- services/otel-gateway/config.yaml | 12 ++++++++---- services/otel-gateway/justfile | 1 + 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/services/otel-gateway/Dockerfile b/services/otel-gateway/Dockerfile index 1db2661..e8863d1 100644 --- a/services/otel-gateway/Dockerfile +++ b/services/otel-gateway/Dockerfile @@ -4,7 +4,7 @@ # # https://github.com/open-telemetry/opentelemetry-collector-releases/blob/main/distributions/otelcol/Dockerfile # -FROM otel/opentelemetry-collector-contrib:0.110.0 +FROM otel/opentelemetry-collector-contrib:0.146.0 LABEL org.opencontainers.image.authors="tech@opensafely.org" \ org.opencontainers.image.url="opensafely.org" \ @@ -14,7 +14,10 @@ LABEL org.opencontainers.image.authors="tech@opensafely.org" \ # default config, can be overridden at runtime ENV HONEYCOMB_ENDPOINT="https://api.honeycomb.io" ENV METRICS_DATASET="jobrunner-metrics" +# log level for the collector's telemetry ENV LOG_LEVEL="info" +# verbosity level for the debug exporter +ENV LOG_VERBOSITY="normal" # these must be provided at runtime # ENV HONEYCOMB_KEY diff --git a/services/otel-gateway/config.yaml b/services/otel-gateway/config.yaml index 37a2ead..f5f780a 100644 --- a/services/otel-gateway/config.yaml +++ b/services/otel-gateway/config.yaml @@ -18,8 +18,12 @@ processors: batch: exporters: - logging: - loglevel: "${LOG_LEVEL}" + # The debug exporter replaces the old logging exporter and takes a verbosity + # argument instead of a log level (detailed/normal/basic vs debug/info/warn). + # https://github.com/open-telemetry/opentelemetry-collector/issues/11337 + # https://github.com/open-telemetry/opentelemetry-collector/tree/main/exporter/debugexporter + debug: + verbosity: "${LOG_VERBOSITY}" otlphttp/traces: endpoint: "${HONEYCOMB_ENDPOINT}" @@ -44,8 +48,8 @@ service: traces: receivers: [otlp] processors: [batch] - exporters: [otlphttp/traces, logging] + exporters: [otlphttp/traces, debug] metrics: receivers: [otlp] processors: [batch] - exporters: [otlphttp/metrics, logging] + exporters: [otlphttp/metrics, debug] diff --git a/services/otel-gateway/justfile b/services/otel-gateway/justfile index f025082..543fa41 100644 --- a/services/otel-gateway/justfile +++ b/services/otel-gateway/justfile @@ -146,6 +146,7 @@ test-ci: _checkenv _mock_honeycomb_start && _mock_honeycomb_stop {{ just_executable() }} run -d \ -e HONEYCOMB_ENDPOINT \ -e LOG_LEVEL=debug \ + -e LOG_VERBOSITY=detailed \ -p 4318:4318 \ --add-host=host.docker.internal:host-gateway From 3497dc091f7c6db2fc81659b85eceebf4424977c Mon Sep 17 00:00:00 2001 From: Becky Smith Date: Tue, 24 Feb 2026 10:48:19 +0000 Subject: [PATCH 2/7] Reinstate removing mock-honeycomb and otel-gateway containers in tests Accidentally removed in previous commit https://github.com/opensafely-core/sysadmin/commit/685cabad6a3bb7f067effe19d5ea51f5edbaa2b6 --- services/otel-gateway/justfile | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/services/otel-gateway/justfile b/services/otel-gateway/justfile index 543fa41..93fc10b 100644 --- a/services/otel-gateway/justfile +++ b/services/otel-gateway/justfile @@ -98,7 +98,8 @@ build: _dotenv # run the gateway, in the foreground by default. run *args: _checkenv build - docker run --rm --name otel-gateway \ + docker rm --force otel-gateway 2>/dev/null || true + docker run --name otel-gateway \ -e BASIC_AUTH_USER=$BASIC_AUTH_USER \ -e BASIC_AUTH_PASSWORD=$BASIC_AUTH_PASSWORD \ -e HONEYCOMB_KEY \ @@ -123,7 +124,9 @@ _mock_honeycomb_start: # run a different instance of a collector as a test endpoint docker network create otel-test-net 2>/dev/null || true - docker run --rm -d -p 4319:4318 \ + + docker rm --force mock-honeycomb 2>/dev/null || true + docker run -d -p 4319:4318 \ --name mock-honeycomb -u "$(id -u):$(id -g)" \ -v $PWD/mock-honeycomb-config.yaml:/etc/otelcol-contrib/config.yaml \ -v $PWD/exported/honeycomb:/exported \ @@ -133,7 +136,6 @@ _mock_honeycomb_start: _mock_honeycomb_stop: docker stop mock-honeycomb - docker network remove otel-test-net # run tests against mock upstream servers test-ci: _checkenv _mock_honeycomb_start && _mock_honeycomb_stop From 1c4dda06b93560d8b10dd825755897491414cf75 Mon Sep 17 00:00:00 2001 From: Becky Smith Date: Tue, 24 Feb 2026 10:49:44 +0000 Subject: [PATCH 3/7] Bump version of opentelemetry-collector-contrib used as test endpoint Only bumps to v0.69.0; 0.70.0+ results in a connection error --- services/otel-gateway/justfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/otel-gateway/justfile b/services/otel-gateway/justfile index 93fc10b..2750333 100644 --- a/services/otel-gateway/justfile +++ b/services/otel-gateway/justfile @@ -131,7 +131,7 @@ _mock_honeycomb_start: -v $PWD/mock-honeycomb-config.yaml:/etc/otelcol-contrib/config.yaml \ -v $PWD/exported/honeycomb:/exported \ --network=otel-test-net \ - otel/opentelemetry-collector-contrib:0.62.1 + otel/opentelemetry-collector-contrib:0.69.0 test "$(docker inspect mock-honeycomb -f '{{{{.State.Status}}')" == "running" || { docker logs mock-honeycomb; exit 1; } _mock_honeycomb_stop: From c60c8f964e149db344b785369759cd8abe655cd5 Mon Sep 17 00:00:00 2001 From: bloodearnest Date: Thu, 26 Feb 2026 13:04:31 +0000 Subject: [PATCH 4/7] Upgrade mock honeycomb collector to same version as main. This required a number of small changes due to differences in the big version bump 1) add check have to wait for the collector to come up before starting tests. This involved exposing the default healthcheck url, but a) it's not exposed externally (different port), and b) we can use that in dokkku deploys (later commit) 2) The fileexporter now buffers writes, and flushes to disk after 1s by default. The tests need changing to wait for the file to be written. Added a more explicit file related error message to for future us. 3) The json fileformat is NDJSON, but we were not properly handling that, so we now do. 4) Update to lateset config; switch logging to debug, and bind to 0.0.0.0 explicitly, as the default changed to 127.0.0.1 --- services/otel-gateway/config.yaml | 5 ++++- services/otel-gateway/justfile | 14 +++++++++++++- services/otel-gateway/mock-honeycomb-config.yaml | 11 +++++++---- services/otel-gateway/tests.py | 10 +++++++--- 4 files changed, 31 insertions(+), 9 deletions(-) diff --git a/services/otel-gateway/config.yaml b/services/otel-gateway/config.yaml index f5f780a..c78f74a 100644 --- a/services/otel-gateway/config.yaml +++ b/services/otel-gateway/config.yaml @@ -5,6 +5,9 @@ extensions: htpasswd: inline: | ${BASIC_AUTH_USER}:${BASIC_AUTH_PASSWORD} + health_check: + endpoint: 0.0.0.0:13133 + path: /healthz receivers: otlp: @@ -43,7 +46,7 @@ service: telemetry: logs: level: "${LOG_LEVEL}" - extensions: [basicauth/server] + extensions: [basicauth/server, health_check] pipelines: traces: receivers: [otlp] diff --git a/services/otel-gateway/justfile b/services/otel-gateway/justfile index 2750333..79f12bb 100644 --- a/services/otel-gateway/justfile +++ b/services/otel-gateway/justfile @@ -116,6 +116,16 @@ test-integration: _checkenv echo "Data sent to honeycomb" echo "https://ui.honeycomb.io/bennett-institute-for-applied-data-science/environments/development/datasets/otel-gateway-tests?query=%7B%22time_range%22%3A600%2C%22granularity%22%3A0%2C%22breakdowns%22%3A%5B%5D%2C%22calculations%22%3A%5B%5D%2C%22orders%22%3A%5B%5D%2C%22havings%22%3A%5B%5D%2C%22limit%22%3A100%7D" +_wait_for_health container url: + #!/bin/bash + set -euo pipefail + + if ! curl -fsS --retry 20 --retry-delay 1 --retry-connrefused --retry-all-errors "{{ url }}" >/dev/null 2>&1; then + echo "{{ container }} did not become healthy in time: {{ url }}" + docker logs "{{ container }}" + exit 1 + fi + _mock_honeycomb_start: #!/bin/bash set -euo pipefail @@ -131,7 +141,7 @@ _mock_honeycomb_start: -v $PWD/mock-honeycomb-config.yaml:/etc/otelcol-contrib/config.yaml \ -v $PWD/exported/honeycomb:/exported \ --network=otel-test-net \ - otel/opentelemetry-collector-contrib:0.69.0 + otel/opentelemetry-collector-contrib:0.146.0 test "$(docker inspect mock-honeycomb -f '{{{{.State.Status}}')" == "running" || { docker logs mock-honeycomb; exit 1; } _mock_honeycomb_stop: @@ -150,9 +160,11 @@ test-ci: _checkenv _mock_honeycomb_start && _mock_honeycomb_stop -e LOG_LEVEL=debug \ -e LOG_VERBOSITY=detailed \ -p 4318:4318 \ + -p 13133:13133 \ --add-host=host.docker.internal:host-gateway test "$(docker inspect otel-gateway -f '{{{{.State.Status}}')" == "running" || { docker logs otel-gateway; exit 1; } + {{ just_executable() }} _wait_for_health otel-gateway "http://127.0.0.1:13133/healthz" {{ just_executable() }} run-python -m pytest tests.py docker stop otel-gateway diff --git a/services/otel-gateway/mock-honeycomb-config.yaml b/services/otel-gateway/mock-honeycomb-config.yaml index 7898935..d3167a1 100644 --- a/services/otel-gateway/mock-honeycomb-config.yaml +++ b/services/otel-gateway/mock-honeycomb-config.yaml @@ -2,15 +2,18 @@ receivers: otlp: protocols: http: + endpoint: 0.0.0.0:4318 processors: batch: exporters: - logging: - logLevel: debug + debug: + verbosity: detailed file/traces: path: /exported/traces.json + # In collector 0.70.0+, non-rotation file writer is buffered and may not + # flush within the test timeout. Explicit rotation keeps writes visible. file/metrics: path: /exported/metrics.json @@ -22,8 +25,8 @@ service: traces: receivers: [otlp] processors: [batch] - exporters: [file/traces, logging] + exporters: [file/traces, debug] metrics: receivers: [otlp] processors: [batch] - exporters: [file/metrics, logging] + exporters: [file/metrics, debug] diff --git a/services/otel-gateway/tests.py b/services/otel-gateway/tests.py index 5aeb97e..c6ecfca 100644 --- a/services/otel-gateway/tests.py +++ b/services/otel-gateway/tests.py @@ -54,9 +54,9 @@ def generate_test_metric(): def get_output(path): - # wait for file to be written to, typically a few hundred 100ms + # Wait for the exporter to create and write the file. timeout_count = 0 - while path.exists() and path.stat().st_size == 0: + while (not path.exists()) or path.stat().st_size == 0: time.sleep(0.01) timeout_count = timeout_count + 1 if timeout_count > 500: @@ -64,7 +64,11 @@ def get_output(path): "Test timed out - no output written to file after 5 seconds" ) - return json.loads(path.read_text()) + # file exporter writes one JSON object per line (ndjson); read the latest. + lines = [line for line in path.read_text().splitlines() if line.strip()] + if not lines: + raise Exception("Test timed out - output file was empty") + return json.loads(lines[-1]) def service_name_helper(resource_attributes): From a662f95d29499d396510374a577893b5fdfa151a Mon Sep 17 00:00:00 2001 From: bloodearnest Date: Thu, 26 Feb 2026 18:17:07 +0000 Subject: [PATCH 5/7] Move to using docker-compose to manage the test infrastructure This removes some manual process management from the justfile Also allowed us to easy re-use the base image, so that the mock-honeycomb and otel-gateway services will always use the same version of otel-collector --- services/otel-gateway/Dockerfile | 6 ++- services/otel-gateway/docker-compose.yml | 39 ++++++++++++++ services/otel-gateway/justfile | 65 +++++++++--------------- 3 files changed, 68 insertions(+), 42 deletions(-) create mode 100644 services/otel-gateway/docker-compose.yml diff --git a/services/otel-gateway/Dockerfile b/services/otel-gateway/Dockerfile index e8863d1..3869c28 100644 --- a/services/otel-gateway/Dockerfile +++ b/services/otel-gateway/Dockerfile @@ -1,10 +1,12 @@ # we use the contrib image for basicauth and other bits # # This image is build FROM scratch, so doesn't include *any* tools: -# +# # https://github.com/open-telemetry/opentelemetry-collector-releases/blob/main/distributions/otelcol/Dockerfile # -FROM otel/opentelemetry-collector-contrib:0.146.0 +FROM otel/opentelemetry-collector-contrib:0.146.0 AS otelcol-base + +FROM otelcol-base AS otel-gateway LABEL org.opencontainers.image.authors="tech@opensafely.org" \ org.opencontainers.image.url="opensafely.org" \ diff --git a/services/otel-gateway/docker-compose.yml b/services/otel-gateway/docker-compose.yml new file mode 100644 index 0000000..e8be830 --- /dev/null +++ b/services/otel-gateway/docker-compose.yml @@ -0,0 +1,39 @@ +services: + otel-gateway: + build: + context: . + target: otel-gateway + image: otel-gateway + environment: + BASIC_AUTH_USER: ${BASIC_AUTH_USER} + BASIC_AUTH_PASSWORD: ${BASIC_AUTH_PASSWORD} + HONEYCOMB_KEY: ${HONEYCOMB_KEY} + HONEYCOMB_ENDPOINT: ${HONEYCOMB_ENDPOINT:-https://api.honeycomb.io} + LOG_LEVEL: ${LOG_LEVEL:-info} + LOG_VERBOSITY: ${LOG_VERBOSITY:-normal} + ports: + # otlp + - "4318:4318" + # http health check + - "13133:13133" + extra_hosts: + - "host.docker.internal:host-gateway" + networks: + - otel-test-net + + mock-honeycomb: + build: + context: . + target: otelcol-base + image: otel-gateway-mock + user: "${LOCAL_UID:-1000}:${LOCAL_GID:-1000}" + volumes: + - ./mock-honeycomb-config.yaml:/etc/otelcol-contrib/config.yaml:ro + - ./exported/honeycomb:/exported + ports: + - "4319:4318" + networks: + - otel-test-net + +networks: + otel-test-net: diff --git a/services/otel-gateway/justfile b/services/otel-gateway/justfile index 79f12bb..4260aed 100644 --- a/services/otel-gateway/justfile +++ b/services/otel-gateway/justfile @@ -1,6 +1,5 @@ set dotenv-load := true -export IMAGE_NAME := "otel-gateway" export DOCKER_BUILDKIT := "1" # list available commands @@ -94,35 +93,37 @@ fix: # build the docker image build: _dotenv - docker build . -t $IMAGE_NAME + docker compose build otel-gateway # run the gateway, in the foreground by default. run *args: _checkenv build - docker rm --force otel-gateway 2>/dev/null || true - docker run --name otel-gateway \ - -e BASIC_AUTH_USER=$BASIC_AUTH_USER \ - -e BASIC_AUTH_PASSWORD=$BASIC_AUTH_PASSWORD \ - -e HONEYCOMB_KEY \ - --network=otel-test-net \ - {{ args }} {{ IMAGE_NAME }} + #!/bin/bash + set -euo pipefail + + docker compose up --force-recreate --no-deps {{ args }} otel-gateway # run integration test. You will need a HONEYCOMB_KEY set in the environment test-integration: _checkenv #!/bin/bash set -euo pipefail - {{ just_executable() }} run -d -e LOG_LEVEL=debug -p 4318:4318 + trap 'docker compose stop otel-gateway >/dev/null 2>&1 || true' EXIT + + export LOG_LEVEL=debug + docker compose up -d --build --force-recreate --no-deps otel-gateway + docker compose ps --status running --services | grep -qx otel-gateway || { docker compose logs otel-gateway; exit 1; } + {{ just_executable() }} _wait_for_health otel-gateway "http://127.0.0.1:13133/healthz" {{ just_executable() }} run-python tests.py echo "Data sent to honeycomb" echo "https://ui.honeycomb.io/bennett-institute-for-applied-data-science/environments/development/datasets/otel-gateway-tests?query=%7B%22time_range%22%3A600%2C%22granularity%22%3A0%2C%22breakdowns%22%3A%5B%5D%2C%22calculations%22%3A%5B%5D%2C%22orders%22%3A%5B%5D%2C%22havings%22%3A%5B%5D%2C%22limit%22%3A100%7D" -_wait_for_health container url: +_wait_for_health service url: #!/bin/bash set -euo pipefail if ! curl -fsS --retry 20 --retry-delay 1 --retry-connrefused --retry-all-errors "{{ url }}" >/dev/null 2>&1; then - echo "{{ container }} did not become healthy in time: {{ url }}" - docker logs "{{ container }}" + echo "{{ service }} did not become healthy in time: {{ url }}" + docker compose logs "{{ service }}" exit 1 fi @@ -132,43 +133,27 @@ _mock_honeycomb_start: mkdir -p exported/honeycomb - # run a different instance of a collector as a test endpoint - docker network create otel-test-net 2>/dev/null || true - - docker rm --force mock-honeycomb 2>/dev/null || true - docker run -d -p 4319:4318 \ - --name mock-honeycomb -u "$(id -u):$(id -g)" \ - -v $PWD/mock-honeycomb-config.yaml:/etc/otelcol-contrib/config.yaml \ - -v $PWD/exported/honeycomb:/exported \ - --network=otel-test-net \ - otel/opentelemetry-collector-contrib:0.146.0 - test "$(docker inspect mock-honeycomb -f '{{{{.State.Status}}')" == "running" || { docker logs mock-honeycomb; exit 1; } + # Start both collectors for CI in one compose call. + LOCAL_UID="$(id -u)" \ + LOCAL_GID="$(id -g)" \ + HONEYCOMB_ENDPOINT="http://mock-honeycomb:4318" \ + LOG_LEVEL=debug \ + LOG_VERBOSITY=detailed \ + docker compose up -d --build --force-recreate mock-honeycomb otel-gateway + docker compose ps --status running --services | grep -qx mock-honeycomb || { docker compose logs mock-honeycomb; exit 1; } + docker compose ps --status running --services | grep -qx otel-gateway || { docker compose logs otel-gateway; exit 1; } + {{ just_executable() }} _wait_for_health otel-gateway "http://127.0.0.1:13133/healthz" _mock_honeycomb_stop: - docker stop mock-honeycomb + docker compose stop otel-gateway mock-honeycomb # run tests against mock upstream servers test-ci: _checkenv _mock_honeycomb_start && _mock_honeycomb_stop #!/bin/bash set -euo pipefail - export HONEYCOMB_ENDPOINT="http://mock-honeycomb:4318" - - # run otel-gateway pointing at the test endpoint - {{ just_executable() }} run -d \ - -e HONEYCOMB_ENDPOINT \ - -e LOG_LEVEL=debug \ - -e LOG_VERBOSITY=detailed \ - -p 4318:4318 \ - -p 13133:13133 \ - --add-host=host.docker.internal:host-gateway - - test "$(docker inspect otel-gateway -f '{{{{.State.Status}}')" == "running" || { docker logs otel-gateway; exit 1; } - {{ just_executable() }} _wait_for_health otel-gateway "http://127.0.0.1:13133/healthz" {{ just_executable() }} run-python -m pytest tests.py - docker stop otel-gateway - # run a python script in the correct environment run-python *args: _checkenv #!/bin/bash From bd2cf776c6a4887cc24791493d9cc53fb26fc570 Mon Sep 17 00:00:00 2001 From: bloodearnest Date: Thu, 26 Feb 2026 19:58:13 +0000 Subject: [PATCH 6/7] Add a dokku health check for better deploys Since we added healthcheck url, we might was well use it. --- services/otel-gateway/Dockerfile | 4 ++++ services/otel-gateway/README.md | 13 +++++++++++++ services/otel-gateway/app.json | 14 ++++++++++++++ 3 files changed, 31 insertions(+) create mode 100644 services/otel-gateway/app.json diff --git a/services/otel-gateway/Dockerfile b/services/otel-gateway/Dockerfile index 3869c28..354d6c7 100644 --- a/services/otel-gateway/Dockerfile +++ b/services/otel-gateway/Dockerfile @@ -26,4 +26,8 @@ ENV LOG_VERBOSITY="normal" # ENV BASIC_AUTH_USER # ENV BASIC_AUTH_PASSWORD +# app.json must be in the WORKDIR, so make the implicit /app explict +WORKDIR /app + +COPY app.json /app/app.json COPY config.yaml /etc/otelcol-contrib/config.yaml diff --git a/services/otel-gateway/README.md b/services/otel-gateway/README.md index 4203c35..4dcab85 100644 --- a/services/otel-gateway/README.md +++ b/services/otel-gateway/README.md @@ -83,6 +83,19 @@ dokku git:from-image otel-gateway ghcr.io/opensafely-core/otel-gateway:latest dokku logs otel-gateway ``` +## Health checks + +Dokku deploy checks are configured in [`app.json`](app.json) using the collector +health endpoint at `:13133/healthz`. The file is copied into the image during +build so `dokku git:from-image` can use it. + +Useful commands on dokku: + +```bash +dokku checks:report otel-gateway +dokku checks:run otel-gateway +``` + ## Dokku app set up diff --git a/services/otel-gateway/app.json b/services/otel-gateway/app.json new file mode 100644 index 0000000..fbc3483 --- /dev/null +++ b/services/otel-gateway/app.json @@ -0,0 +1,14 @@ +{ + "healthchecks": { + "web": [ + { + "type": "startup", + "path": "/healthz", + "port": 13133, + "wait": 2, + "timeout": 5, + "attempts": 15 + } + ] + } +} From 1e078999fb934bd611edf0815b527e9cb61d10f9 Mon Sep 17 00:00:00 2001 From: bloodearnest Date: Tue, 3 Mar 2026 10:26:32 +0000 Subject: [PATCH 7/7] Remove old comment, and tweak env vars in justfile for consistency --- services/otel-gateway/justfile | 19 +++++++++++-------- .../otel-gateway/mock-honeycomb-config.yaml | 2 -- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/services/otel-gateway/justfile b/services/otel-gateway/justfile index 4260aed..03aba87 100644 --- a/services/otel-gateway/justfile +++ b/services/otel-gateway/justfile @@ -2,6 +2,10 @@ set dotenv-load := true export DOCKER_BUILDKIT := "1" +# when runnign via just, ensure we have detail logs for debugging tests +export LOG_LEVEL := "debug" +export LOG_VERBOSITY := "detailed" + # list available commands default: @"{{ just_executable() }}" --list @@ -109,7 +113,6 @@ test-integration: _checkenv trap 'docker compose stop otel-gateway >/dev/null 2>&1 || true' EXIT - export LOG_LEVEL=debug docker compose up -d --build --force-recreate --no-deps otel-gateway docker compose ps --status running --services | grep -qx otel-gateway || { docker compose logs otel-gateway; exit 1; } {{ just_executable() }} _wait_for_health otel-gateway "http://127.0.0.1:13133/healthz" @@ -133,12 +136,13 @@ _mock_honeycomb_start: mkdir -p exported/honeycomb - # Start both collectors for CI in one compose call. - LOCAL_UID="$(id -u)" \ - LOCAL_GID="$(id -g)" \ - HONEYCOMB_ENDPOINT="http://mock-honeycomb:4318" \ - LOG_LEVEL=debug \ - LOG_VERBOSITY=detailed \ + # we need these so we can read/write the files as the right user + export LOCAL_UID="$(id -u)" + export LOCAL_GID="$(id -g)" + + # point otel-gateway at the mock instance. + export HONEYCOMB_ENDPOINT="http://mock-honeycomb:4318" + docker compose up -d --build --force-recreate mock-honeycomb otel-gateway docker compose ps --status running --services | grep -qx mock-honeycomb || { docker compose logs mock-honeycomb; exit 1; } docker compose ps --status running --services | grep -qx otel-gateway || { docker compose logs otel-gateway; exit 1; } @@ -161,7 +165,6 @@ run-python *args: _checkenv TOKEN=$(echo -n "$BASIC_AUTH_USER:$BASIC_AUTH_PASSWORD" | base64) - export OTEL_EXPORTER_OTLP_ENDPOINT="http://127.0.0.1:4318" export OTEL_EXPORTER_OTLP_HEADERS="Authorization=Basic%20$TOKEN" export OTEL_SERVICE_NAME="otel-gateway-tests" diff --git a/services/otel-gateway/mock-honeycomb-config.yaml b/services/otel-gateway/mock-honeycomb-config.yaml index d3167a1..43e1734 100644 --- a/services/otel-gateway/mock-honeycomb-config.yaml +++ b/services/otel-gateway/mock-honeycomb-config.yaml @@ -12,8 +12,6 @@ exporters: verbosity: detailed file/traces: path: /exported/traces.json - # In collector 0.70.0+, non-rotation file writer is buffered and may not - # flush within the test timeout. Explicit rotation keeps writes visible. file/metrics: path: /exported/metrics.json