
關于鏈路追蹤,目前比較主流是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應用服務,
至此,就全部完成了,如果有看不懂或者有問題朋友,請評論區留言
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/285803.html
標籤:其他
