使用 docker部署tomcat並接入skywalking的使用

一、概述

上一篇文章介紹瞭使用 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文件,有如下描述:

image.png

在下圖中定義瞭讀取 setenv.sh 的腳本:

image.png

意思是:不要在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 可以看到如下圖所示內容:

image.png

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 可以看到監控的信息如下:

image.png

總結

這裡主要介紹瞭使用 docker 部署 tomact 並接入 skywalking 的使用,因為在網上並沒有查到太多相關的信息,所以這裡記錄下來,需要對有需求的小夥伴提供一些幫助。這裡還是存在一些問題,比如這裡 skywalking agent 直接打到鏡像文件裡面並不友好,個人覺得可以自定義一個 tomcat 的基礎鏡像,並將 skywalking agent 打到基礎鏡像中,這樣所有的 tomcat 引用這個基礎鏡像來構建鏡像,就可以實現接入 skywalking。如果是使用 k8s 部署的話,可以在 pod 中定義一個初始容器,在 pod 啟動時,將初始容器中的 skywalking agent 復制到我們的應用中,關於如何在 k8s 使用 skywalking,並且無侵入的將 pod 的應用接入 skywalking ,我將在下一篇文章中介紹。

到此這篇關於使用 docker部署tomcat並接入skywalking的使用的文章就介紹到這瞭,更多相關 docker部署tomcat接入skywalking內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!