通过Albconfig开启Xtrace实现链路追踪

阿里云提供了链路追踪服务,为分布式应用的开发者提供了完整的调用链路还原、调用请求量统计、链路拓扑等,以快速分析和诊断分布式应用架构下的性能瓶颈,提高微服务时代下的开发诊断效率。您可以为集群安装ALB Ingress Controller组件并开启Xtrace功能,查看链路追踪数据。

前提条件

为Albconfig开启链路追踪

步骤一:为集群启用日志服务组件Logtail

启用日志服务功能后,集群会自动创建日志服务Project。具体操作,请参见步骤一:安装Logtail组件

步骤二:获取日志服务 Project的ID,以备后续使用

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择集群信息

  3. 集群信息页面的基本信息页签下,复制保存日志服务 Project右侧的ID。

步骤三:创建Albconfig

通过Albconfig创建ALB实例和监听,并为ALB实例开启日志服务,访问日志;同时,配置Albconfig中监听XTrace的相关配置,开启Xtrace并配置采样算法及采样率。

  1. 拷贝以下内容到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配置。

  2. 执行以下命令,创建Albconfig。

    kubectl apply -f alb-test.yaml

    预期输出:

    albconfig.alibabacloud.com/alb-demo created

步骤四:创建IngressClass

  1. 创建并拷贝以下内容到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
  2. 执行以下命令,创建IngressClass。

    kubectl apply -f alb.yaml

    预期输出:

    ingressclass.networking.k8s.io/alb created

步骤五:部署服务并配置Ingress的转发规则

  1. 创建并拷贝以下内容到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
  2. 执行以下命令,部署Deployment和Service。

    kubectl apply -f cafe-service.yaml

    预期输出:

    deployment.apps/coffee created
    service/coffee-svc created
  3. 创建并拷贝以下内容到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
  4. 执行以下命令,配置coffee服务对外暴露的域名和路径。

    kubectl apply -f cafe-ingress.yaml

    预期输出:

    ingress.networking.k8s.io/cafe-ingress created

步骤六:配置域名解析

如果您在创建Ingress时配置了spec.rules.host字段为您的自有域名,您需要将您的域名添加CNAME记录解析到ALB DNS名称。后续通过您的自有域名访问服务。具体操作,请参见(可选)步骤六:配置域名解析

步骤七:访问服务

访问服务生成有Xtrace ID的请求。

  1. 执行以下命令,获取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
  2. 执行以下命令,访问服务。

    curl -H Host:demo.domain.ingress.top http://alb-u53i28ewt580*****.cn-<Region>.alb.aliyuncs.com/coffee

    预期输出一个标题为Hello World的HTML页面。

验证链路追踪效果

  1. 查看SLS访问日志中访问对应ALB实例的请求,确认已标记XTrace数据。

    1. 登录容器服务管理控制台,在左侧导航栏选择集群

    2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择集群信息

    3. 集群信息页面的基本信息页签下,单击日志服务 Project右侧的链接,跳转至日志服务控制台,然后在左侧导航栏,单击名称以alb_开头的LogStore(例如本示例的alb_xz92lvykqj1siwvif****),然后在当前页面搜索xtrace

      image

  2. 登录可观测链路 OpenTelemetry 版控制台

  3. 应用列表页面顶部选择目标地域,然后单击目标应用名称。

  4. 在应用详情页面左侧导航栏中单击接口调用,然后单击调用链路页签,查看链路数据。

    调用链路页签列出了该应用耗时最长的至多100个调用链路。关于更多链路数据,请参见接口调用

相关文档