Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 21 additions & 5 deletions content/zh/about/faq/metrics-and-logs/metric-expiry.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,32 @@ weight: 20
基数是标签唯一值数量的度量。要管理短期指标对 Prometheus 的影响,
您必须首先确定高基数指标和标签。Prometheus 在其 `/status` 页面上提供基数信息。
可以通过 [PromQL](https://www.robustperception.io/which-are-my-biggest-metrics)
检索其他信息。有几种方法可以减少 Istio 指标的基数:
检索其他信息。

有几种方法可以减少 Istio 指标的基数:

* 在 Istio 1.28.0 及更高版本中,为工作负载 Pod 添加
[`sidecar.istio.io/statsEvictionInterval`](/zh/docs/reference/config/annotations/) 注解,
以使非活动对等节点的指标过期。这将有助于防止 Istio 代理的指标抓取响应无限增长,
从而避免作业实例的 `scrape_samples_scraped` 和 `scrape_response_size_bytes`
指标值过大。这并不能阻止 Prometheus TSDB 索引膨胀和标签频繁变化,
因为 Prometheus 仍然必须记录所有唯一值。但它有助于减少抓取时过多的内存使用。
* 禁用主机报头回退。
`destination_service` 标签是高基数的一个潜在来源。
如果 Istio 代理无法从其他请求元数据中确定目标服务,则 `destination_service` 的值默认出现在主机报头中。
如果客户端使用各种主机报头,这可能会导致 `destination_service` 产生的大量值。
在这种情况下,请按照[指标自定义](/zh/docs/tasks/observability/metrics/customize-metrics/)指南禁用主机报头回退网格范围。
要禁用特定工作负载或命名空间的主机头回退,您需要复制统计 `EnvoyFilter` 配置,更新它以禁用主机报头回退,并应用一个更具体的选择器。
[这个问题](https://github.com/istio/istio/issues/25963#issuecomment-666037411)有更多关于如何实现这一点的细节。
* 从集合中删除不必要的标签。如果不需要具有高基数的标签,您可以使用 `tags_to_remove`
通过[指标自定义](/zh/docs/tasks/observability/metrics/customize-metrics/)将其从指标集合中删除。
* 通过联合或分类规范化标签值。如果需要标签提供的信息,
您可以使用 [Prometheus 联邦](/zh/docs/ops/best-practices/observability/#using-prometheus-for-production-scale-monitoring)或[请求分类](/zh/docs/tasks/observability/metrics/classify-metrics/)来规范化标签。
* 禁用不必要的标签或整个指标系列。如果不需要基数较高的标签或指标,
您可以通过使用 `Telemetry` 资源的 [`metricsOverrides`](/zh/docs/reference/config/telemetry/#MetricsOverrides) 字段,
在指标生成过程中将其删除(参见[指标自定义](/zh/docs/tasks/observability/metrics/customize-metrics/))。
有关示例,请参阅 [Telemetry API](/zh/docs/tasks/observability/telemetry/)。
* 通过联邦或分类来规范化标签值。如果需要标签提供的信息,
可以使用 [Prometheus 联邦](/zh/docs/ops/best-practices/observability/#using-prometheus-for-production-scale-monitoring)、
Istio 工作负载 Kubernetes 标签(例如 [`service.istio.io/workload-name`](/zh/docs/reference/config/labels/index.html))
或[请求分类](/zh/docs/tasks/observability/metrics/classify-metrics/)来规范化标签。

不建议使用 Prometheus 的抓取时间标签重写功能来删除不需要的标签以降低基数。
Prometheus 在标签重写过程中不会执行聚合操作,因此删除标签可能会创建冲突的时间序列,
即两个或多个时间序列具有相同的标签但值不同。建议使用 Istio 的 `Telemetry` 配置来抑制不需要的维度。
6 changes: 4 additions & 2 deletions content/zh/about/faq/metrics-and-logs/telemetry-v1-vs-v2.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,11 @@ weight: 10
代理内遥测没有这样的可用机制。此外,与基于 Mixer 的遥测中的秒数相比,代理内遥测中可用于延迟指标的存储桶以毫秒为单位。
但是,默认情况下,代理内遥测中有更多存储桶可用于较低延迟级别的延迟指标。

* **短期指标没有指标过期**
* **默认情况下,短期指标不会设置指标过期时间**

基于 Mixer 的遥测支持指标过期,即在可配置的时间量内未生成的指标将被取消注册以供 Prometheus 采集。
这在生成短期指标的场景(例如一次性作业)中很有用。取消注册指标可防止报告将来不再更改的指标,
从而减少 Prometheus 中的网络流量和存储。这个过期机制在代理内遥测中不可用。
可以在[此处](/zh/about/faq/#metric-expiry)找到解决此问题的方法。

在较新版本的 Istio 中,[`sidecar.istio.io/statsEvictionInterval` 注解]((/zh/docs/reference/config/annotations/))提供了类似的功能,
但默认情况下未启用指标过期功能。另请参阅[常见问题解答:指标过期](/zh/about/faq/#metric-expiry)。
62 changes: 41 additions & 21 deletions content/zh/docs/reference/config/metrics/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,48 +53,61 @@ aliases:
* **TCP 已关闭连接数** (`istio_tcp_connections_closed_total`):这是一个 `COUNTER`
类型的指标,用于记录 TCP 已关闭的连接总数。

Istio 发出的指标可以通过 [`Telemetry` 资源的 `metricsOverrides` 字段](/zh/docs/reference/config/telemetry/#MetricsOverrides)
进行覆盖;详情请参阅 [Telemetry API](/zh/docs/tasks/observability/telemetry/)。

## 标签 {#label}

* **Reporter**:标识请求指标的上报端。如果指标由服务端 Istio 代理上报,则设置为
标签被添加到指标中,用于标识唯一的序列或提供辅助信息。

在 Prometheus 抓取数据时显示的标签名称以及在配置中引用该标签时使用的名称,如下所示(括号内)。

* **Reporter**(`reporter`):标识请求指标的上报端。如果指标由服务端 Istio 代理上报,则设置为
`destination`,如果指标由客户端 Istio 代理或网关上报,则设置为 `source`。

* **Source Workload**:标识源工作负载的名称,如果缺少源信息,则标识为 `unknown`。
* **Source Workload**(`source_workload`):标识源工作负载的名称,如果缺少源信息,则标识为 `unknown`。

另请参阅工作负载标签 [`service.istio.io/workload-name`](/zh/docs/reference/config/labels/index.html)
和代理环境变量 `ISTIO_META_WORKLOAD_NAME`。

* **Source Workload Namespace**:标识源工作负载的命名空间,如果缺少源信息,则标识为 `unknown`。
* **Source Workload Namespace**(`source_workload_namespace`):标识源工作负载的命名空间,如果缺少源信息,则标识为 `unknown`。

* **Source Principal**:标识流量源的对等主体。当使用对等身份验证时设置。
* **Source Principal**(`source_princpial`):标识流量源的对等主体。当使用对等身份验证时设置。

* **Source App**:根据源工作负载的 `app` 标签标识源应用程序,如果源信息丢失,则标识为 `unknown`。
* **Source App**(`source_app`):根据源工作负载的 `app` 标签标识源应用程序,如果源信息丢失,则标识为 `unknown`。

* **Source Version**:标识源工作负载的版本,如果源信息丢失,则标识为 `unknown`。
* **Source Version**(`source_version`):标识源工作负载的版本,如果源信息丢失,则标识为 `unknown`。

* **Destination Workload**:标识目标工作负载的名称,如果目标信息丢失,则标识为 `unknown`。
* **Destination Workload**(`destination_workload`):标识目标工作负载的名称,如果目标信息丢失,则标识为 `unknown`。

* **Destination Workload Namespace**:标识目标工作负载的命名空间,
另请参阅工作负载标签 [`service.istio.io/workload-name`](/zh/docs/reference/config/labels/index.html)
和代理环境变量 `ISTIO_META_WORKLOAD_NAME`。

* **Destination Workload Namespace**(`DESTINATION_WORKLOAD_NAMESPACE`):标识目标工作负载的命名空间,
如果目标信息丢失,则标识为 `unknown`。

* **Destination Principal**:标识流量目标的对等主体。使用对等身份验证时设置。
* **Destination Principal**(`destination_principal`):标识流量目标的对等主体。使用对等身份验证时设置。

* **Destination App**:它根据目标工作负载的 `app` 标签标识目标应用程序,
* **Destination App**(`destination_app`):它根据目标工作负载的 `app` 标签标识目标应用程序,
如果目标信息丢失,则标识为 `unknown`。

* **Destination Version**:标识目标工作负载的版本,如果目标信息丢失,则标识为 `unknown`。
* **Destination Version**(`destination_version`):标识目标工作负载的版本,如果目标信息丢失,则标识为 `unknown`。

* **Destination Service**:标识负责传入请求的目标服务主机。例如 `details.default.svc.cluster.local`。
* **Destination Service**(`destination_service`):标识负责传入请求的目标服务主机。例如 `details.default.svc.cluster.local`。

* **Destination Service Name**:标识目标服务名称。例如:`details`。
* **Destination Service Name**(`destination_service_name`):标识目标服务名称。例如:`details`。

* **Destination Service Namespace**:标识目标服务的命名空间。
* **Destination Service Namespace**(`destination_service_namespace`):标识目标服务的命名空间。

* **Request Protocol**:标识请求的协议。设置为请求或连接协议。
* **Request Protocol**(`request_protocol`):标识请求的协议。设置为请求或连接协议。

* **Response Code**:标识请求的响应代码。此标签仅出现在 HTTP 指标上。
* **Response Code**(`response_code`):标识请求的响应代码。此标签仅出现在 HTTP 指标上。

* **Connection Security Policy**:标识请求的服务认证策略。当 Istio
* **Connection Security Policy**(`connection_security_policy`):标识请求的服务认证策略。当 Istio
使用安全策略来保证通信安全时,如果指标由服务端 Istio 代理上报,则将其设置为
`mutual_tls`。如果指标由客户端 Istio 代理上报,由于无法正确填充安全策略,因此将其设置为 `unknown`。

* **Response Flags**:有关来自代理的响应或连接的其他详细信息。如果是 Envoy,请参阅
* **Response Flags**(`response_flags`):有关来自代理的响应或连接的其他详细信息。如果是 Envoy,请参阅
[Envoy 访问日志](https://www.envoyproxy.io/docs/envoy/latest/configuration/observability/access_log/usage#config-access-log-format-response-flags)中的
`%RESPONSE_FLAGS%` 获取更多信息。

Expand All @@ -108,10 +121,17 @@ aliases:
destination_canonical_revision
{{< /text >}}

* **Destination Cluster**:目标工作负载的集群名称。这是由集群安装时的
另请参阅标签 [`service.istio.io/canonical-name`](/zh/docs/reference/config/labels/#ServiceCanonicalName)
和 [`service.istio.io/canonical-revision`](/zh/docs/reference/config/labels/#ServiceCanonicalRevision)。

* **Destination Cluster**(`destination_cluster`):目标工作负载的集群名称。这是由集群安装时的
`global.multiCluster.clusterName` 设置的。

* **Source Cluster**:源工作负载的集群名称。这是由集群安装时的
* **Source Cluster**(`source_cluster`):源工作负载的集群名称。这是由集群安装时的
`global.multiCluster.clusterName` 设置的。

* **gRPC Response Status**:这标识了 gRPC 的响应状态。这个标签仅出现在 gRPC 指标上。
* **gRPC Response Status**(`grpc_response_status`):这标识了 gRPC 的响应状态。这个标签仅出现在 gRPC 指标上。

可以使用 [`Telemetry` 资源的 `metricsOverrides.tagOverride` 字段](/zh/docs/reference/config/telemetry/#MetricsOverrides)来禁用指标维度;
详情请参阅 [Telemetry API](/zh/docs/tasks/observability/telemetry/)。
此外,还可以使用[指标分类](/zh/docs/tasks/observability/metrics/classify-metrics/)过滤器添加或修改标签。