如何使用 Skywalking Agent ?

如何使用 Skywalking Agent ?

如果你還不知道 Skywalking agent 是什麼,請點擊這裏查看 Probe 或者這裏查看快速瞭解agent,由於我這邊大部分都是 JAVA 服務,所以下文以 Java 中使用 agent 爲例,提供了以下三種方式供你選擇

三種方式:

  • 使用官方提供的基礎鏡像
  • 將 agent 包構建到已經存在的基礎鏡像中
  • sidecar 模式掛載 agent
1.使用官方提供的基礎鏡像

查看官方 docker hub 提供的基礎鏡像,只需要在你構建服務鏡像是 From 這個鏡像即可,直接集成到 Jenkins 中可以更加方便

2.將 agent 包構建到已經存在的基礎鏡像中

提供這種方式的原因是:官方的鏡像屬於精簡鏡像,並且是 openjdk ,可能很多命令沒有,需要自己二次安裝,以下是我構建的過程

  • 下載 oracle jdk

    這個現在 oracle 有點噁心了,wget 各種不行,然後我放棄了,直接從官網下載了

  • 下載 skywalking 官方發行包,並解壓(以6.3.0爲例)

    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 中。

3.sidecar 模式掛載 agent

如果你們的服務是部署在 Kubernetes 中,你還可以使用這種方式來使用 Skywalking Agent ,這種方式的好處在與不需要修改原來的基礎鏡像,也不用重新構建新的服務鏡像,而是以sidecar 模式,通過共享volume的方式將agent 所需的相關文件掛載到已經存在的服務鏡像中

構建 skywalking agent sidecar 鏡像的方法

  • 下載skywalking 官方發行包,並解壓

    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 最後大小小於20M

如何使用 sidecar 呢?

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 目錄,這樣就完成了共享過程。

總結

這樣除去 ServiceMesh 以外,我能想到的方式就介紹完了,希望可以幫助到你。最後給 Skywalking 一個 Star 吧,國人的驕傲。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章