您可以配置 OpenTelemetry Collector 以满足您的可观察性需求。在深入了解 Collector 配置的工作原理之前,熟悉以下内容是很重要的:
任何 Collector 配置文件的结构由四种类型的管道组件组成,它们与遥测数据进行交互:
在配置每个管道组件后,您必须通过在配置文件的 服务部分 中定义的管道来启用它。
除了管道组件之外,您还可以配置 扩展,提供可以添加到 Collector 的附加功能,例如诊断工具。扩展不需要直接访问遥测数据,并且通过 服务部分 启用。
下面是一个包含接收器、处理器、导出器和三个扩展的 Collector 配置示例。
重要提示: 当所有客户端都在本地时,通常将端点绑定到 localhost
,我们的示例配置出于方便使用“未指定”的地址 0.0.0.0
。Collector 目前默认使用 localhost
。有关这些端点配置值的详细信息,请参见 防止拒绝服务攻击的安全措施。
请注意,接收器、处理器、导出器和管道使用 type[/name]
格式的组件标识符进行定义,诸如 otlp
或 otlp/2
。只要标识符是唯一的,您可以多次定义相同类型的组件。例如:
配置还可以包含其他文件,从而允许 Collector 将它们合并为单个内存中的 YAML 配置:
exporters.yaml
文件可能包含:
生成的内存配置将为:
接收器从一个或多个源收集遥测数据。它们可以是基于拉取或推送的,并可能支持一个或多个 数据源。
通常,接收器以指定格式获取数据,将其转换为内部格式,然后将其传递给适用管道中定义的处理器和导出器。
接收器在 receivers
部分进行配置。默认情况下,没有配置接收器。您必须配置一个或多个接收器。许多接收器带有默认设置,所以指定接收器名称可能是足够的。如果您需要自定义或修改默认配置,可以在此部分进行。您指定的任何设置将覆盖默认设置(如果存在)。
注意: 配置接收器并不会启用它。通过将其添加到 服务部分 中的适当管道来启用接收器。
以下是常见接收器配置示例。
提示: 有关更详细的接收器配置,请参阅 接收器 README。
OTLP 接收器使用 OpenTelemetry 协议 (OTLP) 获取跟踪、度量和日志。
YAML 示例
protocols
参数描述
参数 | 描述 |
---|---|
grpc.endpoint | OTLP gRPC 端点。如果省略,则默认为 0.0.0.0:4317。 |
grpc.tls | 服务器端 TLS 配置。定义 TLS 证书的路径。如果省略,则禁用 TLS。 |
grpc.tls.client_ca_file | 服务器用于验证客户端证书的 TLS 证书的路径。这将设置 ClientCAs 并且在 TLSConfig 中将 ClientAuth 设置为 RequireAndVerifyClientCert 。有关更多详细信息,请参见 Golang TLS 包配置。 |
grpc.tls.reload_interval | 指定重新加载证书的间隔。如果未设置,则证书将永远不会重新加载。reload_interval 字段接受一个带有有效时间单位的字符串,如 ns、us (或 µs)、ms、s、m 和 h。 |
http.endpoint | OTLP HTTP 端点。默认为 0.0.0.0:4318。 |
http.tls | 服务器端 TLS 配置。与 grpc.tls 的配置方式相同。 |
Jaeger 接收器以 Jaeger 格式获取跟踪。
YAML 示例
protocols
参数描述
参数 | 描述 |
---|---|
grpc.endpoint | Jaeger gRPC 端点。如果省略,默认值为 0.0.0.0:14250。 |
thrift_http.endpoint | Jaeger Thrift HTTP 端点。如果省略,默认值为 0.0.0.0:14268。 |
thrift_compact.endpoint | Jaeger Thrift Compact 端点。如果省略,默认值为 0.0.0.0:6831。 |
thrift_binary.endpoint | Jaeger Thrift Binary 端点。如果省略,默认值为 0.0.0.0:6832。 |
tls | 服务器端 TLS 配置。有关配置细节,请参见 OTLP 接收器的 protocols.grpc.tls 。 |
Zipkin 接收器以 Zipkin v1 和 v2 格式获取跟踪。
YAML 示例
zipkin
参数描述
参数 | 描述 |
---|---|
endpoint | Zipkin HTTP 端点。如果省略,默认值为 0.0.0.0:9411。 |
tls | 服务器端 TLS 配置。有关配置细节,请参见 OTLP 接收器的 protocols.grpc.tls 。 |
处理器在将数据发送到导出器之前修改或转换接收器收集到的数据。数据处理基于为每个处理器定义的规则或设置,这可能包括过滤、删除、重命名或重新计算遥测数据。管道中处理器的顺序决定了 Collector 何时将处理操作应用于信号。
处理器是可选的,但某些处理器是 推荐 的。
您可以在 Collector 配置文件的 processors
部分配置处理器。您指定的任何设置将覆盖默认值(如果存在)。
注意: 配置处理器并不会启用它。必须通过将其添加到 服务部分 中的适当管道来启用处理器。默认情况下,没有启用处理器。
以下是常见处理器配置的示例。
提示: 您可以通过将 opentelemetry-collector-contrib 和 opentelemetry-collector 中的列表组合在一起,找到完整的处理器列表。有关更详细的处理器配置,请参阅 处理器 README。
批处理处理器根据大小或时间对跨度、度量或日志进行批处理和压缩。批处理可以帮助减少导出器发送的提交请求数量,并帮助调节来自多个或单个接收器在管道中流动的遥测。
YAML 示例
batch
参数描述
参数 | 描述 |
---|---|
timeout | 在特定时间段之后发送批处理,无论批大小如何。 |
send_batch_size | 在指定的跨度或度量数量之后发送遥测数据的批处理。 |
send_batch_max_size | 批处理的最大允许大小。必须等于或大于 send_batch_size 。 |
metadata_keys | 启用时,将为在 client.Metadata 中找到的每个唯一值集创建一个批处理实例。 |
metadata_cardinality_limit | 当 metadata_keys 被填充时,此配置限制在处理持续期间处理的不同组合的元数据键值对的数量。 |
内存限制处理器定期检查 Collector 的内存使用情况,并在达到软内存限制时暂停数据处理,以防止内存不足的情况发生。此处理器支持跨度、度量和日志。它通常是接收器之后的第一个组件,期望重试以发送相同数据,并可能对传入数据施加背压。当内存使用超过硬限制时,内存限制处理器会强制进行垃圾回收。
YAML 示例
memory_limiter
参数描述
参数 | 描述 |
---|---|
check_interval | 内存使用测量之间的时间间隔。最佳值为 1 秒。对于流量模式波动较大的情况,可以减少 check_interval 或增加 spike_limit_mib 。 |
limit_mib | 硬限制,即在堆上分配的最大内存量(以 MiB 为单位)。通常,OpenTelemetry Collector 的总内存使用量比此值大约多 50 MiB。 |
spike_limit_mib | 峰值限制,即内存使用的预期最大值(以 MiB 为单位)。最佳值约为 limit_mib 的 20%。软限制由 limit_mib 减去 spike_limit_mib 计算得出。 |
limit_percentage | 与 limit_mib 相同,但以可用内存的百分比表示。limit_mib 设置优先于此设置。 |
spike_limit_percentage | 与 spike_limit_mib 相同,但以可用内存的百分比表示。目的是与 limit_percentage 设置一起使用。 |
过滤器处理器根据您在其配置中定义的条件过滤跨度、度量或日志。过滤器处理器的典型用例是丢弃与可观察性系统无关的遥测数据,例如非关键日志或跨度,以减少数据中的噪声。
过滤操作使用允许和拒绝列表,根据正则表达式和资源属性包含或排除遥测数据。您还可以使用 OpenTelemetry 转换语言 (OTTL) 更清晰地描述要过滤的信号。该处理器支持所有类型的管道。
信号 | 条件和匹配类型 |
---|---|
跨度 | OTTL 条件、跨度名称(严格或正则表达式)和资源属性(严格或正则表达式)。跨度事件过滤仅支持 OTTL 条件。 |
度量 | OTTL 条件、度量名称(严格或正则表达式)和度量属性(表达式)。数据点过滤仅支持 OTTL 条件。 |
日志 | OTTL 条件、资源属性(严格或正则表达式)。 |
YAML 示例
filter/ottl
参数描述
参数 | 描述 |
---|---|
error_mode | 定义错误模式。当设置为 ignore 时,忽略条件返回的错误。当设置为 propagate 时,将错误返回到管道的上层。错误将导致 Collector 数据的丢失。 |
span[0] | 过滤具有属性 container.name == app_container_1 的跨度。 |
span[1] | 过滤具有资源属性 host.name == localhost 的跨度。 |
度量转换处理器与属性处理器共享某些功能,通常用于执行以下任务:
有关支持的操作的完整列表,请参见 可用操作。
YAML 示例
度量转换处理器还支持使用正则表达式,允许变换规则同时应用于多个度量名称或度量标签。以下示例将 cluster_name
重命名为所有度量的 cluster-name
:
可用操作
该处理器可以执行以下操作:
system.cpu.usage
重命名为 system.cpu.usage_time
。identifier
,其值为 1
。state
重命名为 cpu_state
。state
标签内将值 idle
重命名为 -
。state
标签值为 idle
的所有点。int
数据点更改为 double
数据点。state
标签并平均所有具有相同标签值的点。state
标签中具有值 user
或 system
的点作为 used = user + system
。适用的规则如下:
strict
或 regexp
过滤器。action
属性,您可以:
update
)。insert
)。combine
)。原始匹配的度量也将被删除。regexp
过滤器中的捕获组将被展开。转换处理器通过语句修改匹配的跨度、度量或日志。用例包括但不限于将度量转换为不同类型、替换或删除键,以及根据预定义条件设置字段。
语句是 OpenTelemetry 转换语言 (OTTL) 中的函数,根据它们在列表中的顺序应用于遥测数据。转换处理器包括额外的函数,用于转换度量类型。语句根据您定义的 OTTL 上下文转换数据,例如跨度或数据点。
支持的转换处理器上下文:
信号 | 支持的上下文 |
---|---|
跟踪 | resource → scope → span → spanevent |
度量 | resource → scope → metric → datapoint |
日志 | resource → scope → logs |
语句可以转换较高级上下文的遥测数据。例如,应用于数据点的语句可以访问该数据点的度量和资源。不能访问较低上下文;例如,您不能使用跨度语句来转换单个跨度事件。通常,语句与您要转换的上下文相关联。
以下示例使用转换处理器设置跨度的状态。当 http.request.status_code
属性为 400 时,以下示例将跨度状态设置为 Ok
:
YAML 示例
error_mode
字段描述了处理器在处理语句时对错误的反应方式:
"error_mode: ignore"
告诉处理器忽略错误并继续执行。这是默认的错误模式。"error_mode: propagate"
告诉处理器返回错误。因此,Collector 将丢弃数据。导出器将数据发送到一个或多个后端或目标。导出器可以是基于拉取或推送的,并可能支持一个或多个 数据源。
您可以在 Collector 配置文件的 exporters
部分配置导出器。大多数导出器至少需要目标和安全设置,如身份验证令牌或 TLS 证书。您指定的任何设置将覆盖默认值(如果存在)。
注意:配置导出器并不会启用它。需要通过将其添加到 服务部分 中的适当管道来启用导出器。默认情况下,没有启用导出器。
Collector 需要一个或多个导出器。以下是常见导出器配置的示例:
提示:某些导出器需要 x.509 证书来建立安全连接,如 设置证书 中所述。有关更详细的导出器配置,请参阅 导出器 README。
OTLP 导出器使用 OTLP 格式通过 gRPC 发送度量、跟踪和日志。支持的管道类型包括跨度、度量和日志。默认情况下,此导出器需要 TLS,并提供队列重试功能。要通过 HTTP 发送 OTLP 数据,请使用 OTLP/HTTP 导出器。有关说明,请参见 OTLP/HTTP 导出器。
YAML 示例
otlp
参数描述
参数 | 描述 |
---|---|
endpoint | OTLP gRPC 端点。如果使用 https:// 方案,则激活客户端传输安全性,并覆盖 tls 中的不安全设置。 |
tls | 客户端 TLS 配置。定义 TLS 证书的路径。 |
tls.insecure | 设置为 true 时,禁用客户端传输安全性。默认值为 false 。 |
tls.insecure_skip_verify | 设置为 true 时,跳过证书验证。默认值为 false 。 |
tls.reload_interval | 指定重新加载证书的间隔。如果未设置,则将永远不重新加载证书。接受带有有效时间单位的字符串,例如 ns 、us (或 µs )、ms 、s 、m 、h 。 |
tls.server_name_override | 覆盖授权虚拟主机名,例如请求中的 authority 标头字段。可用于测试。 |
headers | 在建立连接期间与每个请求一起发送的标头。 |
OTLP HTTP 导出器使用打开遥测协议 (OTLP) 导出跟踪和度量。
YAML 示例
otlphttp
参数描述
参数 | 描述 |
---|---|
endpoint | OTLP HTTP 端点。如果使用 https:// 方案,则激活客户端传输安全性,并覆盖 tls 中的任何不安全设置。 |
tls | 客户端 TLS 配置。定义 TLS 证书的路径。 |
headers | 每个 HTTP 请求发送的标头。 |
disable_keep_alives | 如果设置为 true ,则禁用 HTTP 保持活动。对服务器只会发起一次 HTTP 请求。 |
调试导出器将遥测数据输出到控制台,以便进行调试。
YAML 示例
debug.verbosity
字段控制日志导出详细级别(detailed|normal|basic
)。设置为 detailed
时,管道数据将详细记录。
负载均衡导出器可以将跨度、度量和日志导出到多个后端。支持的管道类型包括度量、跨度和日志。负载均衡导出器可以使用路由策略将遥测数据同时发送到多个后端。您可以配置 routing_key
来使用路由策略将遥测数据分类到组,并将这些组映射到特定端点。
使用负载均衡导出器,您也可以通过收集器端点将数据发送到其他正在运行的 OpenTelemetry Collector 实例。例如,您可以将所有跟踪发送到一个正在运行的收集器实例,所有日志发送到另一个实例。这允许您在不同的 Collector 环境中处理或操纵数据。
YAML 示例
loadbalancing
参数描述
参数 | 描述 |
---|---|
routing_key | "routing_key: service" 将具有相同服务名称的跨度导出到同一 Collector 实例,以便进行准确聚合。"routing_key: traceID" 将基于其 TraceID 导出跨度。隐含的默认是基于 TraceID 的路由。 |
protocol.otlp | OTLP 是唯一支持的负载均衡协议。支持 OTLP 导出器的所有选项。 |
resolver | 只能配置一个解析器。 |
resolver.static | 静态解析器在列出的端点之间分配负载。 |
resolver.dns | DNS 解析器仅适用于 Kubernetes 无头服务。 |
resolver.k8s | 推荐使用 Kubernetes 解析器。 |
Prometheus 导出器以 Prometheus 或 OpenMetrics 格式导出度量数据,允许 Prometheus 服务器抓取数据。以下是配置和使用 Prometheus 导出器的详细信息。
必需配置
/metrics
。必须配置此项,并且没有默认值。可选配置
false
。5m
。enabled
:默认值为 false
。启用时,将资源属性转换为度量标签。false
。启用时,以 OpenMetrics 格式导出度量。true
。是否添加类型和单位后缀。TLS 配置
可以使用 ca_file
、cert_file
和 key_file
设置 TLS 证书,以确保安全通信。
示例 YAML 配置
以下是 Prometheus 导出器的示例配置:
该配置在 0.0.0.0:8889/metrics
上暴露 Prometheus 指标,并配置 TLS 证书及其他参数。
使用建议
target_info
指标中。您可以使用 Prometheus 查询选择和将这些属性分组为度量标签。transform processor
将常用的资源属性直接转换为度量标签。连接器连接两个管道,同时作为导出器和接收器。连接器在一个管道的末尾以导出器的身份消耗数据,然后在另一个管道的开头以接收器的身份发送数据。消耗和发送的数据可以是相同或不同类型的。您可以使用连接器来聚合、复制或路由数据。
您可以在 Collector 配置文件的 connectors
部分配置一个或多个连接器。默认情况下,没有配置连接器。每种类型的连接器旨在处理一种或多种数据类型的组合,并且只能用于连接相应数据类型的管道。
注意:配置连接器并不会启用它。需要通过将连接器添加到相关管道中的 服务部分 来启用连接器。
提示:有关更详细的连接器配置,请参阅 连接器 README。
ASM 服务图连接器构建一个表示系统中各种服务之间关系的图。该连接器分析跨度数据并生成描述服务之间关系的度量。这些度量可以被数据可视化应用程序(如 Grafana)用来绘制服务图。
注意: 该组件是社区组件服务图连接器的自定义版本,不能直接替换为社区原生组件。下面将解释特定参数的差异。
服务拓扑在许多用例中非常有用:
YAML 示例
asmservicegraph
参数描述
参数 | 描述 |
---|---|
dimensions | 要添加到从资源和跨度属性提取的度量的附加维度(标签)。 |
extra_dimensions | ASM 平台添加的属性。 |
extra_dimensions.mesh_id | Mesh ID。ASM 平台部署 Istio 服务网格,mesh_id 反映 Istio mesh 的 ID。 |
extra_dimensions.cluster_name | 集群名称。表示 OTel Collector 在 ASM 平台中所在集群的名称。 |
store.ttl | 内存存储中临时数据的生命周期。 |
store.max_items | 可以临时存储在内存中的跨度数据条目的最大数量。 |
扩展为 Collector 添加功能。例如,扩展可以自动为接收器和导出器添加身份验证功能。
扩展是可选组件,用于扩展 Collector 的功能,以执行与处理遥测数据无关的任务。例如,您可以为健康监控、服务发现或数据转发添加扩展。
您可以在 Collector 配置文件的 extensions
部分配置扩展。大多数扩展带有默认设置,因此您只需指定扩展的名称即可配置它。任何指定的设置将覆盖默认值(如果存在)。
注意:配置扩展并不会启用它。扩展必须在 服务部分 中启用。默认情况下,无扩展被配置。
提示:有关更详细的扩展配置,请参阅 扩展 README。
service
部分用于根据 receivers
、processors
、exporters
和 extensions
部分的配置在 Collector 中启用组件。如果一个组件已被配置但未在 service
部分中定义,则不会启用其。
service
部分包括三个子部分:
扩展:要启用的所需扩展的列表。例如:
管道:配置管道,管道可以是以下类型:
管道由一组 receivers
、processors
和 exporters
组成。在将 receiver
、processor
或 exporter
包含在管道中之前,请确保其配置是在相应部分中定义的。
您可以在多个管道中使用相同的 receiver
、processor
或 exporter
。当处理器在多个管道中被引用时,每个管道都会获得该处理器的单独实例。
下面是管道配置示例。请注意,处理器的顺序决定数据的处理序列:
遥测:telemetry
配置部分用于设置 Collector 本身的可观察性。它由 logs
和 metrics
子部分组成。有关如何配置这些信号的信息,请参见 在 Collector 中激活内部遥测。
Collector 配置支持使用和扩展环境变量。例如,要使用存储在 DB_KEY
和 OPERATION
环境变量中的值,可以写:
使用 $$
表示文字 $
。例如,为了表示 $DataVisualization
,您可以写:
使用 net/http 包的导出器支持以下代理环境变量:
如果在 Collector 启动时设置了这些变量,则导出器将根据这些环境变量代理或绕过代理流量,而不考虑协议。
大多数公开 HTTP 或 gRPC 端口的 receivers
可以使用 Collector 的身份验证机制进行保护。同样,大多数使用 HTTP 或 gRPC 客户端的 exporters
可以将身份验证添加到传出的请求中。
Collector 中的身份验证机制使用扩展机制,使自定义验证器能够集成到 Collector 分发中。每个身份验证扩展可以通过两种方式使用:
exporters
的客户端身份验证器,将身份验证数据添加到传出的请求中。receivers
的服务器身份验证器,验证传入连接。有关已知身份验证器的列表,请参阅 注册表。
要将服务器身份验证器添加到 Collector 中的 receiver
,请按照以下步骤操作:
.extensions
下添加身份验证器扩展及其配置。.services.extensions
下添加对身份验证器的引用,以便 Collector 加载它。.receivers.<your-receiver>.<http-or-grpc-config>.auth
下添加对身份验证器的引用。以下示例在接收端使用 OIDC 身份验证器,适用于通过 OpenTelemetry Collector 作为代理接收数据的远程 Collectors:
在代理端,此示例配置 OTLP 导出器以获取 OIDC 令牌并将其添加到发送到远程 Collector 的每个 RPC 中:
为了在生产环境中进行安全通信,请使用 TLS 证书或 mTLS 进行相互身份验证。请按照以下步骤生成自签名证书,或者使用您当前的证书提供者生成生产证书。
安装 cfssl 并创建以下 csr.json
文件:
然后运行以下命令:
这将创建两份证书:
ca.pem
中,关联的密钥在 ca-key.pem
中。cert.pem
中的客户端证书,由 OpenTelemetry Example CA 签名,关联的密钥在 cert-key.pem
中。您可以使用 --set
选项覆盖 Collector 设置。以这种方式定义的设置将在解析和合并所有 --config
源之后合并到最终配置中。
以下示例演示了如何覆盖嵌套部分中的设置:
重要提示:--set
选项不支持设置包含点(.)或等号(=)的键。