可观察性

Istio为网格内的所有服务通信生成详细的遥测。这种遥测功能提供了服务行为的可观察性,使运维人员可以对应用程序进行故障排除,维护和优化,而不会给服务开发人员带来任何额外负担。通过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 Statistics上的操作指南提供了有关控制代理级度量标准生成的更多信息。

代理级指标示例:

1
2
3
4
5
6
7
8
9
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指标由Istio附带的一组配置工件定义,默认情况下将其导出到Prometheus。运营商可以自由修改这些指标的形状和内容,以及更改其收集机制,以满足其个人监控需求。

收集指标任务提供了有关自定义Istio指标生成的更多信息。

https://istio.io/docs/tasks/telemetry/metrics/using-istio-dashboard/

服务级别指标的使用完全是可选的。运营商可以选择关闭这些指标的生成和收集,以满足他们的个性化需求。

服务级别指标示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
istio_requests_total{
connection_security_policy="mutual_tls",
destination_app="details",
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_principal="cluster.local/ns/default/sa/default",
source_version="v1",
source_workload="productpage-v1",
source_workload_namespace="default"
} 214

控制平面指标

每个Istio组件(Pilot,Galley,Mixer)还提供了一组自我监控指标。这些度量标准允许监视Istio本身的行为(与网格内服务的行为不同)。

有关维护哪些指标的更多信息,请参阅每个组件的参考文档。

分布式跟踪

分布式跟踪通过监视单个请求在网格中流动时的行为,提供了一种监视和了解行为的方式。跟踪使网格运营商能够了解服务依赖性以及其服务网格内的延迟源。

Istio支持通过Envoy代理进行分布式跟踪。代理代表它们代理的应用程序自动生成跟踪范围,仅要求应用程序转发适当的请求上下文。

Istio支持许多跟踪后端,包括Zipkin,Jaeger,LightStep和Datadog。操作员控制跟踪生成的采样率(即,每个请求生成跟踪数据的速率)。这使操作员可以控制为其网格生成的跟踪数据的数量和速率。

有关使用Istio进行分布式跟踪的更多信息,请参见我们的分布式跟踪常见问题解答。https://istio.io/faq/distributed-tracing/

Istio为单个请求生成的示例分布式跟踪的示例:

访问日志

访问日志提供了一种从单个工作负载实例的角度监视和了解行为的方法。

Istio可以以一组可配置的格式为服务流量生成访问日志,从而使操作员可以完全控制日志的方式,内容,时间和地点。 Istio向访问日志记录机制公开了全套源和目标元数据,从而可以对网络事务进行详细的审核。

访问日志可以在本地生成,也可以导出到自定义后端,包括Fluentd。

“收集日志”和“ Getting Envoy的访问日志”任务中提供了有关访问日志的更多信息。

Example Istio access log (formatted in JSON):

1
{"level":"info","time":"2019-06-11T20:57:35.424310Z","instance":"accesslog.instance.istio-control","connection_security_policy":"mutual_tls","destinationApp":"productpage","destinationIp":"10.44.2.15","destinationName":"productpage-v1-6db7564db8-pvsnd","destinationNamespace":"default","destinationOwner":"kubernetes://apis/apps/v1/namespaces/default/deployments/productpage-v1","destinationPrincipal":"cluster.local/ns/default/sa/default","destinationServiceHost":"productpage.default.svc.cluster.local","destinationWorkload":"productpage-v1","httpAuthority":"35.202.6.119","latency":"35.076236ms","method":"GET","protocol":"http","receivedBytes":917,"referer":"","reporter":"destination","requestId":"e3f7cffb-5642-434d-ae75-233a05b06158","requestSize":0,"requestedServerName":"outbound_.9080_._.productpage.default.svc.cluster.local","responseCode":200,"responseFlags":"-","responseSize":4183,"responseTimestamp":"2019-06-11T20:57:35.459150Z","sentBytes":4328,"sourceApp":"istio-ingressgateway","sourceIp":"10.44.0.8","sourceName":"ingressgateway-7748774cbf-bvf4j","sourceNamespace":"istio-control","sourceOwner":"kubernetes://apis/apps/v1/namespaces/istio-control/deployments/ingressgateway","sourcePrincipal":"cluster.local/ns/istio-control/sa/default","sourceWorkload":"ingressgateway","url":"/productpage","userAgent":"curl/7.54.0","xForwardedFor":"10.128.0.35"}

参考资料