上一篇文章介紹了使用 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 ,我將在下一篇文章中介紹。