遥测配置可以对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
配置在流量经过应用的何种方向时使用遥测策略
有三种方式
- CLIENT_AND_SERVER 当工作负载是网络流量的源或目标时选择方案
- CLIENT 当工作负载是网络流量的来源时选择方案
- 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
}