英文:
Paketo Buildpack for OpenTelemetry not working with maven spring boot 2.5.12 app
问题
以下是您要翻译的代码部分:
I'm trying to add OpenTelemetry automated instrumentation to our spring boot app but I can't get it working.
The app is deployed as a docker image and the image is created via the spring-boot-maven-plugin.
I've added an env section to the spring-boot-maven-plugin config in the pom.xml:
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <image>
                        <name>appname</name>
                        <env>
                            <BP_OPENTELEMETRY_ENABLED>true</BP_OPENTELEMETRY_ENABLED>
                        </env>
                    </image>
                </configuration>
            </plugin>
不包括代码的翻译:
我正在尝试为我们的Spring Boot应用程序添加OpenTelemetry自动化仪器,但我无法使其工作。
该应用程序部署为Docker映像,并且该映像是通过spring-boot-maven-plugin创建的。
我在pom.xml中的spring-boot-maven-plugin配置中添加了一个env部分:
<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <executions>
        <execution>
            <goals>
                <goal>repackage</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <image>
            <name>appname</name>
            <env>
                <BP_OPENTELEMETRY_ENABLED>true</BP_OPENTELEMETRY_ENABLED>
            </env>
        </image>
    </configuration>
</plugin>
我不确定这是否是启用它的正确方式,但我很难确定这一步是否有效。
Docker映像是通过以下命令创建并运行的:
mvn clean spring-boot:build-image
docker compose -f app.yml up
我在app.yml文件中添加了环境变量(主机名已替换为XXXXXX):
services:
  appname:
    image: appname:latest
    environment:
      - SPRING_PROFILES_ACTIVE=docker-local
      - BPE_OTEL_TRACES_EXPORTER=zipkin
      - BPE_OTEL_EXPORTER_ZIPKIN_ENDPOINT=http://XXXXXX:9411/api/v2/spans
      - BPE_OTEL_SERVICE_NAME=appname
      - BPE_OTEL_JAVAAGENT_ENABLED=true
然而,我认为这些环境变量未设置,因为当我运行以下命令时,我看不到它们:
docker run --entrypoint launcher -it appname:latest bash -c set
我没有看到任何跟踪数据传输到Zipkin,也没有在日志中看到任何内容。
在没有Docker的情况下,一切都正常工作。
我试图弄清楚是否只需使用更新版本的Spring Boot,但我找不到确定的方法。
我找不到任何已经成功使用此功能的应用程序示例。
编辑以包括可行解决方案:
Martin Theiss的解决方案是正确的。以下是执行所有操作的pom.xml部分:
<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <executions>
        <execution>
            <goals>
                <goal>repackage</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <image>
            <name>appname</name>
            <buildpacks>
                <buildpack>paketo-buildpacks/java</buildpack>
                <buildpack>gcr.io/paketo-buildpacks/opentelemetry</buildpack>
            </buildpacks>
            <env>
                <BP_OPENTELEMETRY_ENABLED>true</BP_OPENTELEMETRY_ENABLED>
                <BPE_OTEL_JAVAAGENT_ENABLED>true</BPE_OTEL_JAVAAGENT_ENABLED>
                <BPE_OTEL_TRACES_EXPORTER>zipkin</BPE_OTEL_TRACES_EXPORTER>
                <BPE_OTEL_EXPORTER_ZIPKIN_ENDPOINT>http://zipkinhost:9411/api/v2/spans</BPE_OTEL_EXPORTER_ZIPKIN_ENDPOINT>
                <BPE_OTEL_SERVICE_NAME>appname</BPE_OTEL_SERVICE_NAME>
            </env>
        </image>
    </configuration>
</plugin>
请注意,这会将跟踪数据直接发送到Zipkin。最终,我将会将跟踪数据发送到OpenTelemetry收集器。
还请注意,我错误地尝试将环境变量放在spring app.yml配置文件中。这些应该像上面那样放在pom.xml中。
英文:
I'm trying to add OpenTelemetry automated instrumentation to our spring boot app but I can't get it working.
The app is deployed as a docker image and the image is created via the spring-boot-maven-plugin.
I'm following these instructions: https://github.com/paketo-buildpacks/opentelemetry
I've added an env section to the spring-boot-maven-plugin config in the pom.xml:
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <image>
                    <name>appname</name>
                    <env>
                        <BP_OPENTELEMETRY_ENABLED>true</BP_OPENTELEMETRY_ENABLED>
                    </env>
                </image>
            </configuration>
        </plugin>
I'm not sure this is the correct way to enable it but I'm having a hard time determining whether that step is working or not.
The docker image is created and run with:
    mvn clean spring-boot:build-image
    docker compose -f app.yml up
I've added environment variables to app.yml file (hostname replaced with XXXXXX):
    services:
      appname:
        image: appname:latest
        environment:
          - SPRING_PROFILES_ACTIVE=docker-local
          - BPE_OTEL_TRACES_EXPORTER=zipkin
          - BPE_OTEL_EXPORTER_ZIPKIN_ENDPOINT=http://XXXXXX:9411/api/v2/spans
          - BPE_OTEL_SERVICE_NAME=appname
          - BPE_OTEL_JAVAAGENT_ENABLED=true
I don't think these environment variables are being set, however because I don't see them when I run:
> docker run --entrypoint launcher -it appname:latest bash -c set
I don't see any traces going to zipkin and I don't see anything in the logs.
Without docker, I have everything working fine.
I tried to figure out if I just need to use a more recent version of spring boot but I couldn't find a way to determine that.
I couldn't find any examples of apps that have this working.
Edit to include working solution:
Martin Theiss's solution is correct. Here is the section of the pom.xml that does everything:
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <image>
                    <name>appname</name>
                    <buildpacks>
                        <buildpack>paketo-buildpacks/java</buildpack>
                        <buildpack>gcr.io/paketo-buildpacks/opentelemetry</buildpack>
                    </buildpacks>
                    <env>
                        <BP_OPENTELEMETRY_ENABLED>true</BP_OPENTELEMETRY_ENABLED>
                        <BPE_OTEL_JAVAAGENT_ENABLED>true</BPE_OTEL_JAVAAGENT_ENABLED>
                        <BPE_OTEL_TRACES_EXPORTER>zipkin</BPE_OTEL_TRACES_EXPORTER>
                        <BPE_OTEL_EXPORTER_ZIPKIN_ENDPOINT>http://zipkinhost:9411/api/v2/spans</BPE_OTEL_EXPORTER_ZIPKIN_ENDPOINT>
                        <BPE_OTEL_SERVICE_NAME>appname</BPE_OTEL_SERVICE_NAME>
                    </env>
                </image>
            </configuration>
        </plugin>
Note that this is sending traces directly to zipkin. Eventually I'll be sending traces to an opentelemetry collector.
Note also that I was wrong to try to put environment variables in the spring app.yml config file. These should be put in the pom.xml as per above.
答案1
得分: 2
OpenTelemetry构建包不包含在buildpacks/java中。您必须另外指定它。
<image>
    <buildpacks>
        <buildpack>paketo-buildpacks/java</buildpack>
        <buildpack>gcr.io/paketo-buildpacks/opentelemetry</buildpack>
    </buildpacks>
    <env>
        <BP_OPENTELEMETRY_ENABLED>true</BP_OPENTELEMETRY_ENABLED>
    </env>
</image>
英文:
OpenTelemetry buildpack is not contained in the buildpacks/java. You have to specify it additionally.
					<image>
						<buildpacks>
							<buildpack>paketo-buildpacks/java</buildpack>
							<buildpack>gcr.io/paketo-buildpacks/opentelemetry</buildpack>
						</buildpacks>
						<env>
							<BP_OPENTELEMETRY_ENABLED>true</BP_OPENTELEMETRY_ENABLED>
						</env>
					</image>
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论