指标和日志常见问题解答
Istio 指标可以通过 REST 访问吗?
您可以使用 Prometheus 收集有关 Istio 的遥测数据。然后使用 Prometheus 的 HTTP API 查询这些数据。
代理内遥测(又名 v2)和基于 Mixer 的遥测(又名 v1)报告的遥测有什么区别?
与基于 Mixer 的遥测(又名 v1)方法相比,代理内遥测(又名 v2)减少了资源成本并提高了代理性能,并且是 Istio 中显示遥测的首选机制。但是,v1 和 v2 之间报告的遥测有一些区别,如下所示
缺少针对出网流量的标签 代理内遥测依赖于 Envoy 代理之间的元数据交换来收集信息,例如对端工作负载名称、命名空间和标签。在基于 Mixer 的遥测中,此功能由 Mixer 作为将请求属性与平台数据合并的一部分来执行。这种元数据交换由 Envoy 代理通过为 HTTP 协议添加特定的 HTTP 标头或为 TCP 协议增强 ALPN 协议来执行,如 此处 所述。这要求在客户端和服务器工作负载中都注入 Envoy 代理,这意味着当一个对端不在网格中时报告的遥测将缺少对端属性,例如工作负载名称、命名空间和标签。但是,如果两个对端都注入了代理,则 此处 提到的所有标签都可以在生成的指标中找到。当服务器工作负载位于网格之外时,服务器工作负载元数据仍然会分发到客户端 sidecar,导致客户端指标的服务器工作负载元数据标签填充。
TCP 元数据交换需要 mTLS TCP 元数据交换依赖于 Istio ALPN 协议,该协议需要为 Envoy 代理启用双向 TLS (mTLS) 以成功交换元数据。这意味着,如果在您的集群中没有启用 mTLS,则 TCP 协议的遥测将不包括对端信息,例如工作负载名称、命名空间和标签。
没有配置直方图指标自定义桶的机制 基于 Mixer 的遥测支持为直方图类型指标(如请求持续时间和 TCP 字节大小)自定义桶。代理内遥测没有这样的可用机制。此外,代理内遥测中延迟指标可用的桶为毫秒,而在基于 Mixer 的遥测中为秒。但是,在代理内遥测中,默认情况下,在较低的延迟级别,延迟指标可以使用更多桶。
没有针对短暂指标的指标过期 基于 Mixer 的遥测支持指标过期,其中在可配置的时间段内未生成的指标将被注销,以供 Prometheus 收集。这在诸如一次性作业等生成短暂指标的场景中很有用。注销指标可防止报告未来不会更改的指标,从而减少 Prometheus 中的网络流量和存储。代理内遥测中没有这种过期机制。可以找到此问题的解决方法 此处.
如何管理短暂指标?
短暂指标可能会阻碍 Prometheus 的性能,因为它们通常是标签基数的主要来源。基数是标签唯一值数量的度量。要管理短暂指标对 Prometheus 的影响,您必须首先确定高基数指标和标签。Prometheus 在其 /status
页面提供基数信息。可以使用 PromQL 检索更多信息。有几种方法可以减少 Istio 指标的基数
- 禁用主机头回退。
destination_service
标签是高基数的一个潜在来源。如果 Istio 代理无法从其他请求元数据中确定目标服务,则destination_service
的值将默认为主机头。如果客户端使用各种主机头,这可能会导致destination_service
的值很多。在这种情况下,请按照 指标自定义 指南禁用网格范围内的主机头回退。要为特定工作负载或命名空间禁用主机头回退,您需要复制 statsEnvoyFilter
配置,将其更新为禁用主机头回退,并使用更具体的选择器应用它。此问题 提供了有关如何实现此目标的更多详细信息。 - 从收集中删除不必要的标签。如果不需要具有高基数的标签,您可以使用 指标自定义 通过
tags_to_remove
将其从指标收集中删除。 - 规范化标签值,通过联合或分类来实现。如果需要标签提供的信息,可以使用 Prometheus 联合 或 请求分类 来规范化标签。
如何迁移现有的 Mixer 功能?
Mixer 已 在 Istio 1.8 版本中删除。如果您仍然依赖 Mixer 的内置适配器或任何用于网格扩展的进程外适配器,则需要迁移。
对于内置适配器,提供了几个替代方案
Prometheus
和Stackdriver
集成被实现为 代理扩展。可以通过 请求分类 和 Prometheus 指标自定义 来实现对这两个扩展生成的遥测的自定义。- 全局和本地速率限制(
memquota
和redisquota
适配器)功能通过 基于 Envoy 的速率限制解决方案 提供。 OPA
适配器被 基于 Envoy ext-authz 的解决方案 替换,该解决方案支持 与 OPA 策略代理集成.
对于自定义进程外适配器,强烈建议迁移到基于 Wasm 的扩展。请参考有关 Wasm 模块开发 和 扩展分发 的指南。作为临时解决方案,您可以 在 Mixer 中启用 Envoy ext-authz 和 gRPC 访问日志 API 支持,这使您可以在仍然使用 1.7 Mixer 和进程外适配器的情况下将 Istio 升级到 1.7 之后的版本。这将为您提供更多时间迁移到基于 Wasm 的扩展。请注意,此临时解决方案尚未经过实战测试,并且不太可能得到补丁修复,因为它只在 Istio 1.7 分支上可用,该分支在 2021 年 2 月之后已超出支持窗口。
Prometheus 适配器可以在非 Kubernetes 环境中使用吗?
您可以使用 docker-compose 安装 Prometheus。
如何在 Istio 中找出请求发生了什么?
您可以启用 跟踪 以确定请求在 Istio 中的流程。
此外,您可以使用以下命令了解更多关于网格状态的信息
istioctl proxy-config
:在 Kubernetes 中运行时检索有关代理配置的信息# Retrieve information about bootstrap configuration for the Envoy instance in the specified pod. $ istioctl proxy-config bootstrap productpage-v1-bb8d5cbc7-k7qbm # Retrieve information about cluster configuration for the Envoy instance in the specified pod. $ istioctl proxy-config cluster productpage-v1-bb8d5cbc7-k7qbm # Retrieve information about listener configuration for the Envoy instance in the specified pod. $ istioctl proxy-config listener productpage-v1-bb8d5cbc7-k7qbm # Retrieve information about route configuration for the Envoy instance in the specified pod. $ istioctl proxy-config route productpage-v1-bb8d5cbc7-k7qbm # Retrieve information about endpoint configuration for the Envoy instance in the specified pod. $ istioctl proxy-config endpoints productpage-v1-bb8d5cbc7-k7qbm # Try the following to discover more proxy-config commands $ istioctl proxy-config --help
kubectl get
:获取有关网格中不同资源以及路由配置的信息# List all virtual services $ kubectl get virtualservices
我可以使用 Prometheus 刮取 Istio 中的应用程序指标吗?
是的。 Prometheus 是一个开源监控系统和时间序列数据库。您可以将 Prometheus 与 Istio 配合使用以记录指标,以跟踪 Istio 以及服务网格中应用程序的运行状况。您可以使用 Grafana 和 Kiali 等工具来可视化指标。请参阅 Prometheus 配置 以了解如何启用指标收集。
一些注意事项
- 如果 Prometheus pod 在 istiod pod 生成所需的证书并将其分发到 Prometheus 之前启动,则需要重新启动 Prometheus pod 才能从受双向 TLS 保护的目标收集数据。
- 如果您的应用程序在专用端口上公开 Prometheus 指标,则应将该端口添加到服务和部署规范中。