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