阿里云提供了链路追踪服务可观测链路 OpenTelemetry 版(Managed Service for OpenTelemetry),为分布式应用的开发者提供了完整的调用链路还原、调用请求量统计、链路拓扑等,以快速分析和诊断分布式应用架构下的性能瓶颈,提高微服务时代下的开发诊断效率。您可以为容器计算服务 ACS(Container Compute Service)集群安装ALB Ingress Controller组件并开启链路追踪功能,来查看服务调用链路相关数据。
前提条件
已创建ACS集群并开启日志服务。具体操作,请参见创建ACS集群。
已创建两个不同可用区的交换机,且与集群处于同一VPC。具体操作,请参见创建和管理交换机。
已为ACS集群安装ALB Ingress Controller组件。具体操作,请参见管理ALB Ingress Controller组件。
连接集群。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群或在CloudShell上通过kubectl管理Kubernetes集群。
步骤一:获取日志服务Project ID
步骤二:配置访问日志和链路追踪
拷贝以下内容到alb-test.yaml,用于创建AlbConfig。
apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: alb-demo spec: config: name: alb-test addressType: Internet # 指定的交换机必须在ALB当前所支持的可用区内,且与集群处于同一VPC。为保障业务高可用,请至少选择2个或以上不同可用区的交换机。 zoneMappings: - vSwitchId: vsw-2vc82nndnoo********** # 请根据实际情况,设置ALB交换机ID。 - vSwitchId: vsw-2vc30f5mlhs********** # 请根据实际情况,设置ALB交换机ID。 accessLogConfig: logProject: k8s-log-xz92lvykqj1siwvif**** # 以步骤一中实际获取的日志服务Project为准。 logStore: alb_test_xz92lvykqj1siwvif**** # logStore命名需要以alb_开头。若指定的logStore不存在,系统则会自动创建。 listeners: - port: 80 protocol: HTTP logConfig: accessLogRecordCustomizedHeadersEnabled: false accessLogTracingConfig: # Xtrace相关配置参数,前提需要配置accessLogConfig。 tracingEnabled: true # 监听Xtrace开关。默认取值为false,如需打开Xtrace,请将该参数取值为true。 tracingSample: 9999 # 监听Xtrace采样率。取值范围:1~10000,仅在tracingEnabled开关为true时生效。 tracingType: Zipkin # 监听Xtrace采样方式。取值为Zipkin,仅在tracingEnabled开关为true时生效。
执行以下命令,创建AlbConfig。
kubectl apply -f alb-test.yaml
预期输出:
albconfig.alibabacloud.com/alb-demo created
创建并拷贝以下内容到alb.yaml文件中,用于创建IngressClass。
apiVersion: networking.k8s.io/v1 kind: IngressClass metadata: name: alb spec: controller: ingress.k8s.alibabacloud/alb parameters: apiGroup: alibabacloud.com kind: AlbConfig name: alb-demo
执行以下命令,创建IngressClass。
kubectl apply -f alb.yaml
预期输出:
ingressclass.networking.k8s.io/alb created
配置完成后,在集群对应的日志服务Project中会自动创建名为alb_test_xz92lvykqj1siwvif****
的日志库。
步骤三:部署示例应用
创建并拷贝以下内容到cafe-service.yaml文件中,用于部署名称为coffee的Deployment,以及名称为coffee的Service。
apiVersion: apps/v1 kind: Deployment metadata: name: coffee spec: replicas: 1 selector: matchLabels: app: coffee template: metadata: labels: app: coffee spec: containers: - name: coffee image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: coffee-svc spec: ports: - port: 80 targetPort: 80 protocol: TCP selector: app: coffee type: ClusterIP
执行以下命令,部署Deployment和Service。
kubectl apply -f cafe-service.yaml
预期输出:
deployment.apps/coffee created service/coffee-svc created
创建并拷贝以下内容到cafe-ingress.yaml文件中,用于配置Ingress规则,实现对外暴露服务。
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: cafe-ingress spec: ingressClassName: alb rules: - host: demo.domain.ingress.top http: paths: # 配置Context Path - path: /coffee pathType: ImplementationSpecific backend: service: name: coffee-svc port: number: 80
执行以下命令,配置coffee服务对外暴露的域名和路径。
kubectl apply -f cafe-ingress.yaml
预期输出:
ingress.networking.k8s.io/cafe-ingress created
(可选)如果您在创建Ingress时配置了
spec.rules.host
字段为您的自有域名,您需要将您的域名添加CNAME记录解析到ALB DNS名称。后续通过您的自有域名访问服务。具体操作,请参见配置域名解析。
步骤四:查看链路追踪信息
执行以下命令,获取ALB实例地址(ADDRESS)。
kubectl get ingress
预期输出:
NAME CLASS HOSTS ADDRESS PORTS AGE cafe-ingress alb demo.domain.ingress.top alb-u53i28ewt580*****.cn-<Region>.alb.aliyuncs.com 80 16m
执行以下命令,访问服务。
curl -H Host:demo.domain.ingress.top http://alb-u53i28ewt580*****.cn-<Region>.alb.aliyuncs.com/coffee
说明预期输出一个标题为
Hello World
的HTML页面。您也可以在浏览器中访问配置好的域名,预期输出为以下页面:查看日志服务SLS中对应ALB实例的访问日志,确认上一步访问服务的操作已被记录到访问日志,并且链路追踪xtrace标记的字段已有数据。
登录日志服务控制台。
在Project列表区域选择ACS集群对应的Project(默认为
k8s-log-ACS集群ID
),进入日志库列表页签。单击名称以
alb_
开头的日志库(例如本示例的alb_test_xz92lvykqj1siwvif****
),然后在当前页面搜索coffee
。在查询到的日志中带有xtrace标记的字段主要有:
slb_xtrace:
slb_xtrace: 19241ed1c4790d31:19241ed1c4790d31:-:1
中的19241ed1c4790d31
为该次请求的链路追踪ID(TraceId),TraceId可以作为查询条件来进一步分析调用链路。xtrace_type:
xtrace_type: zipkin
为链路追踪采集方式,与步骤二:配置访问日志和链路追踪中的配置一致。
通过TraceId在可观测链路OpenTelemetry版中查询调用链信息。
在应用列表页面顶部选择目标地域,然后单击目标应用名称,该名称默认为对应ALB的实例ID(例如本示例的
alb-u53i28ewt580*****
)。在左侧导航栏中单击调用链分析,在右侧搜索框输入查询条件
trace_id IN (19241ed1c4790d31)
,其中的TraceId19241ed1c4790d31
为上一步日志中的TraceId信息。点击查询到的TraceId链接,即可查询这次请求所产生的调用链路的详细信息。
相关文档
如果在使用ALB过程中遇到相关报错或问题,请优先查阅文档解决。详细信息,请参见ALB Ingress异常问题排查和ALB Ingress FAQ。