Skip to content

Commit

Permalink
Add an option to limit length of values of attributes and metric valu…
Browse files Browse the repository at this point in the history
  • Loading branch information
jtmalinowski authored and jsuereth committed Nov 16, 2023
1 parent dcf74c3 commit 2ecdb1f
Showing 1 changed file with 51 additions and 0 deletions.
51 changes: 51 additions & 0 deletions specification/common/common.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ Table of Contents
</summary>

- [Attributes](#attributes)
- [Attribute Limits](#attribute-limits)
- [Exempt Entities](#exempt-entities)

</details>

Expand Down Expand Up @@ -41,3 +43,52 @@ both containing an array of strings to represent a mapping
`header_keys[i] -> header_values[i]`).

See [Attribute Naming](attribute-naming.md) for naming guidelines.

### Attribute Limits

Execution of erroneous code can result in unintended attributes. If there are no
limits placed on attributes, they can quickly exhaust available memory, resulting
in crashes that are difficult to recover from safely.

By default an SDK SHOULD apply truncation as per the list of
[configurable parameters](#attribute-limits-configuration) below.

If an SDK provides a way to:

- set an attribute value length limit such that for each
attribute value:
- if it is a string, if it exceeds that limit (counting any character in it as
1), SDKs MUST truncate that value, so that its length is at most equal
to the limit,
- if it is an array of strings, then apply the above rule to each of the
values separately,
- otherwise a value MUST NOT be truncated;
- set a limit of unique attribute keys such that:
- for each unique attributes key, addition of which would result in exceeding
the limit, SDK MUST discard that key/value pair.

There MAY be a log emitted to indicate to the user that an attribute was
truncated or discarded. To prevent excessive logging, the log MUST NOT be
emitted more than once per record on which an attribute is set.

If the SDK implements the limits above, it MUST provide a way to change these
limits programmatically. Names of the configuration options SHOULD be the same as
in the list below.

An SDK MAY implement model-specific limits, for example
`SpanAttributeCountLimit`. If both a general and a model-specific limit are
implemented, then the SDK MUST first attempt to use the model-specific limit, if
it isn't set and doesn't have a default, then the SDK MUST attempt to use the
general limit.

<a name="attribute-limits-configuration"></a>
**Configurable parameters:**

* `AttributeCountLimit` (Default=128) - Maximum allowed attribute count per record;
* `AttributeValueLengthLimit` (Default=Infinity) - Maximum allowed attribute value length;

#### Exempt Entities

Attributes, which belong to Metrics, are exempt from the limits described above
at this time, as discussed in
[Metrics Attribute Limits](../metrics/sdk.md#attribute-limits).

0 comments on commit 2ecdb1f

Please sign in to comment.