Skip to content

[Operability] Restore bundled Zipkin tracing transport to the standard collector port #166

Description

@seonghobae

Buyer-visible / operator gap

Protected develop@622e5e6c3d534f230c390f10e3832efadfc01825 ships a bundled Docker Compose observability path that cannot reach the standard Zipkin HTTP collector as configured:

  • docker-compose.yml starts openzipkin/zipkin:2 and maps 9412:9412;
  • etl-service, cdc-service, and zuul-gateway each configure management.zipkin.tracing.endpoint as http://${ZIPKIN_HOST:localhost}:9412/api/v2/spans;
  • the official OpenZipkin Docker quick start and server documentation use port 9411 for the Zipkin server/HTTP API (docker run -p 9411:9411 openzipkin/zipkin; UI/API on 9411).

With the repository's default Compose topology, applications therefore target zipkin:9412 while the bundled Zipkin image's documented server port is 9411. This makes the default distributed-tracing control look configured while failing at the transport boundary.

Status: active_pr via Draft PR #167. Nothing in #167 is implemented_on_develop until protected integration.

Active remediation — PR #167

Fresh PR state keeps the bounded repair active on unchanged protected base develop@622e5e6c3d534f230c390f10e3832efadfc01825:

  • branch: fix/zipkin-compose-port-622e5e6;
  • exact current source head: 82228115235edffbb37ef3fb662d60acf84ddb6e;
  • Draft: true;
  • GitHub mergeability: true at the latest refresh;
  • requested reviewers/teams: none at the latest refresh;
  • diff remains limited to docker-compose.yml plus DockerComposeZipkinTransportTest.

The branch preserves a test-only RED at 8bf04b1a57e4c74d49bf880a52c2b16c7276f7f0, then the smallest GREEN production correction at current head 82228115235edffbb37ef3fb662d60acf84ddb6e:

  • keep historical host compatibility port 9412 while forwarding it to container/service collector port 9411 (9412:9411);
  • give ETL, CDC, and gateway explicit Compose-only MANAGEMENT_ZIPKIN_TRACING_ENDPOINT=http://zipkin:9411/api/v2/spans overrides;
  • leave ordinary non-Compose endpoint configuration externalizable.

Current PR evidence is not merge acceptance. CI 31336585539, Dependency Review 31336585553, CycloneDX SBOM 31336585533, and SAST Semgrep 31336585566 are green, but CI executed GitHub synthetic merge a9169f87fad964952ac73d4dac914f7ad5e82aa0 rather than literal source head. Security Scan 31336585531 is genuinely failed on inherited protected-base Jackson advisories and is owned by shared remediation PR #160 rather than by this Compose diff. The protected JaCoCo quality gate is also independently non-vacuous only after #162/#164 is accepted. CodeRabbit skipped review because #167 is Draft; no qualifying formal approval is inferred from that skip.

Therefore #167 remains active_pr, not planned, but also not merge-ready or shipped truth. After #160 and the shared source-identity/coverage controls integrate, the unchanged behavior must be revalidated against the new exact protected base; no old-head/base check or review transfers.

RCA

  • Immediate cause: repository-local Zipkin port constants drifted from the upstream server's documented 9411 transport.
  • Technical root cause: Compose host/container mapping and Spring tracing endpoints repeat the port independently, with no machine-checkable cross-file contract.
  • Control failure: no repository test proves that the bundled collector port and application exporter endpoints are mutually reachable.
  • Blast radius: tracing/latency diagnostics and acquisition/operability evidence for the bundled stack; ETL/CDC request processing itself remains independent.

Distinct bounded remedies

  1. Preferred: restore the bundled stack to standard Zipkin 9411 end-to-end. Map a compatibility host port only if required, but use container/service port 9411 and Spring exporter endpoints http://zipkin:9411/api/v2/spans inside the Compose network. Keep ordinary non-Compose configuration overrideable.
  2. Alternative: explicitly reconfigure the Zipkin server to listen on 9412. Execute only if current official OpenZipkin configuration documents that override and it is tested against the exact image; do not assume a generic environment variable works.
  3. Reject: leave 9412 on both sides and call startup success tracing evidence.
  4. Reject: add a fake always-green collector or disable tracing to make Compose tests pass.

TDD / acceptance

RED first at the shipped topology boundary, then the smallest product correction. Final acceptance must prove:

  • a machine-checkable repository test fails on the current 9412 mismatch;
  • the bundled Zipkin container is reachable on the documented HTTP collector port from service-network configuration;
  • ETL, CDC, and gateway exporter endpoints agree with that internal port;
  • any host-port compatibility mapping is clearly distinguished from the container/service port;
  • ordinary endpoints remain configurable through Spring Boot externalized configuration rather than introducing a secret or hard-coded remote collector;
  • no trace payload, credential, authorization header, raw principal, or PII is added to logs merely to test transport;
  • existing full Maven tests, coverage, dependency/SBOM/SAST/security gates remain intact;
  • operator/CHANGELOG documentation records the corrected default stack and rollback boundary;
  • exact-source/review/protected-merge evidence is regenerated for the final head.

Sequencing / writer safety

This slice is independent of the blocked durable-job stack and connector behavior. Avoid editing actively moving #149/#157/#163/#164 source branches. PR #167 owns docker-compose.yml while it remains active; other commercial-loop slices such as #169 must not race that path.

Primary references

OpenZipkin. (2026). Zipkin. Official repository quick start: docker run -d -p 9411:9411 openzipkin/zipkin and UI on port 9411. https://github.com/openzipkin/zipkin

OpenZipkin. (2026). Quickstart. Official Docker guidance uses 9411:9411. https://zipkin.io/pages/quickstart.html

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area: authAuthentication, authorization, identity, or tenant isolationarea: ci-cdCI, GitHub Actions, checks, release, or supply chainarea: dependenciesDependency or lockfile maintenancearea: securitySecurity boundary, hardening, or vulnerability preventionmaintenancepriority: mediumNormal-priority or P2 workstatus: blockedBlocked by conflict, dependency, or required prerequisitetype: featureNew or expanded product capability

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions