|
| 1 | +--- |
| 2 | +navigation_title: 429 errors when using the mOTLP endpoint |
| 3 | +description: Resolve HTTP 429 `Too Many Requests` errors when sending data through the Elastic Cloud Managed OTLP (mOTLP) endpoint in Elastic Cloud Serverless or Elastic Cloud Hosted (ECH). |
| 4 | +applies_to: |
| 5 | + stack: |
| 6 | + serverless: |
| 7 | + observability: |
| 8 | + product: |
| 9 | + edot_collector: |
| 10 | +products: |
| 11 | + - id: cloud-serverless |
| 12 | + - id: cloud-hosted |
| 13 | + - id: observability |
| 14 | + - id: edot-collector |
| 15 | +--- |
| 16 | + |
| 17 | +# 429 errors when using the Elastic Cloud Managed OTLP Endpoint |
| 18 | + |
| 19 | +When sending telemetry data through the {{motlp}} (mOTLP), you might encounter HTTP `429 Too Many Requests` errors. These indicate that your ingest rate has temporarily exceeded the rate or burst limits configured for your {{ecloud}} project. |
| 20 | + |
| 21 | +This issue can occur in both {{serverless-full}} and {{ech}} (ECH) environments. |
| 22 | + |
| 23 | +## Symptoms |
| 24 | + |
| 25 | +You might see log messages similar to the following in your EDOT Collector output or SDK logs: |
| 26 | + |
| 27 | +```json |
| 28 | +{ |
| 29 | + "code": 8, |
| 30 | + "message": "error exporting items, request to <ingest endpoint> responded with HTTP Status Code 429" |
| 31 | +} |
| 32 | +``` |
| 33 | + |
| 34 | +In some cases, you may also see warnings or backpressure metrics increase in your Collector’s internal telemetry (for example, queue length or failed send count). |
| 35 | + |
| 36 | +## Causes |
| 37 | + |
| 38 | +A 429 status means that the rate of requests sent to the Managed OTLP endpoint has exceeded allowed thresholds. This can happen for several reasons: |
| 39 | + |
| 40 | +* Your telemetry pipeline is sending data faster than the allowed ingest rate. |
| 41 | +* Bursts of telemetry data exceed the short-term burst limit, even if your sustained rate is within limits. |
| 42 | + |
| 43 | + The specific limits depend on your environment: |
| 44 | + |
| 45 | + | Deployment type | Rate limit | Burst limit | |
| 46 | + |-----------------|------------|-------------| |
| 47 | + | Serverless | 15 MB/s | 30 MB/s | |
| 48 | + | ECH | Depends on deployment size and available {{es}} capacity | Depends on deployment size and available {{es}} capacity | |
| 49 | + |
| 50 | + Exact limits depend on your subscription tier. |
| 51 | + Refer to the [Rate limiting section](opentelemetry://reference/motlp.md#rate-limiting) in the mOTLP reference documentation for details. |
| 52 | + |
| 53 | +* In {{ech}}, the {{es}} capacity for your deployment might be underscaled for the current ingest rate. |
| 54 | +* In {{serverless-full}}, rate limiting should not result from {{es}} capacity, since the platform automatically scales ingest capacity. If you suspect a scaling issue, [contact Elastic Support](contact-support.md). |
| 55 | +* Multiple Collectors or SDKs are sending data concurrently without load balancing or backoff mechanisms. |
| 56 | + |
| 57 | +## Resolution |
| 58 | + |
| 59 | +To resolve 429 errors, identify whether the bottleneck is caused by ingest limits or {{es}} capacity. |
| 60 | + |
| 61 | +### Scale your deployment or request higher limits |
| 62 | + |
| 63 | +If you’ve confirmed that your ingest configuration is stable but still encounter 429 errors: |
| 64 | + |
| 65 | +* {{serverless-full}}: [Contact Elastic Support](contact-support.md) to request an increase in ingest limits. |
| 66 | +* {{ech}} (ECH): Increase your {{es}} capacity by scaling or resizing your deployment: |
| 67 | + * [Scaling considerations](../../../deploy-manage/production-guidance/scaling-considerations.md) |
| 68 | + * [Resize deployment](../../../deploy-manage/deploy/cloud-enterprise/resize-deployment.md) |
| 69 | + * [Autoscaling in ECE and ECH](../../../deploy-manage/autoscaling/autoscaling-in-ece-and-ech.md) |
| 70 | + |
| 71 | +After scaling, monitor your ingest metrics to verify that the rate of accepted requests increases and 429 responses stop appearing. |
| 72 | + |
| 73 | +### Reduce ingest rate or enable backpressure |
| 74 | + |
| 75 | +Lower the telemetry export rate by enabling batching and retry mechanisms in your EDOT Collector or SDK configuration. For example: |
| 76 | + |
| 77 | +```yaml |
| 78 | +processors: |
| 79 | + batch: |
| 80 | + send_batch_size: 1000 |
| 81 | + timeout: 5s |
| 82 | + |
| 83 | +exporters: |
| 84 | + otlp: |
| 85 | + retry_on_failure: |
| 86 | + enabled: true |
| 87 | + initial_interval: 1s |
| 88 | + max_interval: 30s |
| 89 | + max_elapsed_time: 300s |
| 90 | +``` |
| 91 | +
|
| 92 | +These settings help smooth out spikes and automatically retry failed exports after rate-limit responses. |
| 93 | +
|
| 94 | +### Enable retry logic and queueing |
| 95 | +
|
| 96 | +To minimize data loss during temporary throttling, configure your exporter to use a sending queue and retry logic. For example: |
| 97 | +
|
| 98 | +```yaml |
| 99 | +exporters: |
| 100 | + otlp: |
| 101 | + sending_queue: |
| 102 | + enabled: true |
| 103 | + num_consumers: 10 |
| 104 | + queue_size: 1000 |
| 105 | + retry_on_failure: |
| 106 | + enabled: true |
| 107 | +``` |
| 108 | +
|
| 109 | +This ensures the Collector buffers data locally while waiting for the ingest endpoint to recover from throttling. |
| 110 | +
|
| 111 | +## Best practices |
| 112 | +
|
| 113 | +To prevent 429 errors and maintain reliable telemetry data flow, implement these best practices: |
| 114 | +
|
| 115 | +* Monitor internal Collector metrics (such as `otelcol_exporter_send_failed` and `otelcol_exporter_queue_capacity`) to detect backpressure early. |
| 116 | +* Distribute telemetry load evenly across multiple Collectors instead of sending all data through a single instance. |
| 117 | +* When possible, enable batching and compression to reduce payload size. |
| 118 | +* Keep retry and backoff intervals conservative to avoid overwhelming the endpoint after a temporary throttle. |
| 119 | + |
| 120 | +## Resources |
| 121 | + |
| 122 | +* [{{motlp}} reference](opentelemetry://reference/motlp.md) |
| 123 | +* [Quickstart: Send OTLP data to Elastic Serverless or {{ech}}](../../../solutions/observability/get-started/quickstart-elastic-cloud-otel-endpoint.md) |
0 commit comments