可观测性
Istio 为网格内所有服务通信生成详细的遥测数据。此遥测数据提供了服务行为的可观测性,使运营人员能够对应用程序进行故障排除、维护和优化,而不会给服务开发人员带来任何额外负担。通过 Istio,运营人员可以全面了解被监控的服务如何与其他服务以及 Istio 组件本身进行交互。
Istio 生成以下类型的遥测数据,以提供整体服务网格可观测性
- 指标。Istio 基于监控的四个“黄金信号”(延迟、流量、错误和饱和度)生成一组服务指标。Istio 还为网格控制平面提供详细的指标。还提供了一组基于这些指标构建的默认网格监控仪表板。
- 分布式追踪。Istio 为每个服务生成分布式追踪跨度,为操作人员提供对网格内调用流程和服务依赖关系的详细了解。
- 访问日志。当流量流入网格内的服务时,Istio 可以生成每个请求的完整记录,包括源和目标元数据。此信息使操作人员能够审计服务行为,直至单个工作负载实例级别。
指标
指标提供了一种监控和了解总体行为的方法。
为了监控服务行为,Istio 会为 Istio 服务网格中所有服务进出和内部的流量生成指标。这些指标提供有关行为的信息,例如流量的总体数量、流量中的错误率以及请求的响应时间。
除了监控网格内服务的行为外,监控网格本身的行为也很重要。Istio 组件会导出其自身内部行为的指标,以提供对网格控制平面的健康状况和功能的洞察。
代理级指标
Istio 指标收集始于 sidecar 代理(Envoy)。每个代理都会生成一组丰富的指标,涵盖通过代理的所有流量(包括入站和出站)。代理还提供有关代理自身管理功能的详细统计信息,包括配置和健康信息。
Envoy 生成的指标提供了在 Envoy 资源(例如侦听器和集群)粒度级别监控网格的能力。因此,要监控 Envoy 指标,需要了解网格服务与 Envoy 资源之间的关联。
Istio 使操作人员能够选择在每个工作负载实例上生成和收集哪些 Envoy 指标。默认情况下,Istio 仅启用 Envoy 生成的统计信息的一小部分子集,以避免压垮指标后端并减少与指标收集相关的 CPU 开销。但是,操作人员可以在需要时轻松扩展收集的代理指标集。这可以在降低整个网格监控成本的同时,实现对网络行为的有针对性的调试。
Envoy 文档站点 包含对Envoy 统计信息收集的详细概述。Envoy 统计信息上的操作指南提供了有关控制代理级指标生成的更多信息。
代理级指标示例
envoy_cluster_internal_upstream_rq{response_code_class="2xx",cluster_name="xds-grpc"} 7163
envoy_cluster_upstream_rq_completed{cluster_name="xds-grpc"} 7164
envoy_cluster_ssl_connection_error{cluster_name="xds-grpc"} 0
envoy_cluster_lb_subsets_removed{cluster_name="xds-grpc"} 0
envoy_cluster_internal_upstream_rq{response_code="503",cluster_name="xds-grpc"} 1
服务级指标
除了代理级指标外,Istio 还提供了一组面向服务的指标,用于监控服务通信。这些指标涵盖了四个基本的服务监控需求:延迟、流量、错误和饱和度。Istio 附带了一组默认的仪表板,用于根据这些指标监控服务行为。
标准 Istio 指标 默认情况下会导出到Prometheus。
服务级指标的使用完全是可选的。操作人员可以选择关闭这些指标的生成和收集,以满足其各自的需求。
服务级指标示例
istio_requests_total{
connection_security_policy="mutual_tls",
destination_app="details",
destination_canonical_service="details",
destination_canonical_revision="v1",
destination_principal="cluster.local/ns/default/sa/default",
destination_service="details.default.svc.cluster.local",
destination_service_name="details",
destination_service_namespace="default",
destination_version="v1",
destination_workload="details-v1",
destination_workload_namespace="default",
reporter="destination",
request_protocol="http",
response_code="200",
response_flags="-",
source_app="productpage",
source_canonical_service="productpage",
source_canonical_revision="v1",
source_principal="cluster.local/ns/default/sa/default",
source_version="v1",
source_workload="productpage-v1",
source_workload_namespace="default"
} 214
控制平面指标
Istio 控制平面还提供了一组自我监控指标。这些指标允许监控 Istio 本身(与网格内服务不同)的行为。
有关维护哪些指标的更多信息,请参阅参考文档。
分布式跟踪
分布式追踪提供了一种通过监控单个请求在网格中流动的过程来监控和了解行为的方法。追踪使网格操作人员能够了解服务依赖关系以及其服务网格内延迟的来源。
Istio 通过 Envoy 代理支持分布式追踪。代理会代表其代理的应用程序自动生成追踪跨度,只需要应用程序转发相应的请求上下文即可。
Istio 支持许多追踪后端,包括Zipkin、Jaeger、Lightstep 和Datadog。操作人员可以控制追踪生成的采样率(即每个请求生成追踪数据的速率)。这使操作人员能够控制为其网格生成追踪数据的数量和速率。
有关 Istio 分布式追踪的更多信息,请参阅我们的分布式追踪常见问题解答。
单个请求的 Istio 生成的分布式追踪示例
访问日志
访问日志提供了一种从单个工作负载实例的角度监控和了解行为的方法。
Istio 可以以一组可配置的格式生成服务流量的访问日志,为操作人员提供对日志记录的如何、什么、何时和何地进行完全控制。有关更多信息,请参阅获取 Envoy 的访问日志。
Istio 访问日志示例
[2019-03-06T09:31:27.360Z] "GET /status/418 HTTP/1.1" 418 - "-" 0 135 5 2 "-" "curl/7.60.0" "d209e46f-9ed5-9b61-bbdd-43e22662702a" "httpbin:8000" "127.0.0.1:80" inbound|8000|http|httpbin.default.svc.cluster.local - 172.30.146.73:80 172.30.146.82:38618 outbound_.8000_._.httpbin.default.svc.cluster.local