Lightstep
此任务介绍如何配置 Istio 才能收集追踪 span,并且把收集到的 span 发送到 Lightstep。 Lightstep 可以分析来自大规模生产级软件的 100% 未采样的事务数据,并做出容易理解的的分布式追踪和指标信息,这有助于解释性能行为和并加速根因分析。 在此任务的结尾,Istio 将追踪 span 从代理发送到 Lightstep Satellite 池,以让它们在 web UI 上展示。默认情况下,所有的 HTTP 请求都被捕获(为了看到端到端的追踪,你的代码需要转发 OT 头,即使它没有参与到追踪)。
如果您只想直接从 Istio 收集追踪 span(而不是直接向您的代码添加特定的检测),那么您不需要配置任何追踪器,只要您的服务转发追踪器产生的 HTTP 请求头.
此任务使用 Bookinfo 的样例代码作为示例。
开始之前
确保你有一个 Lightstep 账户。这里可以免费注册试用 Lightstep。
如果您使用的是本地 Satellite, 请确保您有一个配置了 TLS 证书的 Satellite 池和一个公开的安全 GRPC 端口。 请参阅安装和配置 Satellite 获取更多有关设置 Satellite 的细节。
对于 Lightstep 公共 Satellite 或[开发者模式 Satellite](https://docs.lightstep.com/docs/learn-about -satellites#developer-satellites), 您的 Satellite 已经配置好了。但是,您需要将此证书下载到本地目录。
确保您有 Lightstep 的访问令牌。 访问令牌允许您的应用程序与您的 Lightstep 项目进行通信。
部署 Istio
如何部署 Istio 取决于您使用的 Satellite 类型。
使用本地 Satellite 部署 Istio{#deploy-istio-with-on-premise- satellites}
这些说明不假定使用 TLS。如果您为 Satellite 池使用 TLS,请遵循公共 Satellite 池的配置,
但使用您自己的证书和您自己的池的端点(host:port
)。
您需要用 Satellite 地址部署 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>" \
使用公共或开发者模式 Satellite 部署 Istio
如果您使用的是公共或开发者模式 Satellite,或者如果您使用的是带有 TLS 证书的本地 Satellite,请按照这些步骤操作。
把 Satellite 池证书颁发机构发的证书作为一个密钥存储在默认的命名空间下。 对于 Lightstep Tracing 用户,要在这里下载并使用这个证书。 如果你把 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 moute `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 服务。
导航到 Explorer 视图。
在顶部找到查询栏,在这里你可以用 Service 、Operation 和 Tag 的值进行过滤查询。
从 Service 下拉列表中选择
productpage.default
。点击 Run 。可以看到如下类似的内容:
在延迟直方图下面点击示例追踪表格的第一行,就可以查看
/productpage
刷新后的详细信息。该页面类似下面:
这个截图显示了该追踪是由一组 span 组成。每一个 span 对应着在执行 /productpage
请求期间调用的一个 Bookinfo 服务。
追踪中的两个 span 表示一个 RPC 请求。例如从 productpage
到 reviews
的请求调用,以操作标签 reviews.default.svc.cluster.local:9080/*
和服务标签 productpage.default: proxy client
的 span 开始。该服务表示是这个调用的客户端 span。截图显示此次调用耗时 15.30 毫秒。
第二个 span 标记有操作标签 reviews.default.svc.cluster.local:9080/*
操作和服务标签 reviews.default: proxy server
。
第二个 span 是第一个 span 的下一级,表示调用的服务端 span。截图显示此次调用耗时 14.60 毫秒。
追踪采样
Istio 通过配置追踪采样百分比来捕获追踪信息。想了解如何修改追踪采样百分比, 请访问分布式追踪采样部分。 使用 Lightstep 时,我们不建议将追踪采样的百分比降低到 100% 以下。要处理高流量的网格,请考虑扩大您的 Satellite 池的大小。
清除
如果你不想继续执测试操作任务,可以从集群中删除 Bookinfo 示例应用程序和所有的 Lightstep 密钥。
删除 Bookinfo 应用程序,请参阅清除 Bookinfo 说明。
删除给 Lightstep 生成的密钥:
$ kubectl delete secret lightstep.cacert