The runtime configuration specifies a virtual file system tree that contains re-loadable configuration elements. This virtual file system can be realized via a series of local file system, static bootstrap configuration and admin console derived overlays.
Virtual file system¶
The runtime can be viewed as virtual file system consisting of multiple layers:
- Static bootstrap configuration
- Local disk file system
- Local disk file system *override_subdirectory*
- Admin console overrides
with values in higher layers overriding corresponding values in lower layers.
File system layout¶
Various sections of the configuration guide describe the runtime settings that are available. For example, here are the runtime settings for upstream clusters.
Each ‘.’ in a runtime key indicates a new directory in the hierarchy, The terminal portion of a path is the file. The contents of the file constitute the runtime value. When reading numeric values from a file, spaces and new lines will be ignored.
numerator or denominator are reserved keywords and may not appear in any directory.
Local disk file system¶
When the runtime virtual file system is realized on a local disk, it is rooted at symlink_root + subdirectory. For example, the health_check.min_interval key would have the following full file system path (using the symbolic link):
Assume that the folder
/srv/runtime/v1 points to the actual file system path where global
runtime configurations are stored. The following would be a typical configuration setting for
/srv/runtime/current is a symbolic link to
The override_subdirectory is used along with the
--service-cluster CLI option. Assume
--service-cluster has been set to
my-cluster. Envoy will first look for the
health_check.min_interval key in the following full file system path:
If found, the value will override any value found in the primary lookup path. This allows the user to customize the runtime values for individual clusters on top of global defaults.
Values can be viewed at the /runtime admin endpoint. Values can be modified and added at the /runtime_modify admin endpoint. If runtime is not configured, an empty provider is used which has the effect of using all defaults built into the code, except for any values added via /runtime_modify.
Protobuf and JSON representation¶
- Dot separators map to tree edges.
- Scalar leaves (integer, strings, booleans) are represented with their respective JSON type.
- FractionalPercent is represented with via its canonical JSON encoding.
An example representation of a setting for the health_check.min_interval key in YAML is:
health_check: min_interval: 5
Using runtime overrides for deprecated features¶
The Envoy runtime is also a part of the Envoy feature deprecation process.
As described in the Envoy breaking change policy, feature deprecation in Envoy is in 3 phases: warn-by-default, fail-by-default, and code removal.
In the first phase, Envoy logs a warning to the warning log that the feature is deprecated and increments the deprecated_feature_use runtime stat. Users are encouraged to go to deprecated to see how to migrate to the new code path and make sure it is suitable for their use case.
In the second phase the message and filename will be added to
and use of that configuration field will cause the config to be rejected by default.
This fail-by-default mode can be overridden in runtime configuration by setting
envoy.deprecated_features.filename.proto:fieldname to true. For example, for a deprecated field
true. Use of this override is strongly discouraged.
Fatal-by-default configuration indicates that the removal of the old code paths is imminent. It is
far better for both Envoy users and for Envoy contributors if any bugs or feature gaps with the new
code paths are flushed out ahead of time, rather than after the code is removed!
The file system runtime provider emits some statistics in the runtime. namespace.
|load_error||Counter||Total number of load attempts that resulted in an error|
|override_dir_not_exists||Counter||Total number of loads that did not use an override directory|
|override_dir_exists||Counter||Total number of loads that did use an override directory|
|load_success||Counter||Total number of load attempts that were successful|
|deprecated_feature_use||Counter||Total number of times deprecated features were used.|
|num_keys||Gauge||Number of keys currently loaded|