阿里云提供了链路追踪服务,为分布式应用的开发者提供了完整的调用链路还原、调用请求量统计、链路拓扑等,以快速分析和诊断分布式应用架构下的性能瓶颈,提高微服务时代下的开发诊断效率。您可以为集群安装ALB Ingress Controller组件并开启Xtrace功能,查看链路追踪数据。
前提条件
已为集群安装ALB Ingress Controller组件,且组件版本为2.11.1及以上。
创建集群时,请在组件配置页面的Ingress字段右侧,选择ALB Ingress。具体操作,请参见创建ACK托管集群、创建ACK专有集群或创建ACK Serverless集群。
对于已有集群,关于如何安装和升级ALB Ingress Controller组件,请参见管理组件。
若需要在ACK专有版集群中通过ALB Ingress访问服务,在部署服务前需要为ALB Ingress Controller授权。具体操作,请参见为ACK专有集群授予ALB Ingress Controller访问权限。
已通过kubectl工具连接ACK集群。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群。
为Albconfig开启链路追踪
步骤一:为集群启用日志服务组件Logtail
启用日志服务功能后,集群会自动创建日志服务Project。具体操作,请参见步骤一:安装Logtail组件。
步骤二:获取日志服务 Project的ID,以备后续使用
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择集群信息。
在集群信息页面的基本信息页签下,复制保存日志服务 Project右侧的ID。
步骤三:创建Albconfig
通过Albconfig创建ALB实例和监听,并为ALB实例开启日志服务,访问日志;同时,配置Albconfig中监听XTrace的相关配置,开启Xtrace并配置采样算法及采样率。
拷贝以下内容到alb-test.yaml,用于创建Albconfig。
apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: alb-demo spec: config: name: alb-test addressType: Intranet zoneMappings: # 指定的交换机必须在ALB当前所支持的可用区内,且与集群处于同一VPC。为保障业务高可用,请至少选择2个或以上不同可用区的交换机。 - vSwitchId: vsw-2vc82nndnoo********** # 请根据实际情况,设置ALB交换机ID。 - vSwitchId: vsw-2vc30f5mlhs********** accessLogConfig: logProject: "k8s-log-xz92lvykqj1siwvif****" # 以实际获取的日志服务Project为准。 logStore: alb_xz92lvykqj1siwvif**** # logStore命名需要以alb_开头。若指定的logStore不存在,系统则会自动创建。 listeners: - port: 80 protocol: HTTP logConfig: accessLogRecordCustomizedHeadersEnabled: false accessLogTracingConfig: # Xtrace相关配置参数。 tracingEnabled: true # 监听Xtrace开关。默认取值为false,如需打开Xtrace,请将该参数取值为true。 tracingSample: 9999 # 监听Xtrace采样率。取值范围:1~10000,仅在tracingEnabled开关为true时生效。 tracingType: Zipkin # 监听Xtrace采样算法。取值为Zipkin,仅在tracingEnabled开关为true时生效。
说明创建交换机具体操作,请参见创建和管理交换机。
只有为实例开启日志服务访问日志功能,才可以修改Xtrace配置。
执行以下命令,创建Albconfig。
kubectl apply -f alb-test.yaml
预期输出:
albconfig.alibabacloud.com/alb-demo created
步骤四:创建IngressClass
创建并拷贝以下内容到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
步骤五:部署服务并配置Ingress的转发规则
创建并拷贝以下内容到cafe-service.yaml文件中,用于部署名称为coffee的Deployment,以及名称为coffee的Service。
apiVersion: apps/v1 kind: Deployment metadata: name: coffee spec: replicas: 2 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: NodePort
执行以下命令,部署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名称。后续通过您的自有域名访问服务。具体操作,请参见(可选)步骤六:配置域名解析。
步骤七:访问服务
访问服务生成有Xtrace ID的请求。
执行以下命令,获取ALB实例地址(ADDRESS)。
kubectl get ing
预期输出:
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右侧的链接,跳转至日志服务控制台,然后在左侧导航栏,单击名称以
alb_
开头的LogStore(例如本示例的alb_xz92lvykqj1siwvif****),然后在当前页面搜索xtrace
。
在应用列表页面顶部选择目标地域,然后单击目标应用名称。
在应用详情页面左侧导航栏中单击接口调用,然后单击调用链路页签,查看链路数据。
调用链路页签列出了该应用耗时最长的至多100个调用链路。关于更多链路数据,请参见接口调用。
相关文档
如需使用Nginx Ingress实现链路追踪,请参见实现Nginx Ingress Controller组件的链路追踪。
如果在使用ALB过程中遇到相关报错或问题,请优先查阅文档解决。详细信息,请参见ALB Ingress异常问题排查、ALB Ingress FAQ。