Skip to content

Add Zipkin Virtual GenAI e2e test with zipkin_json exporter#13784

Merged
wu-sheng merged 1 commit intomasterfrom
feature/zipkin-virtual-genai-e2e
Apr 2, 2026
Merged

Add Zipkin Virtual GenAI e2e test with zipkin_json exporter#13784
wu-sheng merged 1 commit intomasterfrom
feature/zipkin-virtual-genai-e2e

Conversation

@wu-sheng
Copy link
Copy Markdown
Member

@wu-sheng wu-sheng commented Apr 2, 2026

Add Zipkin Virtual GenAI e2e test

This is an alternative to #13781 (cc @peachisai). It adds the same Zipkin Virtual GenAI e2e test but fixes the pip dependency conflict properly.

Root cause: why single vs multiple pip install matters

The original PR #13781 used separate pip install commands (one per package) to work around a build failure. Here's why:

Single pip install (all packages in one command) — pip resolves all dependency constraints simultaneously and fails with ResolutionImpossible because:

  • opentelemetry-exporter-zipkin-proto-http requires protobuf ~= 3.12 (i.e., >=3.12, <4.0)
  • opentelemetry-proto (pulled by opentelemetry-exporter-otlp-proto-grpc) requires protobuf >= 5.0

These two constraints are mathematically irreconcilable — no protobuf version can satisfy both.

Multiple pip install (separate commands) — pip resolves each package independently, and later installs silently overwrite transitive dependencies from earlier installs. This "succeeds" but creates a broken environment where pip check reports violations:

  • opentelemetry-proto requires protobuf>=5.0, but protobuf==3.20.3 is installed
  • googleapis-common-protos requires protobuf>=4.25.8, but protobuf==3.20.3 is installed

The split install only works at runtime by accident — the zipkin code path doesn't import from opentelemetry-proto.

Fix

Use OTEL_TRACES_EXPORTER=zipkin_json instead of zipkin. The zipkin entry point maps to opentelemetry-exporter-zipkin-proto-http (protobuf format), while zipkin_json maps to opentelemetry-exporter-zipkin-json (JSON format) which has no protobuf dependency.

  • Remove opentelemetry-exporter-zipkin (meta-package) and opentelemetry-exporter-zipkin-proto-http from Dockerfile
  • Keep opentelemetry-exporter-zipkin-json — single pip install, clean dependencies, pip check passes
  • SkyWalking's zipkin receiver accepts both JSON and protobuf on the same /api/v2/spans endpoint

Locally verified end-to-end: OAP with BanyanDB receives spans via zipkin_json, creates VIRTUAL_GENAI service (openai), registers model instance (gpt-4.1-mini-2025-04-14), and populates all GenAI metrics (CPM, SLA, response time, token counts, estimated cost).

  • Tests(including UT, IT, E2E) are added to verify the new feature.
  • Update the CHANGES log.

Use zipkin_json exporter instead of zipkin (proto-http) to avoid
irreconcilable protobuf dependency conflict:
- opentelemetry-exporter-zipkin-proto-http requires protobuf~=3.12 (<4.0)
- opentelemetry-proto requires protobuf>=5.0

Remove opentelemetry-exporter-zipkin and opentelemetry-exporter-zipkin-proto-http
from Dockerfile, keep opentelemetry-exporter-zipkin-json for clean single
pip install with no dependency conflicts.
@wu-sheng
Copy link
Copy Markdown
Member Author

wu-sheng commented Apr 2, 2026

@peachisai This should work, let's see.

@wu-sheng wu-sheng added the test Test requirements about performance, feature or before release. label Apr 2, 2026
@wu-sheng wu-sheng added this to the 10.5.0 milestone Apr 2, 2026
@wu-sheng wu-sheng merged commit ea1c23c into master Apr 2, 2026
416 of 419 checks passed
@wu-sheng wu-sheng deleted the feature/zipkin-virtual-genai-e2e branch April 2, 2026 09:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

test Test requirements about performance, feature or before release.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants