度量和日志的常见问题
可以通过 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 中一个请求的生命周期?
用户可以通过打开追踪功能来获知 Istio 中一个请求的流程。
另外,用户可以使用如下的一些指令来获取网格状态的更多信息:
istioctl proxy-config
:如果是在 Kubernetes 中运行,这一命令可以获取到代理配置方面的信息。# 获取特定 Pod 中 Envoy 实例的启动配置信息。 $ istioctl proxy-config bootstrap productpage-v1-bb8d5cbc7-k7qbm # 获取特定 Pod 中 Envoy 实例的集群配置信息。 $ istioctl proxy-config cluster productpage-v1-bb8d5cbc7-k7qbm # 获取特定 Pod 中 Envoy 实例的监听器配置信息。 $ istioctl proxy-config listener productpage-v1-bb8d5cbc7-k7qbm # 获取特定 Pod 中 Envoy 实例的路由配置信息。 $ istioctl proxy-config route productpage-v1-bb8d5cbc7-k7qbm # 获取特定 Pod 中 Envoy 实例的 Endpoint 配置信息。 $ istioctl proxy-config endpoints productpage-v1-bb8d5cbc7-k7qbm # 该命令中包含更多的相关内容: $ istioctl proxy-config --help
kubectl get
:获取不同资源在网格以及路由配置的信息。# 罗列所有的虚拟服务 $ kubectl get virtualservices
Mixer 访问日志:Mixer 所记录的访问日志包含了请求的一些信息。 用户可以通过如下命令来获取:
# 使用 Istio 网格的命名空间来填充 <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
我能在 Istio 中使用 Prometheus 抓取应用指标么?
可以。Istio 发行包中带有 Prometheus 配置,不论是否启用了双向 TLS,都可以借此配置来收集应用的指标数据。
在没有启用双向 TLS 的环境中,kubernetes-pods
任务会从 Pod 中收集应用的指标数据。如果 Istio 启用了双向 TLS,就由 kubernetes-pods-istio-secure
任务完成应用指标数据的收集工作。
两个 Job 都需要在欲抓取指标的应用 Pod 中加入如下注解:
prometheus.io/scrape: "true"
prometheus.io/path: "<metrics path>"
prometheus.io/port: "<metrics port>"
一点说明:
如果在 Citadel Pod 能够生成必要证书并分发给 Prometheus 之前启动了 Prometheus Pod,为了能够在双向 TLS 环境下抓取应用指标,必须重启 Prometheus Pod。
如果你的应用在一个单独的端口上开放 Prometheus 指标接口,这个端口需要加入 Service 和 Deployment 清单之中。