度量和日志的常见问题
可以通过 REST 接口访问 Istio 指标吗?
您可以使用 Prometheus 收集有关 Istio 的遥测数据。然后,使用 Prometheus 的 HTTP API 来查询该数据。
如何控制 sidecar 上报数据?
有时会对访问的特定 URL 排除在上报之外,这样做是有用的。例如,你可能希望把健康检测的 URL 剔除。可以配置使用 match
语法来跳过匹配到的 URL 上报,比如:
match: source.name != "health"
如何管理短期指标?
短期指标可能会阻碍 Prometheus 的性能,因为它们通常是标签基数的重要来源。基数是标签唯一值数量的度量。要管理短期指标对 Prometheus 的影响,您必须首先确定高基数指标和标签。Prometheus 在其 /status
页面上提供基数信息。可以通过 PromQL 检索其他信息。
有几种方法可以减少 Istio 指标的基数:
- 禁用主机报头回退。
destination_service
标签是高基数的一个潜在来源。 如果 Istio 代理无法从其他请求元数据中确定目标服务,则destination_service
的值默认出现在主机报头中。 如果客户端使用各种主机报头,这可能会导致destination_service
产生的大量值。 在这种情况下,请按照指标自定义指南禁用主机报头回退网格范围。 要禁用特定工作负载或命名空间的主机头回退,您需要复制统计EnvoyFilter
配置,更新它以禁用主机报头回退,并应用一个更具体的选择器。 这个问题有更多关于如何实现这一点的细节。 - 从集合中删除不必要的标签。如果不需要具有高基数的标签,您可以使用
tags_to_remove
通过指标自定义 将其从指标集合中删除。 - 通过联合或分类规范化标签值。 如果需要标签提供的信息,您可以使用 Prometheus 联邦或请求分类来规范化标签。
如何迁移现有的 Mixer 功能?
Mixer在 Istio 1.8 版本中被移除。 如果您仍然依赖于 Mixer 的内置适配器或任何进程外的适配器进行网格扩展,则需要迁移。
对于内置适配器,提供了几种替代方案:
Prometheus
和Stackdriver
集成是作为代理扩展实现的。 这两个扩展生成的 Telemetry 的定制可以通过请求分类和 Prometheus 指标定制来实现。- Global 和 Local Rate-Limiting (
memquota
和redisquota
适配器)功能是通过基于 Envoy 的速率限制解决方案提供的。 OPA
适配器被基于 Envoy ext-authz 的解决方案所取代,该解决方案支持与 OPA 策略代理的集成。
对于自定义进程外适配器,强烈建议迁移到基于 Wasm 的扩展。请参阅有关 Wasm 模块开发和扩展分发的指南。作为临时解决方案,您可以在 Mixer 中启用 Envoy ext-authz 和 gRPC 访问日志 API 支持,这允许您将 Istio 升级到发布 1.7 版本,同时仍然使用 1.7 Mixer 的进程外适配器。这将使您有更多时间迁移到基于 Wasm 的扩展。请注意,此临时解决方案未经实战测试,不太可能得到补丁修复,因为它只在 Istio 1.7 分支上可用,这是在 2021 年 2月 之后的支持窗口之外的。
Prometheus 适配器能在非 Kubernetes 环境下使用吗?
您可以使用 docker-compose 来安装 Prometheus。
怎样查看 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
我可以使用 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 规范中。