加载中

使用 Elastic Cloud 托管 OTLP 端点时出现 429 错误

通过 Elastic Cloud 托管 OTLP 端点 (mOTLP) 发送遥测数据时,您可能会遇到 HTTP 429 Too Many Requests 错误。这表明您的摄取速率暂时超过了为您的 Elastic Cloud 项目配置的速率或突发限制。

此问题可能发生在 Elastic Cloud Serverless 和 Elastic Cloud Hosted (ECH) 环境中。

您可能会在 EDOT Collector 输出或 SDK 日志中注意到类似以下的日志消息

{
  "code": 8,
  "message": "error exporting items, request to <ingest endpoint> responded with HTTP Status Code 429"
}
		

有时,您可能还会注意到 Collector 内部遥测中的警告或背压指标增加。例如,队列长度或发送失败计数。

429 状态意味着发送到托管 OTLP 端点的请求速率已超过允许的阈值。这可能由多种原因导致

  • 您的遥测管道发送数据的速度超过了允许的摄取速率。

  • 即使您的持续速率在限制范围内,遥测数据的突发流量也超过了短期突发限制。

    确切的限制因部署类型、订阅和当前配置而异。有关详细信息,请参阅 mOTLP 参考文档中的 速率限制 (Rate limiting) 部分

  • 在 Elastic Cloud Hosted 中,您的部署的 Elasticsearch 容量可能无法满足当前的摄取速率(即容量不足)。

  • 在 Elastic Cloud Serverless 中,速率限制不应由 Elasticsearch 容量引起,因为平台会自动扩展摄取容量。如果您怀疑存在扩展问题,请联系 Elastic 支持

  • 多个 Collector 或 SDK 在没有负载均衡或退避机制的情况下同时发送数据。

要解决 429 错误,请确定瓶颈是由摄取限制还是 Elasticsearch 容量引起的。

如果您已确认摄取配置稳定但仍然遇到 429 错误

扩展后,监控您的摄取指标以验证已接受请求的速率是否增加,并且不再出现 429 响应。

通过在 EDOT Collector 或 SDK 配置中启用批处理和重试机制来降低遥测导出速率。例如

processors:
  batch:
    send_batch_size: 1000
    timeout: 5s

exporters:
  otlp:
    retry_on_failure:
      enabled: true
      initial_interval: 1s
      max_interval: 30s
      max_elapsed_time: 300s
		

这些设置有助于平滑流量峰值,并在收到速率限制响应后自动重试失败的导出。

为了最大限度地减少临时限流期间的数据丢失,请配置您的导出器以使用发送队列和重试逻辑。例如

exporters:
  otlp:
    sending_queue:
      enabled: true
      num_consumers: 10
      queue_size: 1000
    retry_on_failure:
      enabled: true
		

这确保了 Collector 在等待摄取端点从限流中恢复时能在本地缓冲数据。有关导出失败和队列配置的更多信息,请参阅发送遥测数据时的导出失败 (Export failures when sending telemetry data)

为防止 429 错误并保持可靠的遥测数据流,请实施以下最佳实践

  • 监控内部 Collector 指标(例如 otelcol_exporter_send_failedotelcol_exporter_queue_capacity),以便及早发现背压。
  • 将遥测负载均匀分布在多个 Collector 上,而不是通过单个实例发送所有数据。
  • 在可能的情况下,启用批处理和压缩以减小有效载荷大小。
  • 保持重试和退避间隔保守,以避免在临时限流后使端点过载。
© . This website operates independently and is not affiliated with or endorsed by Elasticsearch B.V. All brand names, logos, and trademarks are the property of their respective owners.