遥测 API
Istio 提供了一个遥测 API,它能够灵活地配置指标、访问日志和跟踪。
使用 API
范围、继承和覆盖
遥测 API 资源从 Istio 配置层次结构中父资源继承配置
- 根配置命名空间(例如:
istio-system
) - 本地命名空间(命名空间范围的资源,**没有**工作负载
选择器
) - 工作负载(命名空间范围的资源,带有一个工作负载
选择器
)
根配置命名空间(通常为istio-system
)中的遥测 API 资源为行为提供网格范围的默认值。根配置命名空间中的任何特定于工作负载的选择器都将被忽略/拒绝。在根配置命名空间中定义多个网格范围的遥测 API 资源是无效的。
可以通过在所需的命名空间中应用新的Telemetry
资源(无工作负载选择器)来实现对网格范围配置的特定于命名空间的覆盖。命名空间配置中指定的任何字段都将完全覆盖父配置(在根配置命名空间中)中的字段。
可以通过在所需的命名空间中使用工作负载选择器应用新的 Telemetry 资源来实现特定于工作负载的覆盖。
工作负载选择
命名空间内的各个工作负载通过selector
进行选择,该选择器允许基于标签选择工作负载。
不允许两个不同的Telemetry
资源使用相同的selector
选择同一个工作负载。同样,在一个命名空间中,也不允许存在两个没有指定selector
的Telemetry
资源。
提供程序选择
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仍将转发跟踪标头,但不会将任何跨度报告给已配置的跟踪提供程序。