遥测 FAQ

遥测数据可以通过 REST 接口查看吗?

可以使用 Prometheus 收集有关 Istio 的遥测数据。然后使用 Prometheus’s HTTP API 查询数据。

为什么 Istio 不能取代应用程序来传播 header?

尽管 Istio sidecar 将处理与之关联的应用程序实例的入站和出站请求,但它并不能隐式地将出站请求和与该出站请求对应的入站请求建立联系。 实现这种相关性的唯一方法是应用程序传递从入站请求到出站请求的关联信息(比如,Header)。

如何控制由 sidecar 上报的数据?

有时,禁止上报特定 URL 的访问信息也是有用的。比如,用户可能会想要排除一些健康检查的 URL。为了跳过特定 URL 的遥测报告,用户可以通过使用遥测配置中的 match 子句来实现。比如:

match: source.name != "health"
请求没有被追踪

从 Istio 1.0.3 开始,使用 helm chart 安装的 Istio,其默认追踪采样率已经降低到 1%。 这意味着 Istio 捕获的 100 个追踪实例中只有 1 个将被报告给追踪后端。 istio-demo.yaml 文件中的采样率仍设为 100%。 有关如何设置采样率的更多信息,请参见本节

Prometheus 适配器可以用于非 Kubernetes 环境吗?

可以使用 docker-compose 来安装 Prometheus,这与安装应用程序十分类似。此外,如果没有 Kubernetes API 服务器,像 Mixer 这样的组件将会对规则、处理程序以及实例进行本地配置。

Istio 支持追踪 vert.x 事件总线消息吗?

Istio 目前不支持 pub/sub 和事件总线协议。任何使用追踪技术的场景都是尽力而为的,可能会有消息丢失。

如何禁用 Istio 发送追踪 span 至 Zipkin?

如果已启用追踪,则可以按如下方式禁用:

# 使用 Istio 所在命名空间名称来替换 <istio namespace>,例如:istio-system。
TRACING_POD=`kubectl get po -n <istio namespace> | grep istio-tracing | awk ‘{print $1}`
$ kubectl delete pod $TRACING_POD -n <istio namespace>
$ kubectl delete services tracing zipkin   -n <istio namespace>
# 从 mixer 部署中删除 Zipkin 的 url。
$ kubectl -n istio-system edit deployment istio-telemetry
# 然后手工从文件中删除 trace_zipkin_url 的实例并保存。

然后按照分布式追踪任务的清理部分的步骤进行操作。

如果完全不想使用追踪功能,可在 istio-demo.yamlistio-demo-auth.yaml禁用追踪功能,或者在安装 Istio 时不启用它。

Istio 能将追踪信息发送到外部 ZipKin 实例吗?

要实现该功能,必须使用 Zipkin 实例的完全限定域名。例如:

zipkin.mynamespace.svc.cluster.local

在 Istio 使用 ZipKin 功能时,是否可以返回 x-request-id?

除非复制 Header,否则 Istio 也无法知道接受原始请求的应用程序何时给出响应消息。如果复制 Header,则可以将其包含在响应 Header 中。