度量和日志的常见问题
可以通过 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 规范中。