使用skywalking對k8s應用進行鏈路監控
為什么做全鏈路監控
-
故障排查和故障定位:全鏈路監控能夠跟蹤應用程序的每個組件和服務之間的調用流程,當系統出現故障時,可以更快地定位和解決問題。通過分析鏈路數據,可以確定引起問題的具體組件,從而加快故障排查的速度。
-
性能優化:全鏈路監控可以提供對應用程序的性能指標的實時可視化。您可以了解每個組件和服務的性能表現,并識別瓶頸和性能問題。通過優化關鍵組件和服務,可以提升整個應用程序的性能和響應時間。
-
業務分析和決策支持:全鏈路監控能夠提供對應用程序的業務流程和關鍵指標的細粒度監控。這使得您可以深入了解業務流程,識別瓶頸,并為業務決策提供數據支持。通過分析鏈路數據,您可以了解用戶行為、轉化率、服務質量等關鍵指標,從而做出更明智的決策。
-
容量規劃和資源管理:通過全鏈路監控,您可以了解應用程序和各個組件的資源使用情況。這可以幫助您進行容量規劃,并優化資源分配,以確保應用程序在不同負載情況下的可靠性和穩定性。
-
安全和合規性:全鏈路監控可以幫助您監測應用程序的安全事件和異常行為。它可以提供實時警報和通知,以便您能夠及時采取措施來應對潛在的安全威脅。此外,全鏈路監控還可以幫助您滿足合規性要求,如數據隱私和安全標準。
方案一、修改代碼,引入jar包
方案二、無侵入,在dokerfile里的jar啟動命令中添加agent的jar包
以下使用方案二
以下使用helm安裝,提前安裝helm環境
1.添加SkyWalking的helm倉庫
helm repo add apache-skywalking https://apache.jfrog.io/artifactory/skywalking-helm
2.更新Helm倉庫
helm repo update
3.創建一個k8s命令空間
kubectl create namespace skywalking
4.下載skywalking壓縮包
helm pull apache-skywalking/skywalking
5.安裝skywalking(es使用已有的)
tar zxvf skywalking-4.3.0.tgz vim my-values.yaml oap: image: tag: 9.2.0 storageType: elasticsearch ui: image: tag: 9.2.0 service: type: NodePort nodePort: 30880 elasticsearch: enabled: false config: host: elasticsearch.skywalking port: http: 9200 helm -n skywalking install apache-skywalking -f my-values.yaml skywalking

查看pod狀態
kubectl get pods -n skywalking

6.改造dockerfile(myweb-0.0.1-SNAPSHOT.jar為我的應用程序)
FROM openjdk:17 ENV LANG=C.UTF-8 ENV TZ=Asia/Shanghai workdir /app COPY skywalking-agent /opt/skywalking-agent/ ADD myweb-0.0.1-SNAPSHOT.jar ./app.jar #CMD ["java","-jar","app.jar"] ENTRYPOINT ["sh","-c","java -javaagent:/opt/skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=sky-demo -Dskywalking.collector.backend_service=apache-skywalking-oap.skywalking:11800 -Djava.security.egd=file:/dev/./urandom -jar ./app.jar"]
執行命令: docker build -t myapp3:v1 .

7.編寫deployment應用myapp.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: myapp3 namespace: yx labels: app: myapp3 spec: replicas: 1 selector: matchLabels: app: myapp3 template: metadata: labels: app: myapp3 spec: nodeName: dst2 containers: - name: myapp3 image: myapp3:v1 imagePullPolicy: Never ports: - containerPort: 8080 --- apiVersion: v1 kind: Service metadata: name: myapp3 namespace: yx labels: app: myapp3 spec: type: NodePort #外部流量可訪問k8s中的服務 ports: - port: 30084 targetPort: 8080 nodePort: 30084 selector: app: myapp3
創建應用: kubectl create -f myapp.yaml
訪問skywalking UI頁面ip:30880

可以看到應用已監控


浙公網安備 33010602011771號