Telemetry CRD说明

Telemetry用来定义和配置服务网格中观测和收集数据相关的策略和行为。它为您提供了更细粒度和可控的方式来管理Istio提供的遥测功能,例如日志、度量、追踪等。通过Telemetry CRD,您可以根据特定的需求自定义和调整遥测数据的收集和处理。本文介绍Telemetry CRD的配置示例和字段说明。

配置示例

当前Istio支持三种不同范围的可观测配置方式,与ASM控制台可观测配置的对应关系如下:

  1. 全局配置全局

  2. 特定命名空间配置命名空间

  3. 特定工作负载配置自定义

以下展示了不同范围进行可观测配置的Telemetry YAML文件示例。

全局配置

展开查看YAML内容

apiVersion: telemetry.istio.io/v1alpha1
kind: Telemetry
metadata:
  labels:
    provider: asm
  # 名称为default,命名空间为istio-system时对全局生效
  name: default
  namespace: istio-system
spec:
  accessLogging:
  - disabled: false
    # ASM默认配置,无法修改
    providers:
    - name: envoy
  metrics:
  # 需要配置client和server的每个监控指标
  - overrides:
    - disabled: false
      match:
        metric: REQUEST_COUNT
        mode: CLIENT
      tagOverrides: {}
    - disabled: false
      match:
        metric: REQUEST_COUNT
        mode: SERVER
      tagOverrides: {}
    - disabled: false
      match:
        metric: REQUEST_DURATION
        mode: CLIENT
      tagOverrides: {}
    - disabled: false
      match:
        metric: REQUEST_DURATION
        mode: SERVER
      tagOverrides: {}
    - disabled: false
      match:
        metric: REQUEST_SIZE
        mode: CLIENT
      tagOverrides: {}
    - disabled: false
      match:
        metric: REQUEST_SIZE
        mode: SERVER
      tagOverrides: {}
    - disabled: false
      match:
        metric: RESPONSE_SIZE
        mode: CLIENT
      tagOverrides: {}
    - disabled: false
      match:
        metric: RESPONSE_SIZE
        mode: SERVER
      tagOverrides: {}
    - disabled: false
      match:
        metric: GRPC_REQUEST_MESSAGES
        mode: CLIENT
      tagOverrides: {}
    - disabled: false
      match:
        metric: GRPC_REQUEST_MESSAGES
        mode: SERVER
      tagOverrides: {}
    - disabled: false
      match:
        metric: GRPC_RESPONSE_MESSAGES
        mode: CLIENT
      tagOverrides: {}
    - disabled: false
      match:
        metric: GRPC_RESPONSE_MESSAGES
        mode: SERVER
      tagOverrides: {}
    - disabled: false
      match:
        metric: TCP_SENT_BYTES
        mode: CLIENT
      tagOverrides: {}
    - disabled: false
      match:
        metric: TCP_SENT_BYTES
        mode: SERVER
      tagOverrides: {}
    - disabled: false
      match:
        metric: TCP_RECEIVED_BYTES
        mode: CLIENT
      tagOverrides: {}
    - disabled: false
      match:
        metric: TCP_RECEIVED_BYTES
        mode: SERVER
      tagOverrides: {}
    - disabled: false
      match:
        metric: TCP_OPENED_CONNECTIONS
        mode: CLIENT
      tagOverrides: {}
    - disabled: false
      match:
        metric: TCP_OPENED_CONNECTIONS
        mode: SERVER
      tagOverrides: {}
    - disabled: false
      match:
        metric: TCP_CLOSED_CONNECTIONS
        mode: CLIENT
      tagOverrides: {}
    - disabled: false
      match:
        metric: TCP_CLOSED_CONNECTIONS
        mode: SERVER
      tagOverrides: {}
    # ASM默认配置,无法修改
    providers:
    - name: prometheus
  tracing:
  - customTags:
    foo:
      literal:
        value: bar
    randomSamplingPercentage: 10

特定命名空间配置

展开查看YAML内容

apiVersion: telemetry.istio.io/v1alpha1
kind: Telemetry
metadata:
  labels:
    provider: asm
  # 名称为default时代表对于整个命名空间生效
  name: default
  # 对于default命名空间生效
  namespace: default
spec:
  accessLogging:
  - disabled: false
    providers:
    - name: accesslogging.default.default
  metrics:
  - overrides:
    - disabled: false
      match:
        metric: REQUEST_COUNT
        mode: CLIENT
      tagOverrides: {}
    - disabled: false
      match:
        metric: REQUEST_COUNT
        mode: SERVER
      tagOverrides: {}
    - disabled: false
      match:
        metric: REQUEST_DURATION
        mode: CLIENT
      tagOverrides: {}
    - disabled: false
      match:
        metric: REQUEST_DURATION
        mode: SERVER
      tagOverrides: {}
    - disabled: false
      match:
        metric: REQUEST_SIZE
        mode: CLIENT
      tagOverrides: {}
    - disabled: false
      match:
        metric: REQUEST_SIZE
        mode: SERVER
      tagOverrides: {}
    - disabled: false
      match:
        metric: RESPONSE_SIZE
        mode: CLIENT
      tagOverrides: {}
    - disabled: false
      match:
        metric: RESPONSE_SIZE
        mode: SERVER
      tagOverrides: {}
    - disabled: false
      match:
        metric: GRPC_REQUEST_MESSAGES
        mode: CLIENT
      tagOverrides: {}
    - disabled: false
      match:
        metric: GRPC_REQUEST_MESSAGES
        mode: SERVER
      tagOverrides: {}
    - disabled: false
      match:
        metric: GRPC_RESPONSE_MESSAGES
        mode: CLIENT
      tagOverrides: {}
    - disabled: false
      match:
        metric: GRPC_RESPONSE_MESSAGES
        mode: SERVER
      tagOverrides: {}
    - disabled: false
      match:
        metric: TCP_SENT_BYTES
        mode: CLIENT
      tagOverrides: {}
    - disabled: false
      match:
        metric: TCP_SENT_BYTES
        mode: SERVER
      tagOverrides: {}
    - disabled: false
      match:
        metric: TCP_RECEIVED_BYTES
        mode: CLIENT
      tagOverrides: {}
    - disabled: false
      match:
        metric: TCP_RECEIVED_BYTES
        mode: SERVER
      tagOverrides: {}
    - disabled: false
      match:
        metric: TCP_OPENED_CONNECTIONS
        mode: CLIENT
      tagOverrides: {}
    - disabled: false
      match:
        metric: TCP_OPENED_CONNECTIONS
        mode: SERVER
      tagOverrides: {}
    - disabled: false
      match:
        metric: TCP_CLOSED_CONNECTIONS
        mode: CLIENT
      tagOverrides: {}
    - disabled: false
      match:
        metric: TCP_CLOSED_CONNECTIONS
        mode: SERVER
      tagOverrides: {}
    providers:
    - name: prometheus

特定工作负载配置

展开查看YAML内容

apiVersion: telemetry.istio.io/v1alpha1
kind: Telemetry
metadata:
  labels:
    provider: asm
  # 名称不为default时代表只对selector字段指定label的工作负载生效
  name: test
  # 对default命名空间下的指定工作负载生效
  namespace: default
spec:
  accessLogging:
  - disabled: false
    providers:
    - name: accesslogging.default.test
  metrics:
  - overrides:
    - disabled: false
      match:
        metric: REQUEST_COUNT
        mode: CLIENT
      tagOverrides: {}
    - disabled: false
      match:
        metric: REQUEST_COUNT
        mode: SERVER
      tagOverrides: {}
    - disabled: false
      match:
        metric: REQUEST_DURATION
        mode: CLIENT
      tagOverrides: {}
    - disabled: false
      match:
        metric: REQUEST_DURATION
        mode: SERVER
      tagOverrides: {}
    - disabled: false
      match:
        metric: REQUEST_SIZE
        mode: CLIENT
      tagOverrides: {}
    - disabled: false
      match:
        metric: REQUEST_SIZE
        mode: SERVER
      tagOverrides: {}
    - disabled: false
      match:
        metric: RESPONSE_SIZE
        mode: CLIENT
      tagOverrides: {}
    - disabled: false
      match:
        metric: RESPONSE_SIZE
        mode: SERVER
      tagOverrides: {}
    - disabled: false
      match:
        metric: GRPC_REQUEST_MESSAGES
        mode: CLIENT
      tagOverrides: {}
    - disabled: false
      match:
        metric: GRPC_REQUEST_MESSAGES
        mode: SERVER
      tagOverrides: {}
    - disabled: false
      match:
        metric: GRPC_RESPONSE_MESSAGES
        mode: CLIENT
      tagOverrides: {}
    - disabled: false
      match:
        metric: GRPC_RESPONSE_MESSAGES
        mode: SERVER
      tagOverrides: {}
    - disabled: false
      match:
        metric: TCP_SENT_BYTES
        mode: CLIENT
      tagOverrides: {}
    - disabled: false
      match:
        metric: TCP_SENT_BYTES
        mode: SERVER
      tagOverrides: {}
    - disabled: false
      match:
        metric: TCP_RECEIVED_BYTES
        mode: CLIENT
      tagOverrides: {}
    - disabled: false
      match:
        metric: TCP_RECEIVED_BYTES
        mode: SERVER
      tagOverrides: {}
    - disabled: false
      match:
        metric: TCP_OPENED_CONNECTIONS
        mode: CLIENT
      tagOverrides: {}
    - disabled: false
      match:
        metric: TCP_OPENED_CONNECTIONS
        mode: SERVER
      tagOverrides: {}
    - disabled: false
      match:
        metric: TCP_CLOSED_CONNECTIONS
        mode: CLIENT
      tagOverrides: {}
    - disabled: false
      match:
        metric: TCP_CLOSED_CONNECTIONS
        mode: SERVER
      tagOverrides: {}
    providers:
    - name: prometheus
  # 对于哪些workload生效
  selector:
    matchLabels:
      foo: bar

字段说明

Telemetry

属性

类型

是否必选

说明

selector

WorkloadSelector

配置选择器指定需要配置Telemetry策略的工作负载。

tracing

Tracing[]

配置所有选定工作负载的链路追踪行为。

metrics

Metrics[]

配置所有选定工作负载的指标监控行为。

accessLogging

AccessLogging[]

配置所有选定工作负载的日志记录行为。

Tracing

属性

类型

是否必选

说明

randomSamplingPercentage

double

控制用于追踪的流量采样率,取值为0时代表不采样。

customTags

map<string, CustomTag>

向tracing中添加额外的自定义标签。

Metrics

属性

类型

是否必选

说明

overrides

MetricsOverrides[]

针对某个特定的监控指标,或是所有预设的标准监控指标,自定义其生成的方式和表现形式。

providers

ProviderRef[]

配置应适用的提供者名称,当前只支持配置Prometheus

AccessLogging

属性

类型

是否必选

说明

disabled

bool

控制日志行为。

providers

ProviderRef[]

配置应适用的提供者名称,当前只支持配置Envoy

WorkloadSelector

属性

类型

是否必选

说明

matchLabels

map<string, string>

一个或多个标签,用于指示应用特定策略的一组Pods/虚拟机(VMs)。标签搜索的范围被限制在资源所在的配置命名空间内。

CustomTag

属性

类型

是否必选

说明

literal

Tracing.Literal

向每一个span添加相同且硬编码的值。

environment

Tracing.Environment

将一个环境变量的值添加到每一个span中。

header

Tracing.RequestHeader

从请求中提取一个特定的头部信息,并将其值添加到每一个span中。

MetricsOverrides

属性

类型

是否必选

说明

match

WorkloadSelector

匹配需要覆盖的监控指标,需要添加并配置所有客户端以及服务端指标

disabled

bool

是否禁用指标监控,设定为true则禁用。

tagOverrides

map<string, MetricsOverrides>

一个选定的度量监控指标中,用于覆盖的一系列维度名称和维度表达式的集合。

MetricSelector

属性

类型

是否必选

说明

metric

MetricSelector.IstioMetric

控制监控指标。

mode

WorkloadMode

控制监控指标生成的模式,有以下两种可选:CLIENT, SERVER

ProviderRef

属性

类型

是否必选

说明

name

string

MeshConfig中包含的Telemetry provider。

Tracing.Literal

属性

类型

是否必选

说明

value

string

需要使用的标签值。

Tracing.Environment

属性

类型

是否必选

说明

name

string

从中提取标签值的环境变量名称。

defaultValue

string

环境变量不存在时使用的默认值。

Tracing.RequestHeader

属性

类型

是否必选

说明

name

string

从中提取标签值的header名称。

defaultValue

string

header不存在时使用的默认值。

MetricsOverrides.TagOverride

属性

类型

是否必选

说明

operation

MetricsOverrides.TagOverride.Operation

控制是否需要更新/添加/删除一个维度。

value

string

设定的标签值,只有operationUPSERT时会使用。

MetricSelector.IstioMetric

名称

描述

REQUEST_COUNT

从应用程序发出的请求计数,包括HTTP、HTTP/2和gRPC流量。

REQUEST_DURATION

针对HTTP、HTTP/2和gRPC流量生成的请求持续时间。

REQUEST_SIZE

针对HTTP、HTTP/2和gRPC流量生成的请求体大小。

RESPONSE_SIZE

针对HTTP、HTTP/2和gRPC流量生成的响应体大小。

TCP_OPENED_CONNECTIONS

工作负载生命周期内打开的TCP连接计数。

TCP_CLOSED_CONNECTIONS

工作负载生命周期内关闭的TCP连接计数。

TCP_SENT_BYTES

通过TCP连接在响应期间发送的字节数。

TCP_RECEIVED_BYTES

通过TCP连接在请求期间接收的字节数。

GRPC_REQUEST_MESSAGES

客户端发送的gRPC消息数量。

GRPC_RESPONSE_MESSAGES

服务端发送的gRPC消息数量。

MetricsOverrides.TagOverride.Operation

名称

描述

UPSERT

指定该维度需要被添加。

REMOVE

指定该维度需要被移除。

WorkloadMode

名称

描述

CLIENT

工作负载为客户端,作为网络流量起点。

SERVER

工作负载为服务端,作为网络流量终点。

注意事项

对于本文中未列出的字段,ASM在原则上保持与对应版本Istio的兼容,ASM控制台不提供对这些字段的编辑功能,因此如果您希望使用这些字段,需直接操作对应的Telemetry CR(通过kubectl等方式)。

同时,以此方式修改可观测配置后,请勿再通过ASM控制台对可观测配置进行修改,否则可能造成字段丢失。更多关于Telemtry资源的字段信息,请参见Telemetry