在 Docker 中传递 Java APM 代理设置

问题描述

我使用 Elastic APM 代理监控我的 jar,我手动运行这些命令:

java -javaagent:../infrastructure/agent/apm-agent.jar \
     -Delastic.apm.service_name=server \
     -Delastic.apm.server_urls=http://${APM_HOST}:8200 \
     -Delastic.apm.application_packages=package.coù \
     -jar ./target/server-0.0.1-SNAPSHOT.jar &

现在,我想使用 docker run 传递这些参数,我创建图像并尝试使用此命令传递这些设置,但应用程序未启动

docker run --name app -e CATALINA_OPTS='-Dspring.config.location=/usr/local/tomcat/application-recette.properties,/usr/local/tomcat/application.yml' 
-e CATALINA_OPTS='-Delastic.apm.service_name=server' 
-e CATALINA_OPTS='-Delastic.apm.server_urls=http://10.128.0.4:8200' 
-e CATALINA_OPTS='-Delastic.apm.application_packages=package.com' 
-d -p 9000:8080 image:v1

解决这个问题的想法吗?

谢谢

解决方法

实际上,根据您设置和配置 ELK 堆栈的方式,您的应用程序无法启动的原因有很多,但对我而言,我执行了以下操作并且运行良好:

  1. 通过 Dockerfile 传送 application.jarapm-agent.jar 并在容器内运行它们:

    FROM openjdk:8-jre-alpine
    
    COPY javaProjects/test-apm/target/test-apm-0.0.1-SNAPSHOT.jar /app.jar 
    
    COPY elastic-apm-agent-1.19.0.jar /apm-agent.jar 
    
    CMD ["/usr/bin/java","-javaagent:/apm-agent.jar","-Delastic.apm.service_name=my-cool-service -Delastic.apm.application_packages=main.java -Delastic.apm.server_urls=http://localhost:8200","-jar","/app.jar"]


  1. 从这个 Dockerfile 创建镜像:

    docker build -t test-apm:latest ./
  2. 运行创建的镜像:

    docker run  --network host -p 8080:8080 test-apm:latest
  • 注意我的 apm-serverELK-stack 在我的主机上运行, 我认为如果你也这样做并且对你的环境做很少的改变,它应该可以正常工作,