遥测配置可以对mesh网络流量追踪量进行配置,可以过滤特定的应用,可以对遥测后的数据标签进行添加和修改,可以根据选择器禁用某个应用的遥测功能。

注意:如果配置命名空间为istio-system,那么使用与所有的命名空间。该命名空间称之为父配置,如果配置中的信息与父配置的信息重叠则优先使用配置中的信息。

接下来直接上结构体进行讲解

type Telemetry struct {
   // 选择器,标明在何处使用该遥测策略,如果为设置,则应用所有的工作负载
   Selector *v1beta1.WorkloadSelector `protobuf:"bytes,1,opt,name=selector,proto3" json:"selector,omitempty"`
   // 跟踪配置所有的跟踪行为,以及设置采样率和自定义标签提取
   Tracing []*Tracing 
   // 指标配置所有指标的行为
   Metrics []*Metrics 
   // AccessLogging 为所有用户配置访问日志记录行为
   AccessLogging []*AccessLogging 
}

接下来我们一一讲解

Tracing

tracing可以进行配置采样率,过滤工作负载,指定报告发送插件比如zipkin-alternate。

type Tracing struct {
  // 配置在流量经过应用的何种方向时使用该策略
  // CLIENT_AND_SERVER	
  // 当工作负载是网络流量的源或目标时选择方案。
  // CLIENT	
  // 当工作负载是网络流量的来源时选择方案。
  // SERVER	
  // 当工作负载是网络流量的目标时选择方案。
   Match *Tracing_TracingSelector 
  // 用于遥测数据生成程序的提供者默认为istio.mesh.v1alpha1.MeshConfig.default_providers.tracing
   Providers []*ProviderRef `protobuf:"bytes,2,rep,name=providers,proto3" json:"providers,omitempty"`
   // 根据流量的百分比进行遥测,比如设置10%那么随机为流量中的百分之10%生成遥测数据。 默认为0% 可以设置到0.01%
   RandomSamplingPercentage *wrappers.DoubleValue 
   // 如果为true 那么就不会向提供者发送遥测数据,但是对于遥测数据的生成依然照旧
   DisableSpanReporting *wrappers.BoolValue 
   CustomTags map[string]*Tracing_CustomTag 
   UseRequestIdForTraceSampling *wrappers.BoolValue 
}

Match

配置在流量经过应用的何种方向时使用遥测策略

有三种方式

  1. CLIENT_AND_SERVER 当工作负载是网络流量的源或目标时选择方案
  2. CLIENT 当工作负载是网络流量的来源时选择方案
  3. SERVER 当工作负载是网络流量的目标时选择方案

Providers

指定了追踪要使用的应用,比如zipkin-alternate,使用zipkin进行链路追踪功能,名称在istio.MeshConfig.ExtensionProvider进行配置

默认提供了prometheus、stackdriver、envoy三种方式

为什么要设置Providers那?因为envoy仅仅追踪本pod下的流量,所以我们需要一个全局程序将这些envoy生成的span信息,记录、整合成一个完整的请求链。

CustomTags

这里修改每个跨度信息(跨度是指一个envoy生成个span到发送到链路程序的流程),比如跨度信息中的,头信息,比如为每个请求头添加标签、将环境变量的值添加到每个 span。

UseRequestIdForTraceSampling

默认为true

Envoy基于Ingress在分布式追踪中生成的Request ID的值进行链路追踪,但是由首先接收用户流量的代理生成,并不特定于Envoy,Envoy 会因为无法解释请求而中断跟踪ID。如果为false 可以防止 Envoy 采样基于请求 ID。

Metrics

对默认的指标进行覆盖

type Metrics struct {
   // 链路追踪提供者
   Providers []*ProviderRef `protobuf:"bytes,1,rep,name=providers,proto3" json:"providers,omitempty"`
   // 这里我们就可以根据自定义配置将默认指标进行覆盖
   Overrides []*MetricsOverrides `protobuf:"bytes,2,rep,name=overrides,proto3" json:"overrides,omitempty"`
}

比如

为Prometheus 添加request_method、request_host这两个指标。

指标信息请访问https://istio.io/latest/docs/tasks/observability/metrics/customize-metrics/

spec:
  # no selector specified, applies to all workloads in the namespace
  metrics:
  - providers:
    - name: prometheus
    overrides:
    # match clause left off matches all istio metrics, client and server
    - tagOverrides:
        request_method:
          value: "request.method"
        request_host:
          value: "request.host"

AccessLogging

限制日志的生成策略

type AccessLogging struct {
   // 这里与Tracing.Match意思一致
   Match *AccessLogging_LogSelector `protobuf:"bytes,4,opt,name=match,proto3" json:"match,omitempty"`
   // 链路追踪程序提供者,这里是提供日志的生成
   Providers []*ProviderRef `protobuf:"bytes,1,rep,name=providers,proto3" json:"providers,omitempty"`
   // 如果为true则不再生成日志
   Disabled *wrappers.BoolValue `protobuf:"bytes,2,opt,name=disabled,proto3" json:"disabled,omitempty"`
   // 根据CEL expression 对请求、连接进行过滤
   Filter *AccessLogging_Filter 
}