菜单
文档breadcrumb arrow Grafana Alloybreadcrumb arrow 参考breadcrumb arrow 组件breadcrumb arrow otelcolbreadcrumb arrow otelcol.processor.batch
开源

otelcol 处理器.batch

otelcol.processor.batch接受来自其他otelcol组件的遥测数据,并将它们放入批次。批处理可以提高数据压缩并减少传输数据所需的外出网络请求数量。此处理器支持基于大小和时间的批处理。

我们强烈建议您在每个使用OpenTelemetry(otelcol)Alloy组件的Alloy上配置批量处理器。批量处理器应定义在管道中,在otelcol.processor.memory_limiter以及任何采样处理器之后。这是因为批处理应该在任何数据丢失之后发生,例如采样。

注意otelcol.processor.batch是上游OpenTelemetry Collector batch处理器的封装。如果需要,将问题报告或功能请求重定向到上游存储库。

可以通过给它们不同的标签来指定多个otelcol.processor.batch组件。

用法

alloy
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块,但其所有参数都是可选的。默认情况下,遥测数据将被丢弃。根据需要配置metricslogstraces参数,以将遥测数据发送到其他组件。

调试度量块

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 进行进一步处理之前对遥测数据进行批处理。

alloy
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。

alloy
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管道,通过具有相同授权元数据的组数据批处理。

alloy
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 的导出可以被以下组件消费:

注意

连接某些组件可能不合理,或者组件可能需要进一步配置才能正确连接。有关更多详细信息,请参阅相关文档。