Skip to content

Commit 0b3babd

Browse files
rogercolltraskjoaopgrassi
authored
add User-agent OS attributes (open-telemetry#1434)
Co-authored-by: Trask Stalnaker <trask.stalnaker@gmail.com> Co-authored-by: Joao Grassi <5938087+joaopgrassi@users.noreply.github.com>
1 parent 84cfd0c commit 0b3babd

File tree

3 files changed

+65
-4
lines changed

3 files changed

+65
-4
lines changed

.chloggen/user_agent_os.yaml

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# Use this changelog template to create an entry for release notes.
2+
#
3+
# If your change doesn't affect end users you should instead start
4+
# your pull request title with [chore] or use the "Skip Changelog" label.
5+
6+
# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix'
7+
change_type: 'enhancement'
8+
9+
# The name of the area of concern in the attributes-registry, (e.g. http, cloud, db)
10+
component: user-agent
11+
12+
# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
13+
note: Add `user_agent.os.name` and `user_agent.os.version` attributes
14+
15+
# Mandatory: One or more tracking issues related to the change. You can use the PR number here if no issue exists.
16+
# The values here must be integers.
17+
issues: [1433]
18+
19+
# (Optional) One or more lines of additional information to render under the primary note.
20+
# These lines will be padded with 2 spaces and then inserted directly into the document.
21+
# Use pipe (|) for multiline entries.
22+
subtext:

docs/attributes-registry/user-agent.md

+20-4
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33

44
# User agent
55

6+
- [User-agent Attributes](#user-agent-attributes)
7+
- [User-agent OS Attributes](#user-agent-os-attributes)
8+
69
## User-agent Attributes
710

811
Describes user-agent attributes.
@@ -11,14 +14,27 @@ Describes user-agent attributes.
1114
|---|---|---|---|---|
1215
| <a id="user-agent-name" href="#user-agent-name">`user_agent.name`</a> | string | Name of the user-agent extracted from original. Usually refers to the browser's name. [1] | `Safari`; `YourApp` | ![Experimental](https://img.shields.io/badge/-experimental-blue) |
1316
| <a id="user-agent-original" href="#user-agent-original">`user_agent.original`</a> | string | Value of the [HTTP User-Agent](https://www.rfc-editor.org/rfc/rfc9110.html#field.user-agent) header sent by the client. | `CERN-LineMode/2.15 libwww/2.17b3`; `Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1`; `YourApp/1.0.0 grpc-java-okhttp/1.27.2` | ![Stable](https://img.shields.io/badge/-stable-lightgreen) |
14-
| <a id="user-agent-synthetic-type" href="#user-agent-synthetic-type">`user_agent.synthetic.type`</a> | string | Specifies the category of synthetic traffic, such as tests or bots. [2] | `bot`; `test` | ![Experimental](https://img.shields.io/badge/-experimental-blue) |
15-
| <a id="user-agent-version" href="#user-agent-version">`user_agent.version`</a> | string | Version of the user-agent extracted from original. Usually refers to the browser's version [3] | `14.1.2`; `1.0.0` | ![Experimental](https://img.shields.io/badge/-experimental-blue) |
17+
| <a id="user-agent-version" href="#user-agent-version">`user_agent.version`</a> | string | Version of the user-agent extracted from original. Usually refers to the browser's version [2] | `14.1.2`; `1.0.0` | ![Experimental](https://img.shields.io/badge/-experimental-blue) |
1618

1719
**[1] `user_agent.name`:** [Example](https://www.whatsmyua.info) of extracting browser's name from original string. In the case of using a user-agent for non-browser products, such as microservices with multiple names/versions inside the `user_agent.original`, the most significant name SHOULD be selected. In such a scenario it should align with `user_agent.version`
1820

19-
**[2] `user_agent.synthetic.type`:** This attribute MAY be derived from the contents of the `user_agent.original` attribute. Components that populate the attribute are responsible for determining what they consider to be synthetic bot or test traffic. This attribute can either be set for self-identification purposes, or on telemetry detected to be generated as a result of a synthetic request. This attribute is useful for distinguishing between genuine client traffic and synthetic traffic generated by bots or tests.
21+
**[2] `user_agent.version`:** [Example](https://www.whatsmyua.info) of extracting browser's version from original string. In the case of using a user-agent for non-browser products, such as microservices with multiple names/versions inside the `user_agent.original`, the most significant version SHOULD be selected. In such a scenario it should align with `user_agent.name`
22+
23+
## User-agent OS Attributes
24+
25+
Describes the OS user-agent attributes.
26+
27+
| Attribute | Type | Description | Examples | Stability |
28+
|---|---|---|---|---|
29+
| <a id="user-agent-os-name" href="#user-agent-os-name">`user_agent.os.name`</a> | string | Human readable operating system name. [3] | `iOS`; `Android`; `Ubuntu` | ![Experimental](https://img.shields.io/badge/-experimental-blue) |
30+
| <a id="user-agent-os-version" href="#user-agent-os-version">`user_agent.os.version`</a> | string | The version string of the operating system as defined in [Version Attributes](/docs/resource/README.md#version-attributes). [4] | `14.2.1`; `18.04.1` | ![Experimental](https://img.shields.io/badge/-experimental-blue) |
31+
| <a id="user-agent-synthetic-type" href="#user-agent-synthetic-type">`user_agent.synthetic.type`</a> | string | Specifies the category of synthetic traffic, such as tests or bots. [5] | `bot`; `test` | ![Experimental](https://img.shields.io/badge/-experimental-blue) |
32+
33+
**[3] `user_agent.os.name`:** For mapping user agent strings to OS names, libraries such as [ua-parser](https://github.com/ua-parser) can be utilized.
34+
35+
**[4] `user_agent.os.version`:** For mapping user agent strings to OS versions, libraries such as [ua-parser](https://github.com/ua-parser) can be utilized.
2036

21-
**[3] `user_agent.version`:** [Example](https://www.whatsmyua.info) of extracting browser's version from original string. In the case of using a user-agent for non-browser products, such as microservices with multiple names/versions inside the `user_agent.original`, the most significant version SHOULD be selected. In such a scenario it should align with `user_agent.name`
37+
**[5] `user_agent.synthetic.type`:** This attribute MAY be derived from the contents of the `user_agent.original` attribute. Components that populate the attribute are responsible for determining what they consider to be synthetic bot or test traffic. This attribute can either be set for self-identification purposes, or on telemetry detected to be generated as a result of a synthetic request. This attribute is useful for distinguishing between genuine client traffic and synthetic traffic generated by bots or tests.
2238

2339
---
2440

model/user-agent/registry.yaml

+23
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,29 @@ groups:
3535
using a user-agent for non-browser products, such as microservices with multiple names/versions inside the
3636
`user_agent.original`, the most significant version SHOULD be selected. In such a scenario it should align
3737
with `user_agent.name`
38+
39+
- id: registry.user_agent.os
40+
type: attribute_group
41+
display_name: User-agent OS Attributes
42+
brief: "Describes the OS user-agent attributes."
43+
attributes:
44+
- id: user_agent.os.name
45+
type: string
46+
stability: experimental
47+
brief: 'Human readable operating system name.'
48+
examples: ['iOS', 'Android', 'Ubuntu']
49+
note: >
50+
For mapping user agent strings to OS names, libraries such as [ua-parser](https://github.com/ua-parser) can be utilized.
51+
- id: user_agent.os.version
52+
type: string
53+
stability: experimental
54+
brief: >
55+
The version string of the operating system as defined in
56+
[Version Attributes](/docs/resource/README.md#version-attributes).
57+
examples: ['14.2.1', '18.04.1']
58+
note: >
59+
For mapping user agent strings to OS versions, libraries such as [ua-parser](https://github.com/ua-parser) can be utilized.
60+
3861
- id: user_agent.synthetic.type
3962
stability: experimental
4063
brief: >

0 commit comments

Comments
 (0)