概述
服務網格支持使用opentelmetry方式接入應用性能監控鏈路追蹤能力,本章節介紹如何開啟和使用鏈路追蹤。
開啟條件
需要開通APM應用性能監控,可參考開通應用性能監控-應用性能監控-快速入門 - 天翼云 (daliqc.cn)
需要在網格實例所屬VPC下開通APM相關的終端節點(VPCE)
開啟方式
登錄服務網格控制臺,網格實例 -> 網格配置 -> 自定義配置 -> 啟用鏈路追蹤 開啟即可。
開啟時,您需要設置采樣里,取值1-100。
如果您還未開通應用性能監控服務及鏈路追蹤數據上報需要的VPCE等資源,您可以授權服務網格組件一鍵開通相關資源。
鏈路追蹤接入示例
概述
本節展示服務網格接入鏈路追蹤的操作流程及效果,首先確認已經開啟了鏈路追蹤功能開關并將采樣率配置為100%。演示架構如下圖所示
其中ELB和Ingress Gateway作為接入層,業務層包括app1、app2、app3三個服務(分別都注入了網格sidecar),業務代碼中也通過opentelemetry方式接入了鏈路追蹤,觸發數據面訪問后,預期會上報鏈路數據到APM,完整覆蓋網格數據面和應用。
部署測試程序
創建demo命名空間并配置好相關注入標簽,保證sidecar注入;部署應用及服務,如下
注意
- 本示例使用的鏡像地址是華南2資源池,如果您在其他資源池體驗,請替換鏡像地址
本示例采用go語言+opentelemetry方式接入鏈路追蹤,您可以參考應用性能監控go語言接入鏈路追蹤的文檔將Deployment中的
token和endpoint環境變量替換成您看到的值
apiVersion: apps/v1
kind: Deployment
metadata:
name: app1-base
namespace: demo
labels:
app: app1
csm-traffic-tag: base
spec:
replicas: 1
selector:
matchLabels:
app: app1
name: app1
csm-traffic-tag: base
template:
metadata:
labels:
sidecar.istio.io/inject: "true"
app: app1
name: app1
source: CCSE
csm-traffic-tag: base
spec:
containers:
- name: default
image: registry-vpc-crs-huanan2.cnsp-internal.daliqc.cn/library/trace-demo:otel
imagePullPolicy: Always
env:
- name: token
value: your-apm-licence
- name: endpoint
value: apm-huanan2.cnsp-internal.daliqc.cn:27141
- name: version
value: base
- name: app
value: app1
- name: upstream_url
value: "//app2:8000/"
ports:
- containerPort: 8000
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: app2-base
namespace: demo
labels:
app: app2
csm-traffic-tag: base
spec:
replicas: 1
selector:
matchLabels:
app: app2
name: app2
csm-traffic-tag: base
template:
metadata:
labels:
sidecar.istio.io/inject: "true"
app: app2
name: app2
source: CCSE
csm-traffic-tag: base
spec:
containers:
- name: default
image: registry-vpc-crs-huanan2.cnsp-internal.daliqc.cn/library/trace-demo:otel
imagePullPolicy: Always
env:
- name: token
value: your-apm-licence
- name: endpoint
value: apm-huanan2.cnsp-internal.daliqc.cn:27141
- name: version
value: base
- name: app
value: app2
- name: upstream_url
value: "//app3:8000/"
ports:
- containerPort: 8000
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: app3-base
namespace: demo
labels:
app: app3
csm-traffic-tag: base
spec:
replicas: 1
selector:
matchLabels:
app: app3
name: app3
csm-traffic-tag: base
template:
metadata:
labels:
sidecar.istio.io/inject: "true"
app: app3
name: app3
source: CCSE
csm-traffic-tag: base
spec:
containers:
- name: default
image: registry-vpc-crs-huanan2.cnsp-internal.daliqc.cn/library/trace-demo:otel
imagePullPolicy: Always
env:
- name: token
value: your-apm-licence
- name: endpoint
value: apm-huanan2.cnsp-internal.daliqc.cn:27141
- name: version
value: base
- name: app
value: app3
ports:
- containerPort: 8000
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: app1-test
namespace: demo
labels:
app: app1
csm-traffic-tag: test
spec:
replicas: 1
selector:
matchLabels:
app: app1
name: app1
csm-traffic-tag: test
template:
metadata:
labels:
sidecar.istio.io/inject: "true"
app: app1
name: app1
source: CCSE
csm-traffic-tag: test
spec:
containers:
- name: default
image: registry-vpc-crs-huanan2.cnsp-internal.daliqc.cn/library/trace-demo:otel
imagePullPolicy: Always
env:
- name: token
value: your-apm-licence
- name: endpoint
value: apm-huanan2.cnsp-internal.daliqc.cn:27141
- name: version
value: test
- name: app
value: app1
- name: upstream_url
value: "//app2:8000/"
ports:
- containerPort: 8000
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: app2-test
namespace: demo
labels:
app: app2
csm-traffic-tag: test
spec:
replicas: 1
selector:
matchLabels:
app: app2
name: app2
csm-traffic-tag: test
template:
metadata:
labels:
sidecar.istio.io/inject: "true"
app: app2
name: app2
source: CCSE
csm-traffic-tag: test
spec:
containers:
- name: default
image: registry-vpc-crs-huanan2.cnsp-internal.daliqc.cn/library/trace-demo:otel
imagePullPolicy: Always
env:
- name: token
value: your-apm-licence
- name: endpoint
value: apm-huanan2.cnsp-internal.daliqc.cn:27141
- name: version
value: test
- name: app
value: app2
- name: upstream_url
value: "//app3:8000/"
ports:
- containerPort: 8000
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: app3-test
namespace: demo
labels:
app: app3
csm-traffic-tag: test
spec:
replicas: 1
selector:
matchLabels:
app: app3
name: app3
csm-traffic-tag: test
template:
metadata:
labels:
sidecar.istio.io/inject: "true"
app: app3
name: app3
source: CCSE
csm-traffic-tag: test
spec:
containers:
- name: default
image: registry-vpc-crs-huanan2.cnsp-internal.daliqc.cn/library/trace-demo:otel
imagePullPolicy: Always
env:
- name: token
value: your-apm-licence
- name: endpoint
value: apm-huanan2.cnsp-internal.daliqc.cn:27141
- name: version
value: test
- name: app
value: app3
ports:
- containerPort: 8000
---
apiVersion: v1
kind: Service
metadata:
name: app1
labels:
app: app1
service: app1
spec:
ports:
- port: 8000
name: http
selector:
app: app1
---
apiVersion: v1
kind: Service
metadata:
name: app2
labels:
app: app2
service: app2
spec:
ports:
- port: 8000
name: http
selector:
app: app2
---
apiVersion: v1
kind: Service
metadata:
name: app3
labels:
app: app3
service: app3
spec:
ports:
- port: 8000
name: http
selector:
app: app3部署網關
開通網關并配置虛擬服務資源,將入口流量引入app1應用,具體參考網關相關文檔。
訪問驗證
通過網關入口地址訪問業務,如下
# cat test.sh #!/bin/bashfor((i=0;i<100;i++))do curl //192.168.0.3:18080/t -H 'host: app1.demo.svc.cluster.local' echo ''done# ./test.sh [app1] (version: test, ip: 192.168.0.12) -> [app2] (version: base, ip: 192.168.0.48) -> [app3] (version: test, ip: 192.168.0.20)[app1] (version: test, ip: 192.168.0.12) -> [app2] (version: test, ip: 192.168.0.43) -> [app3] (version: test, ip: 192.168.0.20)[app1] (version: base, ip: 192.168.0.46) -> [app2] (version: test, ip: 192.168.0.43) -> [app3] (version: test, ip: 192.168.0.20)[app1] (version: base, ip: 192.168.0.46) -> [app2] (version: base, ip: 192.168.0.48) -> [app3] (version: base, ip: 192.168.0.47)[app1] (version: base, ip: 192.168.0.46) -> [app2] (version: test, ip: 192.168.0.43) -> [app3] (version: test, ip: 192.168.0.20)[app1] (version: base, ip: 192.168.0.46) -> [app2] (version: test, ip: 192.168.0.43) -> [app3] (version: base, ip: 192.168.0.47)[app1] (version: test, ip: 192.168.0.12) -> [app2] (version: test, ip: 192.168.0.43) -> [app3] (version: test, ip: 192.168.0.20)[app1] (version: test, ip: 192.168.0.12) -> [app2] (version: base, ip: 192.168.0.48) -> [app3] (version: base, ip: 192.168.0.47)[app1] (version: test, ip: 192.168.0.12) -> [app2] (version: base, ip: 192.168.0.48) -> [app3] (version: test, ip: 192.168.0.20)
進入服務網格控制臺 -> 可觀測管理中心 -> 鏈路追蹤 菜單,可以看到產生了一系列鏈路追蹤數據
點擊其中一條TraceID可以進一步看到整個鏈路的瀑布圖,如下可以清晰展示出整個調用鏈的關系及主要耗時點