如何使用 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: innerpeacez/sw-agent-sidecar: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 吧,國人的驕傲。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM