度量和日志的常见问题

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

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

如何控制 sidecar 上报数据?

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

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

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

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

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

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

  • istioctl proxy-config:获取 Kubernetes 运行期间的 proxy 配置信息:

    # 在指定的 pod 中 Envoy 实例的启动(bootstrap)配置信息。
    $ istioctl proxy-config bootstrap productpage-v1-bb8d5cbc7-k7qbm
    
    # 在指定的 pod 中 Envoy 实例的集群(cluster)配置信息。
    $ istioctl proxy-config cluster productpage-v1-bb8d5cbc7-k7qbm
    
    # 在指定的 pod 中 Envoy 实例的监听器(listener)配置信息。
    $ istioctl proxy-config listener productpage-v1-bb8d5cbc7-k7qbm
    
    # 在指定的 pod 中 Envoy 实例的路由(route)配置信息。
    $ istioctl proxy-config route productpage-v1-bb8d5cbc7-k7qbm
    
    # 在指定的 pod 中 Envoy 实例的端点(endpoint)配置信息。
    $ istioctl proxy-config endpoints productpage-v1-bb8d5cbc7-k7qbm
    
    # 查看更多 proxy-config 的用法可用如下命令
    $ istioctl proxy-config --help
    
  • kubectl get:通过路由配置获取网格中不同资源的信息:

    # 列出所有的 virtual services
    $ kubectl get virtualservices
    
  • Mixer 访问日志:Mixer 的访问日志中包含了关于请求的信息。您可以通过这样获取:

    # 将 <istio namespace> 处改为您自己的 Istio namespace。比如:istio-system
    $ TELEMETRY_POD=`kubectl get po -n <istio namespace> | grep istio-telemetry | awk '{print $1;}'`
    $ 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 规范中。