鏈路追蹤_SkyWalking的部署及使用

南國卿發表於2021-05-27

  

關於鏈路追蹤,目前比較主流是Cat,Zipkin,SkyWalking等這些工具。這篇文章主要介紹關於SkyWalking工具的。

為什麼用SkyWalking,因為它基本沒有程式碼侵入,只這一點就足夠了。因為這些主流的鏈路追蹤工具,在功能和作用上基本沒啥區別。

1.介紹

 Skywalking是分散式系統的應用程式效能監視工具,專為微服務,雲原生架構和基於容器k8s, docker)架構而設計。

提供分散式追蹤,服務網路分析和視覺化一體的解決方案。

這裡就不過多的介紹原理和功能性的東西,想看的朋友可以去官方看這些。

官網地址:https://skywalking.apache.org/

github地址:https://github.com/apache/skywalking

 

2.整體架構

 

 

架構分為上下左右四個部分:

  - 上部分 Agent :負責從應用中,收集鏈路資訊,傳送給 SkyWalking OAP 伺服器。目前支援 SkyWalking、Zikpin、Jaeger 等提供的 Tracing 資料資訊。而我們目前採用的是,SkyWalking Agent 收集 SkyWalking Tracing 資料,傳遞給伺服器。

  - 下部分 SkyWalking OAP :負責接收 Agent 傳送的 Tracing 資料資訊,然後進行分析(Analysis Core) ,儲存到外部儲存器( Storage ),最終提供查詢( Query )功能。

  - 右部分 Storage :Tracing 資料儲存。目前支援 ES、MySQL、Sharding Sphere、TiDB、H2 多種儲存器。而我們目前採用的是 ES ,主要考慮是 SkyWalking 開發團隊自己的生產環境採用 ES 為主。

  - 左部分 SkyWalking UI :負責提供控臺,檢視鏈路等等。

所以根據這個架構圖,可以看出來,部署skywalking一共分為4步。第一步部署oap服務端,第二步部署ui介面,第三步部署儲存,如果選擇已有的儲存可以省略這步,第四步部署agent端。

 

如果有朋友不想用kubernetes叢集來裝,可以用單機版的。單機版的安裝官網上就有,大家可以自行前往:

http://skywalking.apache.org/zh/2020-04-19-skywalking-quick-start/ 

 

 

下面步入正題,在kubernetes叢集中安裝SkyWalking

3.在開始之前需要安裝helm

第一種安裝方式:

curl https://raw.githubusercontent.com/helm/helm/master/scripts/get > get_helm.sh

chmod 700 get_helm.sh

./get_helm.sh

第二種安裝方式:從官網下載安裝包

https://github.com/helm/helm/releases

tar zxf helm-v3.5.4-linux-amd64.tar.gz

ln -s /srv/sky/linux-amd64/helm /usr/bin/

因為裝的helm是3.5,在3.5中移除了Tiller,僅僅安裝helm客戶端就行

新增repo源:

helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

helm repo update

helm repo list    #新增完之後,可以檢視剛剛新增的repo源

  

4.使用helm安裝SkyWalking

使用helm安裝的好處是,官方已經打好了helm包,我們只需要安裝skywalking,就可以將服務端 ui頁面和es全部完成

我這裡使用現有的es作為儲存,es版本是6.x

git clone https://github.com/apache/skywalking-kubernetes.git

cd skywalking-kubernetes/

git tag

git checkout v3.0.0       #我做的時候用的是這個分支,當然也可以不換

cd chart

vi ./skywalking/values-es6.yaml

.....將檔案裡的IfNotPresent 改為Always

.....修改檔案裡的es地址,改成自己的es地址

......其餘的修改資源限制和去掉健康檢查

 

helm dep up skywalking

helm install skywalking skywalking -n default --values ./skywalking/values-es6.yaml --set elasticsearch.enabled=false --set elasticsearch.config.host=x.x.x.x --set elasticsearch.config.port.http=9200

helm list          #檢視包安裝上沒有 

  

安裝完成後你會看到三個pod執行到這就算完成安裝了

 

 

5.如何訪問ui頁面

安裝完成後,需要開啟頁面才能看到自己安裝的成果,至於如何訪問前端頁面有多種方法。

比如你可以將skywalking-ui這個服務的svc都設定成nodePort將埠暴露出去,讓後通過nginx反向代理出去。

因為我這個叢集是用的阿里雲的kubernetes叢集,所以可以直接配置ingress,來訪問ui。

 

 

 配置好以後,就可以訪問頁面了。正常你進去是沒有資料的,因為還沒有裝agent端,我這個有資料是因為我後截的圖

 

 

 

6.安裝agent端

在開始安裝agent端之前,容我多囉嗦一句。 安裝agent端也有多種方法,本著減少skywalking對環境的影響,所以選擇了接入java應用中。

 

https://archive.apache.org/dist/skywalking/8.0.1/    包下載地址

因為我的es是6.x的,oap是8.0.1的,所以下載apache-skywalking-apm-8.0.1.tar.gz 這個包

tar zxf apache-skywalking-apm-8.0.1.tar.gz
ll  apache-skywalking-apm-bin/agent/     #agent端jar包和依賴包都在這個目錄下
activations
bootstrap-plugins
config
logs
optional-plugins
plugins
kywalking-agent.jar

cd apache-skywalking-apm-bin/agent/config/
vim agent.config
.......
agent.namespace=default                  #修改命令空間
agent.service_name=msg-test              #服務名,這裡寫什麼,前端就展示為什麼
collector.backend_service=skywalking-oap:11800      #配置服務端地址,因為是在一個叢集裡,所以可以直接寫服務端pod的名稱加埠

 

下面就是將skywalking-agent端加入到自己的映象中,dockerfile如下:

vim msg-test
FROM registry-vpc.cn-beijing.aliyuncs.com/jushiwang/jdk:8   #自己的基礎映象
RUN mkdir -p /app/agent/                                                    
ADD jsw-msg.jar /app                #自己的java應用服務
ADD agent/ /app/agent              #將agent端目錄加入到映象中 目錄要和dockerfile平級   
docker build -t registry-vpc.cn-beijing.aliyuncs.com/jushiwang/betamsg:msg-sky -f msg-test 

  

還有最後這一哆嗦, 就是啟動服務,寫一個java應用服務的yaml檔案:

kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  labels:
    app: msg-test
  name: msg-test
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: msg-test
  template:
    metadata:
      labels:
        app: msg-test
    spec:
      containers:
      - name: msg-test
        image: registry-vpc.cn-beijing.aliyuncs.com/jushiwang/betamsg:msg-sky
        command: [ '/bin/sh','-c', 'java -javaagent:/app/agent/skywalking-agent.jar -jar /app/jsw-msg.jar']
        imagePullPolicy: Always
        ports:
        - name: msg-test
          containerPort: 8266
          protocol: TCP      

在啟動服務的時候通過 -javaagent:/app/agent/skywalking-agent.jar 來啟動agent端並監測java應用服務。

至此,就全部完成了。如果有看不懂或者有問題朋友,請評論區留言

 

相關文章