遥测 API

Istio 提供了一个遥测 API,它能够灵活地配置指标访问日志跟踪

使用 API

范围、继承和覆盖

遥测 API 资源从 Istio 配置层次结构中父资源继承配置

  1. 根配置命名空间(例如:istio-system
  2. 本地命名空间(命名空间范围的资源,**没有**工作负载选择器
  3. 工作负载(命名空间范围的资源,带有一个工作负载选择器

根配置命名空间(通常为istio-system)中的遥测 API 资源为行为提供网格范围的默认值。根配置命名空间中的任何特定于工作负载的选择器都将被忽略/拒绝。在根配置命名空间中定义多个网格范围的遥测 API 资源是无效的。

可以通过在所需的命名空间中应用新的Telemetry资源(无工作负载选择器)来实现对网格范围配置的特定于命名空间的覆盖。命名空间配置中指定的任何字段都将完全覆盖父配置(在根配置命名空间中)中的字段。

可以通过在所需的命名空间中使用工作负载选择器应用新的 Telemetry 资源来实现特定于工作负载的覆盖。

工作负载选择

命名空间内的各个工作负载通过selector进行选择,该选择器允许基于标签选择工作负载。

不允许两个不同的Telemetry资源使用相同的selector选择同一个工作负载。同样,在一个命名空间中,也不允许存在两个没有指定selectorTelemetry资源。

提供程序选择

Telemetry API 使用提供程序的概念来指示要使用的协议或集成类型。提供程序可以在MeshConfig中配置。

MeshConfig中配置提供程序的一个示例如下所示:

data:
  mesh: |-
      extensionProviders: # The following content defines two example tracing providers.
      - name: "localtrace"
        zipkin:
          service: "zipkin.istio-system.svc.cluster.local"
          port: 9411
          maxTagLength: 56
      - name: "cloudtrace"
        stackdriver:
          maxTagLength: 256

为了方便起见,Istio自带了一些预先配置了默认设置的提供程序。

提供程序名称功能
prometheus指标
stackdriver指标、追踪、访问日志
envoy访问日志

此外,可以设置一个默认提供程序,当Telemetry资源未指定提供程序时,将使用该提供程序。

示例

配置网格范围的行为

Telemetry API 资源继承网格根配置命名空间,通常为istio-system。要配置网格范围的行为,请在根配置命名空间中添加新的(或编辑现有的)Telemetry资源。

以下是一个使用上一节中提供程序配置的示例配置:

apiVersion: telemetry.istio.io/v1
kind: Telemetry
metadata:
  name: mesh-default
  namespace: istio-system
spec:
  tracing:
  - providers:
    - name: localtrace
    customTags:
      foo:
        literal:
          value: bar
    randomSamplingPercentage: 100

此配置覆盖了来自MeshConfig的默认提供程序,将网格默认值设置为localtrace提供程序。它还将网格范围的采样百分比设置为100,并配置一个标签,该标签将添加到所有跟踪跨度中,其名称为foo,值为bar

配置命名空间范围的跟踪行为

要调整各个命名空间的行为,请将Telemetry资源添加到所需的命名空间。命名空间资源中指定的任何字段都将完全覆盖从配置层次结构继承的字段配置。例如:

apiVersion: telemetry.istio.io/v1
kind: Telemetry
metadata:
  name: namespace-override
  namespace: myapp
spec:
  tracing:
  - customTags:
      userId:
        header:
          name: userId
          defaultValue: unknown

当部署到具有先前网格范围示例配置的网格中时,这将导致myapp命名空间中的跟踪行为,该行为将跟踪跨度发送到localtrace提供程序,并以100%的速率随机选择请求进行跟踪,但会为每个跨度设置自定义标签,其名称为userId,值取自userId请求头。重要的是,父配置中的foo: bar标签不会在myapp命名空间中使用。自定义标签行为完全覆盖了mesh-default.istio-system资源中配置的行为。

配置特定于工作负载的行为

要调整各个工作负载的行为,请将Telemetry资源添加到所需的命名空间并使用selector。工作负载特定资源中指定的任何字段都将完全覆盖从配置层次结构继承的字段配置。

例如:

apiVersion: telemetry.istio.io/v1
kind: Telemetry
metadata:
  name: workload-override
  namespace: myapp
spec:
  selector:
    matchLabels:
      service.istio.io/canonical-name: frontend
  tracing:
  - disableSpanReporting: true

在这种情况下,将禁用myapp命名空间中frontend工作负载的跟踪。Istio仍将转发跟踪标头,但不会将任何跨度报告给已配置的跟踪提供程序。

这些信息是否有用?
您对改进有什么建议?

感谢您的反馈!