Lightstep

此任务向您展示如何配置 Istio 以收集跟踪跨度并将其发送到 Lightstep。Lightstep 使您可以分析来自大型生产软件的 100% 未采样事务数据,以生成有意义的分布式跟踪和指标,这些指标有助于解释性能行为并加速根本原因分析。在此任务结束时,Istio 会将跟踪跨度从代理发送到 Lightstep Satellite 池,使其可用于 Web UI。默认情况下,所有 HTTP 请求都会被捕获(要查看端到端跟踪,即使您的代码没有加入跟踪,也需要转发 OT 标头)。

如果您只想直接从 Istio 收集跟踪跨度(而不是直接在代码中添加特定仪器),那么只要您的服务转发 由跟踪生成的 HTTP 头,您就不需要配置任何跟踪器。

此任务以 Bookinfo 示例应用程序为例。

在您开始之前

  1. 确保您拥有 Lightstep 帐户。 注册 免费试用 Lightstep。

  2. 如果您使用的是 本地卫星,请确保您已配置一个带有 TLS 证书且公开安全 GRPC 端口的卫星池。有关设置卫星的详细信息,请参阅 安装和配置卫星

    对于 Lightstep 公共卫星开发者卫星,您的卫星已配置。但是,您需要下载 此证书 到本地目录。

  3. 确保您拥有 Lightstep 访问令牌。访问令牌允许您的应用与您的 Lightstep 项目通信。

部署 Istio

如何部署 Istio 取决于您使用的卫星类型。

使用本地卫星部署 Istio

这些说明不假设 TLS。如果您对卫星池使用 TLS,请遵循 公共卫星池 的配置,但使用您自己的证书和您自己的池端点(host:port)。

  1. 您需要使用卫星地址以 <Host>:<Port> 格式的地址部署 Istio,例如 lightstep-satellite.lightstep:9292。您可以在 配置 文件中找到此地址。

  2. 使用以下配置参数指定部署 Istio

    • global.proxy.tracer="lightstep"
    • meshConfig.defaultConfig.tracing.sampling=100
    • meshConfig.defaultConfig.tracing.lightstep.address="<satellite-address>"
    • meshConfig.defaultConfig.tracing.lightstep.accessToken="<access-token>"

    您可以在运行安装命令时使用 --set key=value 语法设置这些参数。例如

    $ istioctl install \
        --set global.proxy.tracer="lightstep" \
        --set meshConfig.defaultConfig.tracing.sampling=100 \
        --set meshConfig.defaultConfig.tracing.lightstep.address="<satellite-address>" \
        --set meshConfig.defaultConfig.tracing.lightstep.accessToken="<access-token>" \
    

使用公共或开发人员模式卫星部署 Istio

如果您使用的是公共或开发者模式卫星,或者您使用的是带有 TLS 证书的本地卫星,请执行以下步骤。

  1. 将您的卫星池的证书颁发机构证书存储为默认命名空间和 istio-system 命名空间中的秘密,后者供 Istio 网关使用。下载并使用 此证书。如果您在不同的命名空间中部署 Bookinfo 应用程序,请改为在该命名空间中创建秘密。

    $ CACERT=$(cat Cert_Auth.crt | base64) # Cert_Auth.crt contains the necessary CACert
    $ NAMESPACE=default
    
    $ cat <<EOF | kubectl apply -f -
      apiVersion: v1
      kind: Secret
      metadata:
        name: lightstep.cacert
        namespace: $NAMESPACE
        labels:
          app: lightstep
      type: Opaque
      data:
        cacert.pem: $CACERT
    EOF
    
  2. 使用以下配置参数指定部署 Istio

    global:
      proxy:
        tracer: "lightstep"
    meshConfig:
      defaultConfig:
        tracing:
          lightstep:
            address: "ingest.lightstep.com:443"
            accessToken: "<access-token>"
          sampling: 100
          tlsSettings
            mode: "SIMPLE"
            # Specifying ca certificate here will mount `lightstep.cacert` secret volume
            # at all sidecars by default.
            caCertificates="/etc/lightstep/cacert.pem"
    components:
      ingressGateways:
      # `lightstep.cacert` secret volume needs to be mount at gateways via k8s overlay.
      - name: istio-ingressgateway
        enabled: true
        k8s:
          overlays:
          - kind: Deployment
            name: istio-ingressgateway
            patches:
            - path: spec.template.spec.containers[0].volumeMounts[-1]
              value: |
                name: lightstep-certs
                mountPath: /etc/lightstep
                readOnly: true
            - path: spec.template.spec.volumes[-1]
              value: |
                name: lightstep-certs
                secret:
                  secretName: lightstep.cacert
                  optional: true
    

安装和运行 Bookinfo 应用程序

  1. 按照 部署 Bookinfo 示例应用程序的说明

  2. 按照 为 Bookinfo 应用程序创建入口网关的说明

  3. 为了验证上一步的成功,请确认您在 shell 中设置了 GATEWAY_URL 环境变量。

  4. 向示例应用程序发送流量。

    $ curl http://$GATEWAY_URL/productpage
    

可视化跟踪数据

  1. 加载 Lightstep Web UI。您将在服务目录中看到三个 Bookinfo 服务。

    Bookfinder services in the Service Directory
    服务目录中的 Bookfinder 服务
  2. 导航到资源管理器视图。

    Explorer view
    资源管理器视图
  3. 在顶部找到查询栏。查询栏允许您通过 **服务**、**操作** 和 **标签** 值交互式地筛选结果。

  4. 从 **服务** 下拉列表中选择 productpage.default

  5. 点击 **运行**。您将看到类似于以下内容的结果

    Explorer
    资源管理器
  6. 点击延迟直方图下方示例跟踪表中的第一行,以查看与您刷新 /productpage 对应的详细信息。此页面将显示与以下类似的内容

    Detailed Trace View
    详细跟踪视图

屏幕截图显示该跟踪由一组跨度组成。每个跨度对应于执行 /productpage 请求期间调用的 Bookinfo 服务。

跟踪中的两个跨度表示每个 RPC。例如,从 productpagereviews 的调用以用 reviews.default.svc.cluster.local:9080/* 操作和 productpage.default: proxy client 服务标记的跨度开头。此服务表示调用的客户端跨度。屏幕截图显示该调用花费了 15.30 毫秒。第二个跨度用 reviews.default.svc.cluster.local:9080/* 操作和 reviews.default: proxy server 服务标记。第二个跨度是第一个跨度的子跨度,表示调用的服务器端跨度。屏幕截图显示该调用花费了 14.60 毫秒。

跟踪采样

Istio 以可配置的跟踪采样百分比捕获跟踪。要了解如何修改跟踪采样百分比,请访问 分布式跟踪跟踪采样部分

使用 Lightstep 时,我们不建议将跟踪采样百分比降低到 100% 以下。为了处理高流量网格,请考虑扩展卫星池的大小。

清理

如果您不打算执行任何后续任务,请从您的集群中删除 Bookinfo 示例应用程序和任何 Lightstep 秘密。

  1. 要删除 Bookinfo 应用程序,请参考 Bookinfo 清理 指示。

  2. 删除为 Lightstep 生成的秘密

$ kubectl delete secret lightstep.cacert
此信息对您有用吗?
您有什么改进建议吗?

感谢您的反馈!