[英]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。
有什么理由为什么主管第一次启动新消息代理不附加但第二次启动的进程?
我们发现了问题:tomcat中缺少temp
文件夹。 如果文件夹不存在,则newrelic代理将不会启动,但会创建它。 这解释了为什么我们第二次开始该过程时,代理正确挂接了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.