使用 docker 部署 tomcat 並接入 skywalking

1、概述

上一篇文章介紹了使用 docker 部署 spring boot 並接入 skywalking,其中描述了使用 docker-compose 搭建 skywalking,這一篇文章就不介紹 skywalking 的搭建了,這裏主要記錄一下使用 docker 部署一個 tomcat 並接入 skywalking 進行服務鏈路追蹤。java

2、使用 docker 部署 tomcat 並接入 skywalking

關於如何將 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

image.png

在下圖中定義了讀取 setenv.sh 的腳本:後端

image.png

意思是:不要在catalina.sh這個腳本中設置變量,爲了讓你的自定義變量分離,應該把自定義的環境變量放在CATALINA_BASE/bin/setenv.sh 文件中,除此以外,通過我測試發現,能夠直接使用環境變量的方式進行設置,下面我將以二者方式的配置進行說明。tomcat

一、將自定義的變量寫在 setenv.sh 文件中

首先咱們須要下載 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 能夠看到以下圖所示內容:
image.pngwebapp

二、使用環境變量指定 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 ,我將在下一篇文章中介紹。

相關文章
相關標籤/搜索