Lightstep
此任务向您展示如何配置 Istio 以收集跟踪跨度并将其发送到 Lightstep。Lightstep 使您可以分析来自大型生产软件的 100% 未采样事务数据,以生成有意义的分布式跟踪和指标,这些指标有助于解释性能行为并加速根本原因分析。在此任务结束时,Istio 会将跟踪跨度从代理发送到 Lightstep Satellite 池,使其可用于 Web UI。默认情况下,所有 HTTP 请求都会被捕获(要查看端到端跟踪,即使您的代码没有加入跟踪,也需要转发 OT 标头)。
如果您只想直接从 Istio 收集跟踪跨度(而不是直接在代码中添加特定仪器),那么只要您的服务转发 由跟踪生成的 HTTP 头,您就不需要配置任何跟踪器。
此任务以 Bookinfo 示例应用程序为例。
在您开始之前
确保您拥有 Lightstep 帐户。 注册 免费试用 Lightstep。
如果您使用的是 本地卫星,请确保您已配置一个带有 TLS 证书且公开安全 GRPC 端口的卫星池。有关设置卫星的详细信息,请参阅 安装和配置卫星。
对于 Lightstep 公共卫星 或 开发者卫星,您的卫星已配置。但是,您需要下载 此证书 到本地目录。
确保您拥有 Lightstep 访问令牌。访问令牌允许您的应用与您的 Lightstep 项目通信。
部署 Istio
如何部署 Istio 取决于您使用的卫星类型。
使用本地卫星部署 Istio
这些说明不假设 TLS。如果您对卫星池使用 TLS,请遵循 公共卫星池 的配置,但使用您自己的证书和您自己的池端点(host:port
)。
您需要使用卫星地址以
<Host>:<Port>
格式的地址部署 Istio,例如lightstep-satellite.lightstep:9292
。您可以在 配置 文件中找到此地址。使用以下配置参数指定部署 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 证书的本地卫星,请执行以下步骤。
将您的卫星池的证书颁发机构证书存储为默认命名空间和
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
使用以下配置参数指定部署 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 应用程序
为了验证上一步的成功,请确认您在 shell 中设置了
GATEWAY_URL
环境变量。向示例应用程序发送流量。
$ curl http://$GATEWAY_URL/productpage
可视化跟踪数据
加载 Lightstep Web UI。您将在服务目录中看到三个 Bookinfo 服务。
服务目录中的 Bookfinder 服务 导航到资源管理器视图。
资源管理器视图 在顶部找到查询栏。查询栏允许您通过 **服务**、**操作** 和 **标签** 值交互式地筛选结果。
从 **服务** 下拉列表中选择
productpage.default
。点击 **运行**。您将看到类似于以下内容的结果
资源管理器 点击延迟直方图下方示例跟踪表中的第一行,以查看与您刷新
/productpage
对应的详细信息。此页面将显示与以下类似的内容详细跟踪视图
屏幕截图显示该跟踪由一组跨度组成。每个跨度对应于执行 /productpage
请求期间调用的 Bookinfo 服务。
跟踪中的两个跨度表示每个 RPC。例如,从 productpage
到 reviews
的调用以用 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 秘密。
要删除 Bookinfo 应用程序,请参考 Bookinfo 清理 指示。
删除为 Lightstep 生成的秘密
$ kubectl delete secret lightstep.cacert