Overload Manager (proto)

The Overload Manager provides an extensible framework to protect Envoy instances from overload of various resources (memory, cpu, file descriptors, etc). It monitors a configurable set of resources and notifies registered listeners when triggers related to those resources fire.

config.overload.v3.ResourceMonitor

[config.overload.v3.ResourceMonitor proto]

{
  "name": ...,
  "typed_config": {...}
}
name

(string, REQUIRED) The name of the resource monitor to instantiate. Must match a registered resource monitor type. See the extensions listed in typed_config below for the default list of available resource monitor.

typed_config

(Any) Configuration for the resource monitor being instantiated.

config.overload.v3.ThresholdTrigger

[config.overload.v3.ThresholdTrigger proto]

{
  "value": ...
}
value

(double) If the resource pressure is greater than or equal to this value, the trigger will enter saturation.

config.overload.v3.ScaledTrigger

[config.overload.v3.ScaledTrigger proto]

{
  "scaling_threshold": ...,
  "saturation_threshold": ...
}
scaling_threshold

(double) If the resource pressure is greater than this value, the trigger will be in the scaling state with value (pressure - scaling_threshold) / (saturation_threshold - scaling_threshold).

saturation_threshold

(double) If the resource pressure is greater than this value, the trigger will enter saturation.

config.overload.v3.Trigger

[config.overload.v3.Trigger proto]

{
  "name": ...,
  "threshold": {...},
  "scaled": {...}
}
name

(string, REQUIRED) The name of the resource this is a trigger for.

threshold

(config.overload.v3.ThresholdTrigger)

Precisely one of threshold, scaled must be set.

scaled

(config.overload.v3.ScaledTrigger)

Precisely one of threshold, scaled must be set.

config.overload.v3.ScaleTimersOverloadActionConfig

[config.overload.v3.ScaleTimersOverloadActionConfig proto]

Typed configuration for the “envoy.overload_actions.reduce_timeouts” action. See the docs for an example of how to configure the action with different timeouts and minimum values.

{
  "timer_scale_factors": []
}
timer_scale_factors

(repeated config.overload.v3.ScaleTimersOverloadActionConfig.ScaleTimer, REQUIRED) A set of timer scaling rules to be applied.

config.overload.v3.ScaleTimersOverloadActionConfig.ScaleTimer

[config.overload.v3.ScaleTimersOverloadActionConfig.ScaleTimer proto]

{
  "timer": ...,
  "min_timeout": {...},
  "min_scale": {...}
}
timer

(config.overload.v3.ScaleTimersOverloadActionConfig.TimerType) The type of timer this minimum applies to.

min_timeout

(Duration) Sets the minimum duration as an absolute value.

Precisely one of min_timeout, min_scale must be set.

min_scale

(type.v3.Percent) Sets the minimum duration as a percentage of the maximum value.

Precisely one of min_timeout, min_scale must be set.

Enum config.overload.v3.ScaleTimersOverloadActionConfig.TimerType

[config.overload.v3.ScaleTimersOverloadActionConfig.TimerType proto]

UNSPECIFIED

(DEFAULT) ⁣Unsupported value; users must explicitly specify the timer they want scaled.

HTTP_DOWNSTREAM_CONNECTION_IDLE

⁣Adjusts the idle timer for downstream HTTP connections that takes effect when there are no active streams. This affects the value of HttpConnectionManager.common_http_protocol_options.idle_timeout

HTTP_DOWNSTREAM_STREAM_IDLE

⁣Adjusts the idle timer for HTTP streams initiated by downstream clients. This affects the value of RouteAction.idle_timeout and HttpConnectionManager.stream_idle_timeout

TRANSPORT_SOCKET_CONNECT

⁣Adjusts the timer for how long downstream clients have to finish transport-level negotiations before the connection is closed. This affects the value of FilterChain.transport_socket_connect_timeout.

config.overload.v3.OverloadAction

[config.overload.v3.OverloadAction proto]

{
  "name": ...,
  "triggers": [],
  "typed_config": {...}
}
name

(string, REQUIRED) The name of the overload action. This is just a well-known string that listeners can use for registering callbacks. Custom overload actions should be named using reverse DNS to ensure uniqueness.

triggers

(repeated config.overload.v3.Trigger, REQUIRED) A set of triggers for this action. The state of the action is the maximum state of all triggers, which can be scalar values between 0 and 1 or saturated. Listeners are notified when the overload action changes state. An overload manager action can only have one trigger for a given resource e.g. Trigger.name must be unique in this list.

typed_config

(Any) Configuration for the action being instantiated.

config.overload.v3.LoadShedPoint

[config.overload.v3.LoadShedPoint proto]

A point within the connection or request lifecycle that provides context on whether to shed load at that given stage for the current entity at the point.

{
  "name": ...,
  "triggers": []
}
name

(string, REQUIRED) This is just a well-known string for the LoadShedPoint. Deployment specific LoadShedPoints e.g. within a custom extension should be prefixed by the company / deployment name to avoid colliding with any open source LoadShedPoints.

triggers

(repeated config.overload.v3.Trigger, REQUIRED) A set of triggers for this LoadShedPoint. The LoadShedPoint will use the the maximum state of all triggers, which can be scalar values between 0 and 1 or saturated. A LoadShedPoint can only have one trigger for a given resource e.g. Trigger.name must be unique in this list.

config.overload.v3.BufferFactoryConfig

[config.overload.v3.BufferFactoryConfig proto]

Configuration for which accounts the WatermarkBuffer Factories should track.

{
  "minimum_account_to_track_power_of_two": ...
}
minimum_account_to_track_power_of_two

(uint32) The minimum power of two at which Envoy starts tracking an account.

Envoy has 8 power of two buckets starting with the provided exponent below. Concretely the 1st bucket contains accounts for streams that use [2^minimum_account_to_track_power_of_two, 2^(minimum_account_to_track_power_of_two + 1)) bytes. With the 8th bucket tracking accounts >= 128 * 2^minimum_account_to_track_power_of_two.

The maximum value is 56, since we’re using uint64_t for bytes counting, and that’s the last value that would use the 8 buckets. In practice, we don’t expect the proxy to be holding 2^56 bytes.

If omitted, Envoy should not do any tracking.

config.overload.v3.OverloadManager

[config.overload.v3.OverloadManager proto]

{
  "refresh_interval": {...},
  "resource_monitors": [],
  "actions": [],
  "loadshed_points": [],
  "buffer_factory_config": {...}
}
refresh_interval

(Duration) The interval for refreshing resource usage.

resource_monitors

(repeated config.overload.v3.ResourceMonitor, REQUIRED) The set of resources to monitor.

actions

(repeated config.overload.v3.OverloadAction) The set of overload actions.

loadshed_points

(repeated config.overload.v3.LoadShedPoint) The set of load shed points.

buffer_factory_config

(config.overload.v3.BufferFactoryConfig) Configuration for buffer factory.