度量和日志的常见问题

可以通过 REST 接口访问 Istio 指标吗?

您可以使用 Prometheus 收集有关 Istio 的遥测数据。然后,使用 Prometheus 的 HTTP API 来查询该数据。

如何控制 sidecar 上报数据?

有时会对访问的特定 URL 排除在上报之外,这样做是有用的。例如,你可能希望把健康检测的 URL 剔除。可以配置使用 match 语法来跳过匹配到的 URL 上报,比如:

  1. match: source.name != "health"
Prometheus 适配器能在非 Kubernetes 环境下使用吗?

您可以使用 docker-compose 来安装 Prometheus,这与您安装普通应用程序类似。与此同时,由于没有 Kubernetes API 服务,像 Mixer 这样的组件将需要被提供 rules/handlers/instances 的本地配置。

怎样查看 Istio 的请求都发生了什么?

您可以启用 tracing 以确定 Istio 中的请求是怎样流动的。

另外,您还可以使用如下命令以了解网格中的更多状态信息:

  1. # 在指定的 pod 中 Envoy 实例的启动(bootstrap)配置信息。
  2. $ istioctl proxy-config bootstrap productpage-v1-bb8d5cbc7-k7qbm
  3. # 在指定的 pod 中 Envoy 实例的集群(cluster)配置信息。
  4. $ istioctl proxy-config cluster productpage-v1-bb8d5cbc7-k7qbm
  5. # 在指定的 pod 中 Envoy 实例的监听器(listener)配置信息。
  6. $ istioctl proxy-config listener productpage-v1-bb8d5cbc7-k7qbm
  7. # 在指定的 pod 中 Envoy 实例的路由(route)配置信息。
  8. $ istioctl proxy-config route productpage-v1-bb8d5cbc7-k7qbm
  9. # 在指定的 pod 中 Envoy 实例的端点(endpoint)配置信息。
  10. $ istioctl proxy-config endpoints productpage-v1-bb8d5cbc7-k7qbm
  11. # 查看更多 proxy-config 的用法可用如下命令
  12. $ istioctl proxy-config --help
  • kubectl get:通过路由配置获取网格中不同资源的信息:
  1. # 列出所有的 virtual services
  2. $ kubectl get virtualservices
  • Mixer 访问日志: Mixer 的访问日志中包含了关于请求的信息。您可以通过这样获取:
  1. # 将 <istio namespace> 处改为您自己的 Istio namespace。 比如: istio-system
  2. $ TELEMETRY_POD=`kubectl get po -n <istio namespace> | grep istio-telemetry | awk '{print $1;}'`
  3. $ kubectl logs $TELEMETRY_POD -c mixer -n istio-system | grep accesslog
我可以使用 Prometheus 配合 Istio 抓取应用程序指标吗?

是的。Istio 附带 Prometheus 的配置,在启用或禁用双向 TLS 时启动收集应用程序指标的功能。

kubernetes-pods job 从没有双向 TLS 环境中的 pod 收集应用程序指标。当为 Istio 启用双向 TLS 时,kubernetes-pods-istio-secure job 从应用程序的 pod 中收集指标。

这两个 job 都要求将以下注释添加到需要从中收集应用程序指标的所有 deployment 中:

  • prometheus.io/scrape: "true"
  • prometheus.io/path: "<metrics path>"
  • prometheus.io/port: "<metrics port>"

一些注意事项:

  • 如果 Prometheus pod 在 Istio Citadel pod 生成所需证书并将其分发给 Prometheus 之前启动,则 Prometheus pod 需要重启以便收集双向 TLS 保护的目标信息。
  • 如果您的应用程序在专用端口上公开了 Prometheus 指标,则应将该端口添加到 service 和 deployment 规范中。