关于分布式链路追踪系统:基于docker部署的项目如何和skywalking-agent进行整合

28次阅读

共计 3301 个字符,预计需要花费 9 分钟才能阅读完成。

skywalking 简介

skywalking 是一款开源的利用性能监控零碎,包含指标监控,分布式追踪,分布式系统性能诊断

skywalking 官网中文翻译文档

https://skyapm.github.io/document-cn-translation-of-skywalking/

如何疾速搭建 skywalking

https://github.com/apache/skywalking-docker

我的项目如何集成 skywalking

1、下载 skywalking agent

https://archive.apache.org/dist/skywalking/

解压后的目录形如下

2、为咱们我的项目配置 skywalking 探针

形如下

java -javaagent:D:apache-skywalking-apm-es7-8.4.0/apache-skywalking-apm-bin-es7/agentskywalking-agent.jar -Dskywalking.agent.service_name= 以后我的项目在 skywalking 显示的名称 -Dskywalking.collector.backend_service=xxxx:11800 -jar spring-demo-0.0.1-SNAPSHOT.jar

官网其实也提供了文档,通知咱们如何配置,如下图

更具体配置信息,能够查看如下链接
https://github.com/apache/skywalking/blob/master/docs/en/setup/service-agent/java-agent/README.md

通过以上几步就我的项目就能够和 skywalking 整合了。然而有些小伙伴反馈在 docker 环境中,就不懂要怎么应用 skywalking 的 agent 进行埋点了。那上面就介绍一下,基于 docker 部署的我的项目如何和 skywalking agent 进行整合

思考点:docker 中的我的项目中要如何能力应用到 skywalking agent?

情理可能大家都懂,就是把 skywalking agent 与我的项目都塞到到同个 docker 容器中,基于这个实践,就衍生出一下 2 种计划

计划一:把 skywalking agent 的整个 agent 文件夹都集成进行要埋点的我的项目中

形如下图:


而后批改一下我的项目的 dockerfile 文件,批改后的内容如下

FROM adoptopenjdk/openjdk8
VOLUME /tmp
COPY localtime /etc/localtime
RUN echo "Asia/Shanghai" > /etc/timezone
COPY target/spring-demo-*.jar app.jar
COPY agent /usr/local/agent
ENTRYPOINT ["sh", "-c", "java  -javaagent:/usr/local/agent/skywalking-agent.jar -Dskywalking.agent.service_name=spring-demo -Dskywalking.collector.backend_service=192.168.1.2:11800 -Djava.security.egd=file:/dev/./urandom -jar /app.jar"]

外围的次要以下这两句

COPY agent /usr/local/agent
ENTRYPOINT ["sh", "-c", "java  -javaagent:/usr/local/agent/skywalking-agent.jar -Dskywalking.agent.service_name=spring-demo -Dskywalking.collector.backend_service=192.168.1.2:11800 -Djava.security.egd=file:/dev/./urandom -jar /app.jar"]

把我的项目中的 agent 文件夹拷贝进行容器中的 /usr/local/agent 文件夹中,而后就前面操作就跟在一般环境应用 skwalking agent 的操作一样了

整合后如下图

计划二:在咱们构建根底镜像时,把 skywalking agent 也加进去

比方咱们构建 java 运行的 jdk 根底镜像时,退出 skywalking 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"]

而后通过 docker build -t 镜像名 . 或者通过 docker-compose build 把根底镜像构建进去

本例构建进去的根底镜像为 openjdk8-trace-agent。

这边有几个参数阐明下:SKYWALKING_AGENT_SERVICE_NAME 和 SKYWALKING_COLLECTOR_BACKEND_SERVICE 是作为环境变量,能够在 docker-compose.yml 文件或者 k8s 文件中指定具体环境变量值。以在 docker-compose.yml 为例

配置形如下

version: '3.1'
services:
  spring-demo:
    restart: always
    image: 192.168.1.3:5002/demo/spring-demo:dev
    container_name: spring-demo
    network_mode: bridge
    ports:
     - "8085:8080"
    environment:
     - SKYWALKING_AGENT_SERVICE_NAME=spring-demo-test
     - SKYWALKING_COLLECTOR_BACKEND_SERVICE=192.168.1.2:11800

其次

ONBUILD COPY app.jar app.jar

咱们在 maven 构建时,把业务的 jar 对立命名成 app.jar,因而第一个 app.jar 是咱们业务我的项目的 jar,第二个 jar 是运行在 docker 容器的 jar。这样咱们在业务的 dockerfile 中,只需这么写就行

FROM 192.168.1.3:5002/dev/openjdk8-trace-agent

整合后示例如下图

总结

分布式链路追踪在微服务基本上是属于一个必选项了,目前市面上开源的链路追踪除了 skywalking,还有 pinpoint、jaeger、zipkin、cat 等,大家如果感兴趣能够去理解下。另外本文提供在 docker 容器中应用 skywalking agent 可能并不是最优计划,大家就当个参考

正文完
 0