如何使用 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 吧,國人的驕傲。

相關文章
相關標籤/搜索