上一篇文章介绍了使用 docker 部署 spring boot 并接入 skywalking,其中描述了使用 docker-compose 搭建 skywalking,这一篇文章就不介绍 skywalking 的搭建了,这里主要记录一下使用 docker 部署一个 tomcat 并接入 skywalking 进行服务链路追踪。java
关于如何将 tomcat 应用接入 skywalking 官网有以下描述:web
详细信息能够查看官网: skywalking agent 官网
Linux Tomcat 7 / Tomcat 8
在tomcat/bin/catalina.sh
第一行添加如下内容:spring
CATALINA_OPTS="$CATALINA_OPTS -javaagent:<skywalking-agent-path>"; export CATALINA_OPTS
Windows Tomcat 7 / Tomcat 8
在tomcat/bin/catalina.bat第一行添加如下内容:docker
set "CATALINA_OPTS=-javaagent:<skywalking-agent-path>"
JAR File 或 Spring Boot
在应用程序的启动命令行中添加 -javaagent
参数:apache
java -javaagent:<skywalking-agent-path> -jar yourApp.jar
注意:
-javaagent
参数必定要在-jar参数以前。
因为我这里是使用 docker 部署 tomcat ,因此不打算修改 tomcat/bin/catalina.sh
文件,并且查看tomcat/bin/catalina.sh
文件,有以下描述:segmentfault
在下图中定义了读取 setenv.sh
的脚本:后端
意思是:不要在catalina.sh
这个脚本中设置变量,为了让你的自定义变量分离,应该把自定义的环境变量放在CATALINA_BASE/bin/setenv.sh
文件中,除此以外,通过我测试发现,能够直接使用环境变量的方式进行设置,下面我将以二者方式的配置进行说明。tomcat
首先咱们须要下载 skywalking agent,关于下载 agent 能够查看本文开头的文章,以后将agent 放在一个能够访问的目录,我这里是测试,因此将 agent 目录复制到了个人 Dockerfile 的同级目录,其中 Dockerfile
的内容以下:app
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 能够看到以下图所示内容:webapp
详细的 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 ,我将在下一篇文章中介绍。