概述
服务网格支持使用opentelmetry方式接入应用性能监控链路追踪能力,本章节介绍如何开启和使用链路追踪。
开启条件
需要开通APM应用性能监控,可参考开通应用性能监控-应用性能监控-快速入门 - 天翼云 (ctyun.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.ctyun.cn/library/trace-demo:otel
imagePullPolicy: Always
env:
- name: token
value: your-apm-licence
- name: endpoint
value: apm-huanan2.cnsp-internal.ctyun.cn:27141
- name: version
value: base
- name: app
value: app1
- name: upstream_url
value: "http://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.ctyun.cn/library/trace-demo:otel
imagePullPolicy: Always
env:
- name: token
value: your-apm-licence
- name: endpoint
value: apm-huanan2.cnsp-internal.ctyun.cn:27141
- name: version
value: base
- name: app
value: app2
- name: upstream_url
value: "http://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.ctyun.cn/library/trace-demo:otel
imagePullPolicy: Always
env:
- name: token
value: your-apm-licence
- name: endpoint
value: apm-huanan2.cnsp-internal.ctyun.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.ctyun.cn/library/trace-demo:otel
imagePullPolicy: Always
env:
- name: token
value: your-apm-licence
- name: endpoint
value: apm-huanan2.cnsp-internal.ctyun.cn:27141
- name: version
value: test
- name: app
value: app1
- name: upstream_url
value: "http://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.ctyun.cn/library/trace-demo:otel
imagePullPolicy: Always
env:
- name: token
value: your-apm-licence
- name: endpoint
value: apm-huanan2.cnsp-internal.ctyun.cn:27141
- name: version
value: test
- name: app
value: app2
- name: upstream_url
value: "http://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.ctyun.cn/library/trace-demo:otel
imagePullPolicy: Always
env:
- name: token
value: your-apm-licence
- name: endpoint
value: apm-huanan2.cnsp-internal.ctyun.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/bash
for((i=0;i<100;i++))
do
curl http://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可以进一步看到整个链路的瀑布图,如下可以清晰展示出整个调用链的关系及主要耗时点