jenkinsci / opentelemetry-plugin

Monitor and observe Jenkins with OpenTelemetry.
https://plugins.jenkins.io/opentelemetry/
Apache License 2.0
100 stars 54 forks source link

Make otel.propagators=jaeger possible #657

Closed stmlange closed 1 year ago

stmlange commented 1 year ago

Jenkins and plugins versions report

Environment ```text Jenkins: 2.387.3 OS: Linux - 5.4.0-91-generic Java: 11.0.19 - Eclipse Adoptium (OpenJDK 64-Bit Server VM) --- Office-365-Connector:4.18.0 ace-editor:1.1 analysis-model-api:11.2.0 ant:487.vd79d090d4ea_e antisamy-markup-formatter:159.v25b_c67cd35fb_ apache-httpcomponents-client-4-api:4.5.14-150.v7a_b_9d17134a_5 authentication-tokens:1.53.v1c90fd9191a_b_ badge:1.9.1 blueocean:1.27.4 blueocean-autofavorite:1.2.5 blueocean-bitbucket-pipeline:1.27.4 blueocean-commons:1.27.4 blueocean-config:1.27.4 blueocean-core-js:1.27.4 blueocean-dashboard:1.27.4 blueocean-display-url:2.4.2 blueocean-events:1.27.4 blueocean-git-pipeline:1.27.4 blueocean-github-pipeline:1.27.4 blueocean-i18n:1.27.4 blueocean-jira:1.27.4 blueocean-jwt:1.27.4 blueocean-personalization:1.27.4 blueocean-pipeline-api-impl:1.27.4 blueocean-pipeline-editor:1.27.4 blueocean-pipeline-scm-api:1.27.4 blueocean-rest:1.27.4 blueocean-rest-impl:1.27.4 blueocean-web:1.27.4 bootstrap4-api:4.6.0-5 bootstrap5-api:5.2.2-3 bouncycastle-api:2.27 branch-api:2.1092.vda_3c2a_a_f0c11 build-blocker-plugin:1.7.8 build-name-setter:2.2.0 build-timeout:1.30 build-token-root:151.va_e52fe3215fc caffeine-api:3.1.6-115.vb_8b_b_328e59d8 checks-api:2.0.0 cloudbees-bitbucket-branch-source:800.va_b_b_9a_a_5035c1 cloudbees-folder:6.815.v0dd5a_cb_40e0e command-launcher:100.v2f6722292ee8 commons-httpclient3-api:3.1-3 commons-lang3-api:3.12.0-36.vd97de6465d5b_ commons-text-api:1.10.0-36.vc008c8fcda_7b_ compact-columns:1.169.v60b_7d496b_860 conditional-buildstep:1.4.2 copyartifact:698.v393f578eb_ddc credentials:1254.vb_96f366e7b_a_d credentials-binding:604.vb_64480b_c56ca_ data-tables-api:1.13.3-3 declarative-pipeline-migration-assistant:1.5.6 declarative-pipeline-migration-assistant-api:1.5.6 display-url-api:2.3.7 docker-commons:419.v8e3cd84ef49c docker-java-api:3.2.13-68.va_875df25a_b_45 docker-plugin:1.3.0 docker-workflow:563.vd5d2e5c4007f durable-task:507.v050055d0cb_dd echarts-api:5.4.0-3 email-ext:2.97 envinject:2.901.v0038b_6471582 envinject-api:1.199.v3ce31253ed13 extended-choice-parameter:373.v1a_ecea_fdf2a_a_ external-monitor-job:203.v683c09d993b_9 extra-columns:1.25 favorite:2.4.2 flexible-publish:0.16.1 font-awesome-api:6.3.0-2 forensics-api:2.1.0 git:5.0.2 git-client:4.2.0 git-server:99.va_0826a_b_cdfa_d github:1.37.1 github-api:1.314-431.v78d72a_3fe4c3 github-branch-source:1703.vd5a_2b_29c6cdc gitlab-api:5.2.0-86.v1ed41a_9cf486 gitlab-branch-source:659.va_685a_51fda_db_ gitlab-plugin:1.7.13 gradle:2.7 groovy:453.vcdb_a_c5c99890 groovy-postbuild:2.5 handlebars:3.0.8 handy-uri-templates-2-api:2.1.8-22.v77d5b_75e6953 htmlpublisher:1.31 instance-identity:142.v04572ca_5b_265 ionicons-api:45.vf54fca_5d2154 jackson2-api:2.15.1-344.v6eb_55303dc3e jacoco:3.3.3 jakarta-activation-api:2.0.1-3 jakarta-mail-api:2.0.1-3 javadoc:233.vdc1a_ec702cff javax-activation-api:1.2.0-6 javax-mail-api:1.6.2-9 jaxb:2.3.8-1 jdk-tool:66.vd8fa_64ee91b_d jenkins-design-language:1.27.4 jersey2-api:2.39.1-1 jira:3.9 jjwt-api:0.11.5-77.v646c772fddb_0 job-dsl:1.83 job-import-plugin:3.6 jobConfigHistory:1207.vd28a_54732f92 jquery:1.12.4-1 jquery-detached:1.2.1 jquery3-api:3.6.4-1 jsch:0.2.8-65.v052c39de79b_2 junit:1202.v79a_986785076 ldap:682.v7b_544c9d1512 lockable-resources:1156.v5e9f897ece02 mailer:448.v5b_97805e3767 mapdb-api:1.0.9-28.vf251ce40855d matrix-auth:3.1.7 matrix-project:789.v57a_725b_63c79 maven-plugin:3.22 mercurial:1260.vdfb_723cdcc81 mina-sshd-api-common:2.10.0-69.v28e3e36d18eb_ mina-sshd-api-core:2.10.0-69.v28e3e36d18eb_ momentjs:1.1.1 multiple-scms:0.8 naginator:1.18.2 okhttp-api:4.10.0-132.v7a_7b_91cef39c opentelemetry:2.13.0 ownership:0.13.0 pam-auth:1.10 parameterized-trigger:2.45 pipeline-build-step:491.v1fec530da_858 pipeline-github-lib:42.v0739460cda_c4 pipeline-graph-analysis:202.va_d268e64deb_3 pipeline-groovy-lib:656.va_a_ceeb_6ffb_f7 pipeline-input-step:468.va_5db_051498a_4 pipeline-milestone-step:111.v449306f708b_7 pipeline-model-api:2.2131.vb_9788088fdb_5 pipeline-model-declarative-agent:1.1.1 pipeline-model-definition:2.2131.vb_9788088fdb_5 pipeline-model-extensions:2.2131.vb_9788088fdb_5 pipeline-rest-api:2.32 pipeline-stage-step:305.ve96d0205c1c6 pipeline-stage-tags-metadata:2.2131.vb_9788088fdb_5 pipeline-stage-view:2.32 pipeline-utility-steps:2.15.3 plain-credentials:143.v1b_df8b_d3b_e48 plot:2.1.12 plugin-util-api:3.2.1 popper-api:1.16.1-3 popper2-api:2.11.6-2 preSCMbuildstep:71.v1f2990a_37e27 prism-api:1.29.0-5 promoted-builds:892.vd6219fc0a_efb pubsub-light:1.17 resource-disposer:0.22 robot:3.3.0 role-strategy:633.v836e5b_3e80a_5 run-condition:1.5 scm-api:672.v64378a_b_20c60 scm-sync-configuration:0.0.11-SNAPSHOT (private-a8c53d6f-pjohnston) script-security:1244.ve463715a_f89c snakeyaml-api:1.33-95.va_b_a_e3e47b_fa_4 sse-gateway:1.26 ssh-agent:333.v878b_53c89511 ssh-credentials:305.v8f4381501156 ssh-slaves:2.877.v365f5eb_a_b_eec sshd:3.303.vefc7119b_ec23 startup-trigger-plugin:2.9.3 structs:324.va_f5d6774f3a_d subversion:2.17.2 timestamper:1.25 token-macro:359.vb_cde11682e0c trilead-api:2.84.v72119de229b_7 variant:59.vf075fe829ccb warnings-ng:10.1.0 windows-slaves:1.8.1 workflow-aggregator:596.v8c21c963d92d workflow-api:1213.v646def1087f9 workflow-basic-steps:1017.vb_45b_302f0cea_ workflow-cps:3659.v582dc37621d8 workflow-cps-global-lib:609.vd95673f149b_b workflow-durable-task-step:1246.v5524618ea_097 workflow-job:1295.v395eb_7400005 workflow-multibranch:746.v05814d19c001 workflow-scm-step:408.v7d5b_135a_b_d49 workflow-step-api:639.v6eca_cd8c04a_a_ workflow-support:839.v35e2736cfd5c ws-cleanup:0.45 ```

What Operating System are you using (both controller, and any agents involved in the problem)?

Linux

Reproduction steps

Go to $JENKINS_URL/manage/configure -> OTEL -> Advanced -> Configuration properties Add

otel.propagators=jaeger

save

Expected Results

No problem(s).

Actual Results

Jenkins complains when submitting the configuration and the log reveals:

Caught unhandled exception with ID ...............................................
io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException: Unrecognized value for otel.propagators: jaeger. Make sure the artifact including the propagator is on the classpath.
    at io.opentelemetry.sdk.autoconfigure.PropagatorConfiguration.getPropagator(PropagatorConfiguration.java:69)
    at io.opentelemetry.sdk.autoconfigure.PropagatorConfiguration.configurePropagators(PropagatorConfiguration.java:50)
    at io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdkBuilder.build(AutoConfiguredOpenTelemetrySdkBuilder.java:382)
    at io.jenkins.plugins.opentelemetry.OpenTelemetrySdkProvider.initializeOtlp(OpenTelemetrySdkProvider.java:160)
    at io.jenkins.plugins.opentelemetry.OpenTelemetrySdkProvider.initialize(OpenTelemetrySdkProvider.java:131)
    at io.jenkins.plugins.opentelemetry.JenkinsOpenTelemetryPluginConfiguration.initializeOpenTelemetry(JenkinsOpenTelemetryPluginConfiguration.java:222)
    at io.jenkins.plugins.opentelemetry.JenkinsOpenTelemetryPluginConfiguration.configure(JenkinsOpenTelemetryPluginConfiguration.java:165)
    at jenkins.model.Jenkins.configureDescriptor(Jenkins.java:4039)
    at jenkins.model.Jenkins.doConfigSubmit(Jenkins.java:4003)

However as per https://github.com/open-telemetry/opentelemetry-java/blob/b23ef1855e9c61db19762a90a701be49980df307/sdk-extensions/autoconfigure/README.md#propagator this should be a valid propagator

Anything else?

No response

cyrille-leclerc commented 1 year ago

Thanks for the report @stmlange, we have indeed not tested Jaeger integration use cases. Can you please share with us your scenario so we better understand what's needed?

stmlange commented 1 year ago

Let me start with the fact that "we" had been using OpenTracing and only now are (finally) migrating to OpenTelemetry.

Now the opentelemetry-plugin essentially only seems to support the W3C Trace Context which is fine I guess, but that essentially forces "us" to use the same propagator. OpenTelemetry gives the promise to be a Drop-In-Replacement for OpenTracing. However if you had been using a different propagator (e.g. the Jaeger one) under OpenTracing it's one more step where one would need to adjust the propagation first, before it's really a Drop-In-Replacement. Hence technically without support for all propagators the plugin somewhat breaks the OpenTelemetry promise to be a Drop-In-Replacement.

Hope that makes sense, if you feel you don't want to implement this support it's fine for me, we already started to switch to the W3C Trace Context anyways.

cyrille-leclerc commented 1 year ago

Thanks, Note for myself: it's the artifact https://github.com/open-telemetry/opentelemetry-java/tree/main/extensions/trace-propagators

cyrille-leclerc commented 1 year ago

See

cyrille-leclerc commented 1 year ago

Fixed in: