otelcol 处理器.batch
otelcol.processor.batch
接受来自其他otelcol
组件的遥测数据,并将它们放入批次。批处理可以提高数据压缩并减少传输数据所需的外出网络请求数量。此处理器支持基于大小和时间的批处理。
我们强烈建议您在每个使用OpenTelemetry(otelcol)Alloy组件的Alloy上配置批量处理器。批量处理器应定义在管道中,在otelcol.processor.memory_limiter
以及任何采样处理器之后。这是因为批处理应该在任何数据丢失之后发生,例如采样。
注意:
otelcol.processor.batch
是上游OpenTelemetry Collectorbatch
处理器的封装。如果需要,将问题报告或功能请求重定向到上游存储库。
可以通过给它们不同的标签来指定多个otelcol.processor.batch
组件。
用法
otelcol.processor.batch "LABEL" {
output {
metrics = [...]
logs = [...]
traces = [...]
}
}
参数
otelcol.processor.batch
支持以下参数
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
timeout | 持续时间 | 在刷新批处理之前等待多长时间。 | "200ms" | 否 |
send_batch_size | 数字 | 在刷新批处理之前要缓冲的数据量。 | 8192 | 否 |
send_batch_max_size | 数字 | 批次大小上限。 | 0 | 否 |
metadata_keys | 列表(字符串) | 为元数据中的每个键/值组合创建不同的批处理器。 | [] | 否 |
metadata_cardinality_limit | 数字 | 唯一元数据键/值组合的极限。 | 1000 | 否 |
otelcol.processor.batch
将数据累积到批次中,直到以下事件之一发生
自最后一批发送以来,指定了
timeout
持续时间。处理跨度、日志行或度量样本的数量大于或等于由
send_batch_size
指定的数量。
日志、跟踪和度量独立处理。例如,如果将send_batch_size
设置为1000
- 处理器可以在同时缓冲1000个跨度、1000行日志和1000个度量样本之前刷新它们。
- 如果有足够多的跨度来形成跨度批(1000个或更多),但没有足够的度量样本批(少于1000),则只会刷新跨度。
使用send_batch_max_size
来限制单个批次的包含数据量。
- 当设置为
0
时,批次可以任何大小。 - 当设置为非零值时,
send_batch_max_size
必须大于或等于send_batch_size
。每个批次最多包含send_batch_max_size
个跨度、日志行或指标样本。额外的跨度、日志行或指标样本不会丢失 - 相反,它们将被添加到下一个批次中。
例如,假设send_batch_size
设置为默认的8192
,并且目前有8,000个分组跨度。如果批处理程序一次性接收8,000个更多跨度,其行为取决于send_batch_max_size
的配置。
- 如果
send_batch_max_size
设置为0
,则总批次大小将为16,000,然后可以作为单一批次刷新。 - 如果
send_batch_max_size
设置为10000
,则总批次大小将为10,000,其余6,000个跨度将在随后的批次中刷新。
metadata_cardinality_limit
适用于进程的整个生命周期。
接收器应配置为include_metadata = true
,以便元数据键对处理器可用。
每个不同的元数据组合都会在Alloy进程的整个生命周期内分配一个新的后台任务,每个后台任务持有最多send_batch_size
个记录的挂起批次。因此,通过元数据进行分批可以显著增加分配给分批的内存量。
不同的组合的最大数量限制为配置的metadata_cardinality_limit
,默认为1000,以限制内存影响。
块
在otelcol.processor.batch
的定义内支持以下块
层次结构 | 块 | 描述 | 必需 |
---|---|---|---|
输出 | 输出 | 配置将接收到的遥测数据发送到何处。 | 是 |
调试度量 | 调试度量 | 配置此组件生成的用于监控其状态的度量。 | 否 |
输出块
output
块配置了一组组件,将结果遥测数据转发到其他组件。
支持以下参数
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
日志 | list(otelcol.Consumer) | 要发送日志的接收器列表。 | [] | 否 |
度量 | list(otelcol.Consumer) | 要发送度量的接收器列表。 | [] | 否 |
跟踪 | list(otelcol.Consumer) | 要发送跟踪的接收器列表。 | [] | 否 |
您必须指定output
块,但其所有参数都是可选的。默认情况下,遥测数据将被丢弃。根据需要配置metrics
、logs
和traces
参数,以将遥测数据发送到其他组件。
调试度量块
debug_metrics
块配置此组件生成的用于监控其状态的度量。
支持以下参数
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
disable_high_cardinality_metrics | 布尔值 | 是否禁用某些高基数度量。 | 是 | 否 |
级别 | 字符串 | 控制包装收集器发出的度量的详细程度。 | "详细" | 否 |
disable_high_cardinality_metrics
是Grafana Alloy中对OpenTelemetry Collector中的telemetry.disableHighCardinalityMetrics
功能开关的等价物。它删除可能导致高基数度量的属性。例如,从关于HTTP和gRPC连接的度量中删除具有IP地址和端口号的属性。
注意
如果配置了,则仅对otelcol.exporter.*
和otelcol.receiver.*
组件应用disable_high_cardinality_metrics
。
level
是OpenTelemetry Collector中对telemetry.metrics.level
功能开关的Alloy等价物。可能的值是"none"
、"basic"
、"normal"
和"detailed"
。
导出字段
以下字段被导出,并可由其他组件引用
名称 | 类型 | 描述 |
---|---|---|
输入 | otelcol.Consumer | 其他组件可以使用它将遥测数据发送到的一个值。 |
input
接受任何遥测信号(指标、日志或跟踪)的otelcol.Consumer
数据。
组件健康状况
otelcol.processor.batch
只有在给出无效配置时才会报告为不健康。
调试信息
otelcol.processor.batch
不暴露任何特定组件的调试信息。
调试指标
processor_batch_batch_send_size_bytes
(直方图):已发送批次的字节数。processor_batch_batch_send_size_ratio
(直方图):批次中的单元数量。processor_batch_metadata_cardinality_ratio
(仪表):正在处理的唯一元数据值组合的数量。processor_batch_timeout_trigger_send_ratio_total
(计数器):由于超时触发而发送批次的次数。processor_batch_batch_size_trigger_send_ratio_total
(计数器):由于大小触发而发送批次的次数。
示例
基本用法
此示例在将数据发送到 otelcol.exporter.otlp 进行进一步处理之前对遥测数据进行批处理。
otelcol.processor.batch "default" {
output {
metrics = [otelcol.exporter.otlp.production.input]
logs = [otelcol.exporter.otlp.production.input]
traces = [otelcol.exporter.otlp.production.input]
}
}
otelcol.exporter.otlp "production" {
client {
endpoint = env("OTLP_SERVER_ENDPOINT")
}
}
带有超时的批处理
此示例将缓冲最多10,000个跨度、指标数据点或日志条目,持续最多10秒。由于未设置send_batch_max_size
,批次大小可能超过10,000。
otelcol.processor.batch "default" {
timeout = "10s"
send_batch_size = 10000
output {
metrics = [otelcol.exporter.otlp.production.input]
logs = [otelcol.exporter.otlp.production.input]
traces = [otelcol.exporter.otlp.production.input]
}
}
otelcol.exporter.otlp "production" {
client {
endpoint = env("OTLP_SERVER_ENDPOINT")
}
}
基于元数据的批处理
基于元数据的批处理支持多租户OpenTelemetry管道,通过具有相同授权元数据的组数据批处理。
otelcol.receiver.jaeger "default" {
protocols {
grpc {
include_metadata = true
}
thrift_http {}
thrift_binary {}
thrift_compact {}
}
output {
traces = [otelcol.processor.batch.default.input]
}
}
otelcol.processor.batch "default" {
// batch data by tenant id
metadata_keys = ["tenant_id"]
// limit to 10 batcher processes before raising errors
metadata_cardinality_limit = 123
output {
traces = [otelcol.exporter.otlp.production.input]
}
}
otelcol.exporter.otlp "production" {
client {
endpoint = env("OTLP_SERVER_ENDPOINT")
}
}
兼容组件
otelcol.processor.batch
可以接受以下组件的参数:
otelcol.processor.batch
的导出可以被以下组件消费:
注意
连接某些组件可能不合理,或者组件可能需要进一步配置才能正确连接。有关更多详细信息,请参阅相关文档。