Skip to content

Bug in the ContainerResource implementation on the Containerd runtime. #4507

@jkwatson

Description

@jkwatson

Discussed in #4506

Originally posted by obenkirane May 30, 2022
Hello,
A Java exception is thrown at Spring Boot application launch; we do automatic instrumentation using the Javaagent.
We have found that this exception is thrown only when using Containerd runtime (no issue with Docker runtime).

Here is the thrown exception:

[main] INFO io.opentelemetry.javaagent.tooling.VersionLogger - opentelemetry-javaagent - version: 1.14.0 OpenTelemetry Javaagent failed to start java.lang.ExceptionInInitializerError at io.opentelemetry.sdk.extension.resources.ContainerResourceProvider.createResource(ContainerResourceProvider.java:16) at io.opentelemetry.sdk.autoconfigure.ResourceConfiguration.configureResource(ResourceConfiguration.java:50) at io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdkBuilder.build(AutoConfiguredOpenTelemetrySdkBuilder.java:308) at io.opentelemetry.javaagent.tooling.OpenTelemetryInstaller.installOpenTelemetrySdk(OpenTelemetryInstaller.java:43) at io.opentelemetry.javaagent.tooling.AgentInstaller.installBytebuddyAgent(AgentInstaller.java:115) at io.opentelemetry.javaagent.tooling.AgentInstaller.installBytebuddyAgent(AgentInstaller.java:91) at io.opentelemetry.javaagent.tooling.AgentStarterImpl.internalStart(AgentStarterImpl.java:98) at io.opentelemetry.javaagent.tooling.AgentStarterImpl.start(AgentStarterImpl.java:71) at io.opentelemetry.javaagent.bootstrap.AgentInitializer.initialize(AgentInitializer.java:35) at io.opentelemetry.javaagent.OpenTelemetryAgent.startAgent(OpenTelemetryAgent.java:57) at io.opentelemetry.javaagent.OpenTelemetryAgent.premain(OpenTelemetryAgent.java:45) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.base/java.lang.reflect.Method.invoke(Unknown Source) at java.instrument/sun.instrument.InstrumentationImpl.loadClassAndStartAgent(Unknown Source) at java.instrument/sun.instrument.InstrumentationImpl.loadClassAndCallPremain(Unknown Source) Caused by: java.lang.StringIndexOutOfBoundsException: begin 70, end 59, length 145 at java.base/java.lang.String.checkBoundsBeginEnd(Unknown Source) at java.base/java.lang.String.substring(Unknown Source) at io.opentelemetry.sdk.extension.resources.ContainerResource.getIdFromLine(ContainerResource.java:95) at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source) at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source) at java.base/java.util.Spliterators$IteratorSpliterator.tryAdvance(Unknown Source) at java.base/java.util.stream.ReferencePipeline.forEachWithCancel(Unknown Source) at java.base/java.util.stream.AbstractPipeline.copyIntoWithCancel(Unknown Source) at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source) at java.base/java.util.stream.FindOps$FindOp.evaluateSequential(Unknown Source) at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source) at java.base/java.util.stream.ReferencePipeline.findFirst(Unknown Source) at io.opentelemetry.sdk.extension.resources.ContainerResource.extractContainerId(ContainerResource.java:72) at io.opentelemetry.sdk.extension.resources.ContainerResource.buildResource(ContainerResource.java:39) at io.opentelemetry.sdk.extension.resources.ContainerResource.buildSingleton(ContainerResource.java:34) at io.opentelemetry.sdk.extension.resources.ContainerResource.<clinit>(ContainerResource.java:29)

And here is an extract from the Dockerfile:

FROM adoptopenjdk/openjdk11:jre-11.0.11_9-alpine
RUN mkdir -p /app/bin
COPY target/opentelemetry-app-a.jar /app/bin
COPY target/opentelemetry-javaagent.jar /app/bin

ENV OTEL_OTLP_ENDPOINT http://opentelemetry-collector:4317
ENV OTEL_JAVAAGENT_DEBUG false

CMD java -Dotel.traces.exporter=otlp \
         -Dotel.metrics.exporter=none \
         -Dotel.logs.exporter=none \
         -javaagent:/app/bin/opentelemetry-javaagent.jar \
         -Dotel.exporter.otlp.endpoint=${OTEL_OTLP_ENDPOINT} \
         -Dotel.exporter.otlp.certificate=${OTEL_EXPORTER_OTLP_CERTIFICATE} \
         -Dotel.resource.attributes=service.name=${OTEL_SERVICE_NAME} \
         -Dapplication.home=/app/bin/ \
         -Dapplication.name=${OTEL_SERVICE_NAME} \
	 -Dotel.javaagent.debug=${OTEL_JAVAAGENT_DEBUG} \
	  -jar /app/bin/opentelemetry-app-a.jar

Thanks.

Metadata

Metadata

Assignees

No one assigned

    Labels

    BugSomething isn't working

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions