APM全链路监控

180 阅读2分钟

基于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这些运行环境的含探针基础镜像