如何使用 Skywalking Agent ?

如何使用 Skywalking Agent ?

若是你还不知道 Skywalking agent 是什么,请点击这里查看 Probe 或者这里查看快速了解agent,因为我这边大部分都是 JAVA 服务,因此下文以 Java 中使用 agent 为例,提供了如下三种方式供你选择html

三种方式:

  • 使用官方提供的基础镜像
  • 将 agent 包构建到已经存在的基础镜像中
  • sidecar 模式挂载 agent
1.使用官方提供的基础镜像

查看官方 docker hub 提供的基础镜像,只须要在你构建服务镜像是 From 这个镜像便可,直接集成到 Jenkins 中能够更加方便java

2.将 agent 包构建到已经存在的基础镜像中

提供这种方式的缘由是:官方的镜像属于精简镜像,而且是 openjdk ,可能不少命令没有,须要本身二次安装,如下是我构建的过程nginx

  • 下载 oracle jdk

这个如今 oracle 有点恶心了,wget 各类不行,而后我放弃了,直接从官网下载了git

wget https://www.apache.org/dyn/closer.cgi/skywalking/6.3.0/apache-skywalking-apm-6.3.0.tar.gz && tar -zxvf apache-skywalking-apm-6.3.0.tar.gz复制代码

  • 经过如下 dockerfile 构建基础镜像
FROM alpine:3.8 
  
  ENV LANG=C.UTF-8
  
  RUN set -eux && \
      apk update && apk upgrade && \
      wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub &&\
          wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.30-r0/glibc-2.30-r0.apk &&\
          apk --no-cache add unzip vim curl git bash ca-certificates glibc-2.30-r0.apk file && \
      rm -rf /var/lib/apk/* &&\
          mkdir -p /usr/skywalking/agent/
  
  # A streamlined jre
  ADD jdk1.8.0_221/ /usr/java/jdk1.8.0_221/
  ADD apache-skywalking-apm-bin/agent/ /usr/skywalking/agent/
  
  # set env
  ENV JAVA_HOME /usr/java/jdk1.8.0_221
  ENV PATH ${PATH}:${JAVA_HOME}/bin
  
  # run container with base path:/
  WORKDIR /
  
  CMD bash复制代码

这里因为 alpine 是基于mini lib 的,可是 java 须要 glibc ,因此加入了 glibc 相关的东西,最后构建出的镜像大小在 490M 左右,应为加了挺多命令仍是有点大,仅供参考,一样构建出的镜像也能够直接配置到 jenkins 中。github

3.sidecar 模式挂载 agent

若是大家的服务是部署在 Kubernetes 中,你还可使用这种方式来使用 Skywalking Agent ,这种方式的好处在与不须要修改原来的基础镜像,也不用从新构建新的服务镜像,而是以sidecar 模式,经过共享volume的方式将agent 所需的相关文件挂载到已经存在的服务镜像中docker

构建 skywalking agent sidecar 镜像的方法apache

wget https://www.apache.org/dyn/closer.cgi/skywalking/6.3.0/apache-skywalking-apm-6.3.0.tar.gz && tar -zxvf apache-skywalking-apm-6.3.0.tar.gz复制代码

  • 经过如下 dockerfile 进行构建
FROM busybox:latest 
  
  ENV LANG=C.UTF-8
  
  RUN set -eux && mkdir -p /usr/skywalking/agent/
  
  ADD apache-skywalking-apm-bin/agent/ /usr/skywalking/agent/
  
  WORKDIR /复制代码

注意:这里我没有在dockerfile中下载skywalking 发行包是由于保证构建出的 sidecar 镜像保持最小,bosybox 只有700 k左右,加上 agent 最后大小小于20Mvim

如何使用 sidecar 呢?api

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    name: demo-sw
  name: demo-sw
spec:
  replicas: 1
  selector:
    matchLabels:
      name: demo-sw
  template:
    metadata:
      labels:
        name: demo-sw
    spec:
      initContainers:
      - image: registry-hz.rubikstack.com/library/sidecar-sw:latest
        name: sw-agent-sidecar
        imagePullPolicy: IfNotPresent
        command: ['sh']
        args: ['-c','mkdir -p /skywalking/agent && cp -r /usr/skywalking/agent/* /skywalking/agent']
        volumeMounts:
        - mountPath: /skywalking/agent
          name: sw-agent
      containers:
      - image: nginx:1.7.9
        name: nginx
        volumeMounts:
        - mountPath: /usr/skywalking/agent
          name: sw-agent
        ports:
        - containerPort: 80
      volumes:
      - name: sw-agent
        emptyDir: {}复制代码

以上是挂载 sidecar 的 deployment.yaml 文件,以nginx 做为服务为例,主要是经过共享 volume 的方式挂载 agent,首先 initContainers 经过 sw-agent 卷挂载了 sw-agent-sidecar 中的 /skywalking/agent ,而且将上面构建好的镜像中的 agent 目录 cp 到了 /skywalking/agent 目录,完成以后 nginx 启动时也挂载了 sw-agent 卷,并将其挂载到了容器的 /usr/skywalking/agent 目录,这样就完成了共享过程。bash

总结

这样除去 ServiceMesh 之外,我能想到的方式就介绍完了,但愿能够帮助到你。最后给 Skywalking 一个 Star 吧,国人的骄傲。

相关文章
相关标签/搜索