前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于docker部署的项目如何和skywalking agent进行整合

基于docker部署的项目如何和skywalking agent进行整合

作者头像
lyb-geek
发布2022-01-07 08:52:38
7000
发布2022-01-07 08:52:38
举报
文章被收录于专栏:Linyb极客之路

01skywalking简介

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

02skywalking官方中文翻译文档

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

03如何快速搭建skywalking

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

04项目如何集成skywalking

1、下载skywalking agent

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

解压后的目录形如下

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

形如下

代码语言:javascript
复制
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文件,修改后的内容如下

代码语言:javascript
复制
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" ]

核心的主要以下这两句

代码语言:javascript
复制
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内容形如下

代码语言:javascript
复制
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为例

配置形如下

代码语言:javascript
复制
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

其次

代码语言:javascript
复制
ONBUILD COPY app.jar app.jar

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

代码语言:javascript
复制
FROM 192.168.1.3:5002/dev/openjdk8-trace-agent

整合后示例如下图

05

总结

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Linyb极客之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 思考点:docker中的项目中要如何才能使用到skywalking agent?
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档