指标和日志常见问题解答

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 的值很多。在这种情况下,请按照 指标自定义 指南禁用网格范围内的主机头回退。要为特定工作负载或命名空间禁用主机头回退,您需要复制 stats EnvoyFilter 配置,将其更新为禁用主机头回退,并使用更具体的选择器应用它。此问题 提供了有关如何实现此目标的更多详细信息。
  • 从收集中删除不必要的标签。如果不需要具有高基数的标签,您可以使用 指标自定义 通过 tags_to_remove 将其从指标收集中删除。
  • 规范化标签值,通过联合或分类来实现。如果需要标签提供的信息,可以使用 Prometheus 联合请求分类 来规范化标签。
如何迁移现有的 Mixer 功能?

Mixer 已 在 Istio 1.8 版本中删除。如果您仍然依赖 Mixer 的内置适配器或任何用于网格扩展的进程外适配器,则需要迁移。

对于内置适配器,提供了几个替代方案

对于自定义进程外适配器,强烈建议迁移到基于 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 以及服务网格中应用程序的运行状况。您可以使用 GrafanaKiali 等工具来可视化指标。请参阅 Prometheus 配置 以了解如何启用指标收集。

一些注意事项

  • 如果 Prometheus pod 在 istiod pod 生成所需的证书并将其分发到 Prometheus 之前启动,则需要重新启动 Prometheus pod 才能从受双向 TLS 保护的目标收集数据。
  • 如果您的应用程序在专用端口上公开 Prometheus 指标,则应将该端口添加到服务和部署规范中。