繁体   English   中英

具有newrelic Java代理和主管的Docker容器在首次启动时未发送数据

[英]Docker container with newrelic java agent and supervisord not sending data on first launch

我们有一个docker容器,它通过超级用户在tomcat7中运行一个Java7应用程序。 我们要通过newrelic监视APM。

这是监督配置文件

[program:tomcat]
command=/home/ec2-user/tomcat7/bin/catalina.sh run
environment=CATALINA_OPTS=" -javaagent:/home/ec2-user/tomcat7/newrelic/newrelic.jar"

这是我们在Dockerfile中添加newrelic.yml配置文件的位置

COPY newrelic.yml /home/ec2-user/tomcat7/newrelic/newrelic.yml

docker容器启动时,它将运行超级用户,从而可以正确启动java应用程序。 虽然,如果我们连接到容器并转到tomcat7/newrelic文件夹,则看不到创建logs文件夹。 即使ps aux | grep tomcat也没有数据发送到newrelic ps aux | grep tomcat ps aux | grep tomcat向我们展示了
-javaagent选项正确传递:

/usr/bin/java -Djava.util.logging.config.file=/home/ec2-user/tomcat7/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -javaagent:/home/ec2-user/tomcat7/newrelic/newrelic.jar -Djava.endorsed.dirs=/home/ec2-user/tomcat7/endorsed -classpath /home/ec2-user/conf:/home/ec2-user/tomcat7/bin/bootstrap.jar:/home/ec2-user/tomcat7/bin/tomcat-juli.jar -Dcatalina.base=/home/ec2-user/tomcat7 -Dcatalina.home=/home/ec2-user/tomcat7 -Djava.io.tmpdir=/home/ec2-user/tomcat7/temp org.apache.catalina.startup.Bootstrap start

如果我们在容器中杀死了tomcat7进程,则supervisor将重新启动该进程,然后我们看到出现“ logs”文件夹,并且数据已正确发送到newrelic。

有什么理由为什么主管第一次启动新消息代理不附加但第二次启动的进程?

  • 监督版本:3.1.3
  • newrelic代理版本:3.21.0
  • tomcat版本:7
  • Java版本:7
  • 码头工人版本:1.7.1

我们发现了问题:tomcat中缺少temp文件夹。 如果文件夹不存在,则newrelic代理将不会启动,但会创建它。 这解释了为什么我们第二次开始该过程时,代理正确挂接了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM