ASM实例为1.18.0.124版本以下,ASM仅支持向您自建的兼容Zipkin协议的系统导出追踪数据;1.18.0.124版本及以上,ASM仅支持向您自建的OpenTelemetry导出链路追踪数据。本文介绍如何向自建的Zipkin或者OpenTelemetry导出ASM链路追踪数据。
前提条件
该自建系统支持标准Zipkin协议,并通过标准Zipkin端口9411监听。若您使用Jaeger,则需要部署Zipkin Collector。
该自建系统部署于数据面集群内。
已添加Kubernetes集群到ASM实例。具体操作,请参见添加集群到ASM实例。
ASM实例已部署入口网关。具体操作,请参见创建入口网关。
操作步骤
请按照实例版本选择相应操作。
ASM实例版本为1.18.0.124及以上
步骤一:部署Zipkin
执行以下命令,创建zipkin命名空间,用于部署Zipkin。
kubectl create namespace zipkin
执行以下命令,通过Helm安装Zipkin。
helm install --namespace zipkin my-zipkin carlosjgp/zipkin --version 0.2.0
执行以下命令,检查Zipkin是否正常运行。
kubectl -n zipkin get pods
预期输出:
NAME READY STATUS RESTARTS AGE my-zipkin-collector-79c6dc9cd7-jmswm 1/1 Running 0 29m my-zipkin-ui-64c97b4d6c-f742j 1/1 Running 0 29m
步骤二:部署OpenTelemetry Operator
执行以下命令,创建opentelemetry-operator-system命名空间。
kubectl create namespace opentelemetry-operator-system
执行以下命令,使用Helm在opentelemetry-operator-system命名空间下安装OpenTelemetry Operator。
helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts helm install --namespace=opentelemetry-operator-system --set admissionWebhooks.certManager.enabled=false --set admissionWebhooks.certManager.autoGenerateCert=true opentelemetry-operator open-telemetry/opentelemetry-operator
执行以下命令,检查opentelemetry-operator是否正常运行。
kubectl get pod -n opentelemetry-operator-system
预期输出:
NAME READY STATUS RESTARTS AGE opentelemetry-operator-854fb558b5-pvllj 2/2 Running 0 1m
STATUS
为Running
,表明opentelemetry-operator正常运行。
步骤三:创建OpenTelemetry Collector
使用以下内容,创建collector.yaml文件。
请将YAML中的
${ENDPOINT}
替换为gRPC协议的VPC网络接入点,${TOKEN}
替换为鉴权Token。关于如何获取阿里云可观测链路OpenTelemetry版的接入点和鉴权Token,请参见接入和鉴权说明。在ACK集群对应的KubeConfig环境下,执行以下命令,将collector部署到集群。
kubectl apply -f collector.yaml
执行以下命令,检查collector是否正常启动。
kubectl get pod -n opentelemetry-operator-system
预期输出:
NAME READY STATUS RESTARTS AGE opentelemetry-operator-854fb558b5-pvllj 2/2 Running 0 3m default-collector-5cbb4497f4-2hjqv 1/1 Running 0 30s
预期输出表明collector正常启动。
执行以下命令,检查服务是否创建。
kubectl get svc -n opentelemetry-operator-system
预期输出:
opentelemetry-operator ClusterIP 172.16.138.165 <none> 8443/TCP,8080/TCP 3m opentelemetry-operator-webhook ClusterIP 172.16.127.0 <none> 443/TCP 3m default-collector ClusterIP 172.16.145.93 <none> 4317/TCP 30s default-collector-headless ClusterIP None <none> 4317/TCP 30s default-collector-monitoring ClusterIP 172.16.136.5 <none> 8888/TCP 30s
预期输出表明服务已创建成功。
步骤四:部署测试应用
部署bookinfo和sleep应用。具体操作,请参见在ASM实例关联的集群中部署应用。
步骤五:访问应用并查看上报的追踪数据
执行以下命令,访问productpage应用。
kubectl exec -it deploy/sleep -c sleep -- curl productpage:9080/productpage?u=normal
访问成功后,查看OpenTelemetry Collector日志,查看debug exporter打印的输出。
2023-11-20T08:44:27.531Z info TracesExporter {"kind": "exporter", "data_type": "traces", "name": "debug", "resource spans": 1, "spans": 3}
步骤六:配置ASM网关,通过Zipkin页面查看上报的追踪数据
创建网关规则。
使用以下内容,创建ingressgateway.yaml。
在ASM实例对应的KubeConfig环境下,执行以下命令,为ASM网关创建80端口监听和指向Zipkin服务的路由。
kubectl apply -f ingressgateway.yaml
通过网关地址访问Zipkin服务,查看已经上报的链路追踪数据。
ASM实例版本为1.18.0.124以下
步骤一:为网格实例启用链路追踪
ASM实例版本为1.17.2.28以下:登录ASM控制台,在目标实例的基本信息页面,单击功能设置,选中启用链路追踪,按需进行配置,然后单击确定。
ASM实例版本为1.17.2.28及以上:请参考链路追踪设置说明,启用链路追踪。
步骤二:在数据面集群部署Zipkin
使用以下内容,创建zipkin-server.yaml文件。
说明如果您需要使用自行准备的追踪系统YAML文件部署,请确保Deployment处于istio-system命名空间下。
执行以下命令,将该配置应用到数据面集群。
kubectl --kubeconfig=${DATA_PLANE_KUBECONFIG} apply -f zipkin-server.yaml
说明命令中的
${DATA_PLANE_KUBECONFIG}
请替换为数据面集群的KubeConfig文件路径,${ASM_KUBECONFIG}
请替换为网格实例的KubeConfig文件路径。部署完毕后,确认ZipkinServer Pod正常启动。
步骤三:创建Service暴露ZipkinServer
您需要在istio-system命名空间下创建名为zipkin的服务,来接收ASM的链路追踪信息。
若需要将Zipkin暴露于公网,请使用zipkin-svc-expose-public.yaml。
若不希望暴露于公网,请使用zipkin-svc.yaml。
为了便于查看追踪数据,下文使用zipkin-svc-expose-public.yaml将Zipkin Server暴露于公网端口。
创建的服务名称必须为zipkin。
按需选择以下内容,创建YAML文件。
若需要将Zipkin暴露于公网,请使用zipkin-svc-expose-public.yaml。
若不希望暴露于公网,请使用zipkin-svc.yaml。
说明如果您需要使用自行准备的YAML文件部署Service,请确保Service处在istio-system命名空间下。
执行以下命令,将Zipkin Service应用到数据面集群。
# 部署内网zipkin。 kubectl --kubeconfig=${DATA_PLANE_KUBECONFIG} apply -f zipkin-svc.yaml # 部署公网可以访问的zipkin。 kubectl --kubeconfig=${DATA_PLANE_KUBECONFIG} apply -f zipkin-svc-expose-public.yaml
步骤四:部署测试应用BookInfo
执行以下命令,将Bookinfo应用部署到数据面集群中。
kubectl --kubeconfig=${DATA_PLANE_KUBECONFIG} apply -f bookinfo.yaml
通过kubectl执行以下命令,部署Bookinfo应用的VirtualServices。
kubectl --kubeconfig=${ASM_KUBECONFIG} apply -f virtual-service-all-v1.yaml
通过kubectl执行以下命令,部署Bookinfo应用的DestinationRules。
kubectl --kubeconfig=${ASM_KUBECONFIG} apply -f destination-rule-all.yaml
通过Kubectl执行以下命令,部署Bookinfo应用的Gateway。
kubectl --kubeconfig=${ASM_KUBECONFIG} apply -f bookinfo-gateway.yaml
步骤五:产生追踪数据
执行以下命令,获得入口网关地址。
kubectl --kubeconfig=${DATA_PLANE_KUBECONFIG} get svc -n istio-system|grep ingressgateway|awk -F ' ' '{print $4}'
使用地址
入口网关地址/productpage
访问Bookinfo应用。
步骤六:查看链路追踪数据
执行以下命令,获取Zipkin Service地址。
kubectl --kubeconfig=${DATA_PLANE_KUBECONFIG}get svc -n istio-system|grep zipkin|awk -F ' ' '{print $4}'
使用
Zipkin Service地址:9411
,访问Zipkin控制台,查看追踪数据。