基于docker部署skywalking并实现SpringBoot全链路监控
本次部署的skywalking采用的存储引擎是elasticsearch7,需要事先部署好es,之前在日志系统中介绍过es部署,这里不再赘述,具体见tyjt.yuque.com/emivep/bueg…
skywalking-ui地址:http://172.26.1.247:8088/
skywalking-oap-server
docker pull apache/skywalking-oap-server:8.3.0-es7
#!/bin/bash
docker run --name tyjt-skywalking-oap --restart always -d \
--restart=always \
-e TZ=Asia/Shanghai \
-p 12800:12800 \
-p 11800:11800 \
-e SW_STORAGE=elasticsearch7 \
-e SW_STORAGE_ES_CLUSTER_NODES=172.26.1.247:9200 \
--network=es-net \
apache/skywalking-oap-server:8.3.0-es7
skywalking-ui
docker pull apache/skywalking-ui:8.3.0
#!/bin/bash
docker run -d --name tyjt-skywalking-ui \
--restart=always \
-e TZ=Asia/Shanghai \
-p 8088:8080 \
--link tyjt-skywalking-oap:oap \
-e SW_OAP_ADDRESS=172.26.1.247:12800 \
--network=es-net \
apache/skywalking-ui:8.3.0
skywalking-agent
探针使用方式
本次部署采用制作 含探针的基础镜像的方式,达到统一管理的目的
#下载并解压文件
wget https://archive.apache.org/dist/skywalking/8.3.0/apache-skywalking-apm-es7-8.3.0.tar.gz
tar -zxvf apache-skywalking-apm-es7-8.3.0.tar.gz
目录结构下
1.本地调用
将agent目录下的所有文件拷贝到工程本地,将agent和项目工程合在一起制作工程镜像
该方法较low,适合本地调试使用
2.制作含探针的基础镜像
在agent同级目录下编写Dockerfile
FROM adoptopenjdk/openjdk8
VOLUME /tmp
#ENV JAVA_OPTS="-Dcom.sun.management.jmxremote.port=39083 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
ENV JAVA_OPTS=""
ENV SKYWALKING_AGENT_SERVICE_NAME=""
ENV SKYWALKING_COLLECTOR_BACKEND_SERVICE=""
#COPY localtime /etc/localtime
COPY agent /usr/local/agent
RUN echo "Asia/Shanghai" > /etc/timezone
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -javaagent:/usr/local/agent/skywalking-agent.jar -Dskywalking.agent.service_name=$SKYWALKING_AGENT_SERVICE_NAME -Dskywalking.collector.backend_service=$SKYWALKING_COLLECTOR_BACKEND_SERVICE -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
制作镜像tyjt-java-agent
docker build -f Dockerfile.java8 -t tyjt-java8-agent:latest /home/skywalking/apache-skywalking-apm-bin-es7/
docker build -f Dockerfile.java11 -t tyjt-java11-agent:latest /home/skywalking/apache-skywalking-apm-bin-es7/
项目接入
开发完成,需要制作工程运行镜像
参考Dockerfile
#项目所依赖的jdk镜像(包含skywalking探针)
FROM tyjt-java-agent:latest
#设置时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#将maven构建好的jar添加到镜像中,第二个为别名
COPY start.sh start.sh
ADD target/webservice.jar app.jar
ENV SKYWALKING_AGENT_SERVICE_NAME=tyjt-webservice
#skywalking的采集端口地址
ENV SKYWALKING_COLLECTOR_BACKEND_SERVICE=172.26.1.247:11800
#暴露的端口号(和项目端口号等同)
EXPOSE 80
#镜像所执行的命令
ENTRYPOINT ["sh","start.sh"]
start.sh
echo 'start webservice...'
echo $SKYWALKING_AGENT_SERVICE_NAME
echo $SKYWALKING_COLLECTOR_BACKEND_SERVICE
java -javaagent:/usr/local/agent/skywalking-agent.jar -Dskywalking.agent.service_name="$SKYWALKING_AGENT_SERVICE_NAME" -Dskywalking.collector.backend_service="$SKYWALKING_COLLECTOR_BACKEND_SERVICE" -jar app.jar
echo 'finish start!!'
注意环境变量名称和值不要写错!!!
然后部署项目,出现以下日志则说明探针已经开始工作
全链路监控验证
http://172.26.1.247:49158/hello
该接口为测试用接口,多次访问之后,可以在skywalking面板上看到接口的请求链路
http://172.26.1.247:8088/trace
服务选择tyjt-webservice
可以看见完整的请求链路,符合预期
总结
之前多次尝试使用官方提供的探针镜像,无法生效,最后还是选择自己制作含探针镜像,才成功;这样做的好处就是可以自定义一些个性化配置,包括skywalking的存储引擎,业务请求量特别大的时候可以使用kafka 削峰;
目前只是制作了java的含探针的基础镜像,后续也需要Node.js, python这些运行环境的含探针基础镜像