一、概述
上一篇文章介绍了应用 docker 部署 spring boot 并接入 skywalking,其中形容了应用 docker-compose 搭建 skywalking,这一篇文章就不介绍 skywalking 的搭建了,这里次要记录一下应用 docker 部署一个 tomcat 并接入 skywalking 进行服务链路追踪。
二、应用 docker 部署 tomcat 并接入 skywalking
对于如何将 tomcat 利用接入 skywalking 官网有如下形容:
详细信息能够查看官网:skywalking agent 官网
-
Linux Tomcat 7 / Tomcat 8
在tomcat/bin/catalina.sh
第一行增加以下内容:CATALINA_OPTS="$CATALINA_OPTS -javaagent:<skywalking-agent-path>"; export CATALINA_OPTS
-
Windows Tomcat 7 / Tomcat 8
在 tomcat/bin/catalina.bat 第一行增加以下内容:set "CATALINA_OPTS=-javaagent:<skywalking-agent-path>"
-
JAR File 或 Spring Boot
在应用程序的启动命令行中增加-javaagent
参数:java -javaagent:<skywalking-agent-path> -jar yourApp.jar
留神 :
-javaagent
参数肯定要在 -jar 参数之前。
因为我这里是应用 docker 部署 tomcat,所以不打算批改 tomcat/bin/catalina.sh
文件,而且查看 tomcat/bin/catalina.sh
文件,有如下形容:
在下图中定义了读取 setenv.sh
的脚本:
意思是:不要在 catalina.sh
这个脚本中设置变量,为了让你的自定义变量拆散,应该把自定义的环境变量放在CATALINA_BASE/bin/setenv.sh
文件中,除此之外,通过我测试发现,能够间接应用环境变量的形式进行设置,上面我将以两者形式的配置进行阐明。
1、将自定义的变量写在 setenv.sh 文件中
首先咱们须要下载 skywalking agent,对于下载 agent 能够查看本文结尾的文章,之后将 agent 放在一个能够拜访的目录,我这里是测试,所以将 agent 目录复制到了我的 Dockerfile 的同级目录,其中 Dockerfile
的内容如下:
FROM tomcat
LABEL maintaner="xiniao"
COPY agent /usr/skywalking/agent
WORKDIR /usr/local/tomcat/bin
RUN echo 'CATALINA_OPTS="$CATALINA_OPTS -javaagent:/usr/skywalking/agent/skywalking-agent.jar";' > setenv.sh
ENV SW_AGENT_NAME="my-spring-demo" \
SW_AGENT_COLLECTOR_BACKEND_SERVICES="127.0.0.1:11800"
WORKDIR /usr/local/tomcat/webapps/ROOT
COPY target/my-spring-demo.war my-spring-demo.war
RUN jar -xf my-spring-demo.war
对于 skywalking agent 的其余配置,则能够通过环境变量的形式进行定义,比方这里指定了 skywalking 中显示的服务名为 ENV SW_AGENT_NAME="my-spring-demo"
以及 skywalking 的后端服务地址 SW_AGENT_COLLECTOR_BACKEND_SERVICES="127.0.0.1:11800"
,咱们拜访 skywalking ui 能够看到如下图所示内容:
2、应用环境变量指定 skywalking agent 的门路
具体的 Dockerfile
内容如下:
FROM tomcat
LABEL maintaner="xiniao"
COPY agent /usr/skywalking/agent
ENV CATALINA_OPTS="$CATALINA_OPTS -javaagent:/usr/skywalking/agent/skywalking-agent.jar" \
SW_AGENT_NAME="my-spring-demo-env" \
SW_AGENT_COLLECTOR_BACKEND_SERVICES="127.0.0.1:11800"
WORKDIR /usr/local/tomcat/webapps/ROOT
COPY target/my-spring-demo.war my-spring-demo.war
RUN jar -xf my-spring-demo.war
应用如下命令构建镜像:
docker build -t my-spring-demo .
应用如下命令运行容器:
docker run --rm -p 8080:8080 my-spring-demo
拜访 skywalking ui 能够看到监控的信息如下:
总结
这里次要介绍了应用 docker 部署 tomact 并接入 skywalking 的应用,因为在网上并没有查到太多相干的信息,所以这里记录下来,须要对有需要的小伙伴提供一些帮忙。这里还是存在一些问题,比方这里 skywalking agent 间接打到镜像文件外面并不敌对,集体感觉能够自定义一个 tomcat 的根底镜像,并将 skywalking agent 打到根底镜像中,这样所有的 tomcat 援用这个根底镜像来构建镜像,就能够实现接入 skywalking。如果是应用 k8s 部署的话,能够在 pod 中定义一个初始容器,在 pod 启动时,将初始容器中的 skywalking agent 复制到咱们的利用中,对于如何在 k8s 应用 skywalking,并且无侵入的将 pod 的利用接入 skywalking , 我将在下一篇文章中介绍。