Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
8d7fba5
Add ARC support
raghu999 Nov 8, 2025
6ef1cc8
Merge branch 'main' into arc-feature
raghu999 Nov 8, 2025
232d073
update version to 0.139.0 and fix lint errors
raghu999 Nov 8, 2025
f79d24e
Merge branch 'arc-feature' of github.com-raghu999:raghu999/openteleme…
raghu999 Nov 8, 2025
88486c8
update exporter helper with new implementation
raghu999 Nov 9, 2025
2dda0b2
Merge branch 'main' into arc-feature
raghu999 Nov 10, 2025
b1c96fb
fix: remove back pressure and add retryable error
raghu999 Nov 16, 2025
4434abe
Merge branch 'main' into arc-feature
raghu999 Nov 16, 2025
354213c
Merge branch 'main' into arc-feature
raghu999 Nov 18, 2025
d9c349b
Merge branch 'main' into arc-feature
raghu999 Nov 19, 2025
0a55774
Merge branch 'main' into arc-feature
raghu999 Nov 21, 2025
14d213d
Merge branch 'main' into arc-feature
raghu999 Nov 24, 2025
93b3443
Merge branch 'main' into arc-feature
raghu999 Nov 25, 2025
b541b7a
Merge branch 'main' into arc-feature
raghu999 Nov 25, 2025
076ded7
Merge branch 'main' into arc-feature
raghu999 Nov 26, 2025
2850eb7
Merge branch 'main' into arc-feature
raghu999 Nov 27, 2025
27537d5
Merge branch 'main' into arc-feature
raghu999 Nov 27, 2025
6253cb2
Merge branch 'main' into arc-feature
raghu999 Nov 30, 2025
6dd61e3
add benchmark test
raghu999 Dec 1, 2025
8c74b30
Merge branch 'main' into arc-feature
raghu999 Dec 1, 2025
fa2ff5f
Merge branch 'main' into arc-feature
raghu999 Dec 2, 2025
042cdef
Merge branch 'main' into arc-feature
raghu999 Dec 2, 2025
5d96275
Merge branch 'main' into arc-feature
raghu999 Dec 3, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions .chloggen/arc-feature.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
change_type: enhancement
component: pkg/exporterhelper
note: >
Add Adaptive Request Concurrency (ARC) to exporterhelper: a controller that
dynamically adjusts exporter concurrency based on observed RTT and
backpressure signals. Integrates with the queue/batch send path and exposes
new telemetry. Disabled by default; no behavior change unless enabled.
issues: [14080]
subtext: |
Configuration (exporterhelper / queue-batch settings):
- enabled: turn ARC on/off (default: false)
- initial_concurrency: starting permits (default: 1)
- max_concurrency: upper bound (default: 200)
- decrease_ratio: multiplicative decrease factor on pressure (default: 0.9)
- ewma_alpha: smoothing for RTT EWMA (default: 0.4)
- rtt_deviation_scale: N·σ spike threshold for decrease (default: 2.5)

Telemetry (new metrics):
- otelcol_exporter_arc_acquire_wait_ms (histogram; attrs: exporter, data_type)
- otelcol_exporter_arc_rtt_ms (histogram; attrs: exporter, data_type)
- otelcol_exporter_arc_failures (sum, monotonic; attrs: exporter, data_type)
- otelcol_exporter_arc_backoff_events (sum, monotonic; attrs: exporter, data_type)
- otelcol_exporter_arc_limit_changes (sum, monotonic; attrs: exporter, data_type, direction=up|down)
- otelcol_exporter_arc_limit (async gauge; attrs: exporter, data_type)
- otelcol_exporter_arc_permits_in_use (async gauge; attrs: exporter, data_type)

Notes:
- ARC increases concurrency additively and decreases multiplicatively on
backpressure or RTT spikes (mean + rtt_deviation_scale·σ).
- Direction attribute values: "up", "down".
change_logs: [user]

14 changes: 14 additions & 0 deletions exporter/exporterhelper/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ The following configuration options can be modified:
- `bytes`: the size of serialized data in bytes (the least performant option).
- `queue_size` (default = 1000): Maximum size the queue can accept. Measured in units defined by `sizer`
- `batch`: see below.
- `arc`: see below.

#### Sending queue batch settings

Expand All @@ -50,6 +51,19 @@ Available `batch::sizer` options:

- `items`: number of the smallest parts of each signal (spans, metric data points, log records);
- `bytes`: the size of serialized data in bytes (the least performant option).

#### Sending queue Adaptive Concurrency Limiter (ARC) Settings

The Adaptive Concurrency Limiter (ARC) dynamically adjusts the number of concurrent requests (`num_consumers`) based on observed RTTs and backpressure signals. It aims to maximize throughput while minimizing errors and latency. It is disabled by default.

- `arc`
- `enabled` (default = false): Set to `true` to enable ARC.
- `initial_limit` (default = 1): The starting concurrency limit.
- `max_concurrency` (default = 200): The maximum number of concurrent requests ARC will allow.
- `decrease_ratio` (default = 0.9): The multiplicative factor to apply when decreasing the limit (e.g., 0.9 = 10% decrease).
- `ewma_alpha` (default = 0.4): The smoothing factor for the EWMA (Exponentially Weighted Moving Average) of RTTs.
- `deviation_scale` (default = 2.5): The number of standard deviations from the mean RTT to tolerate before triggering a backoff.

### Timeout

- `timeout` (default = 5s): Time to wait per individual attempt to send data to a backend
Expand Down
62 changes: 62 additions & 0 deletions exporter/exporterhelper/documentation.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,68 @@

The following telemetry is emitted by this component.

### otelcol_exporter_arc_acquire_wait_ms

Time a worker waited to acquire an ARC permit. [Alpha]

| Unit | Metric Type | Value Type | Stability |
| ---- | ----------- | ---------- | --------- |
| ms | Histogram | Int | Alpha |

### otelcol_exporter_arc_backoff_events

Number of ARC backoff (shrink) events triggered by error or RTT signal. [Alpha]

| Unit | Metric Type | Value Type | Monotonic | Stability |
| ---- | ----------- | ---------- | --------- | --------- |
| {events} | Sum | Int | true | Alpha |

### otelcol_exporter_arc_failures

Number of requests considered failures by ARC (feeds adaptive shrink). [Alpha]

| Unit | Metric Type | Value Type | Monotonic | Stability |
| ---- | ----------- | ---------- | --------- | --------- |
| {requests} | Sum | Int | true | Alpha |

### otelcol_exporter_arc_limit

Current ARC dynamic concurrency limit. [Alpha]

| Unit | Metric Type | Value Type | Stability |
| ---- | ----------- | ---------- | --------- |
| {permits} | Gauge | Int | Alpha |

### otelcol_exporter_arc_limit_changes

Number of times ARC changed its concurrency limit. [Alpha]

| Unit | Metric Type | Value Type | Monotonic | Stability |
| ---- | ----------- | ---------- | --------- | --------- |
| {events} | Sum | Int | true | Alpha |

#### Attributes

| Name | Description | Values |
| ---- | ----------- | ------ |
| direction | up or down | Str: ``up``, ``down`` |

### otelcol_exporter_arc_permits_in_use

Number of permits currently acquired. [Alpha]

| Unit | Metric Type | Value Type | Stability |
| ---- | ----------- | ---------- | --------- |
| {permits} | Gauge | Int | Alpha |

### otelcol_exporter_arc_rtt_ms

Request round-trip-time measured by ARC (from permit acquire to release). [Alpha]

| Unit | Metric Type | Value Type | Stability |
| ---- | ----------- | ---------- | --------- |
| ms | Histogram | Int | Alpha |

### otelcol_exporter_enqueue_failed_log_records

Number of log records failed to be added to the sending queue. [Alpha]
Expand Down
Loading