App Events
Status: Development
This document defines events related to client-side applications (e.g. web apps or mobile apps).
Click Events
Event: app.screen.click
Status:
The event name MUST be app.screen.click.
This event represents an instantaneous click on the screen of an application.
The app.screen.click event can be used to indicate that a user has clicked or tapped on the screen portion of an application. Clicks outside of an application’s active area SHOULD NOT generate this event. This event does not differentiate between touch/mouse down and touch/mouse up. Implementations SHOULD give preference to generating this event at the time the click is complete, typically on touch release or mouse up. The location of the click event MUST be provided in absolute screen pixels.
Attributes:
| Key | Stability | Requirement Level | Value Type | Description | Example Values |
|---|---|---|---|---|---|
app.screen.coordinate.x | Required | int | The x (horizontal) coordinate of a screen coordinate, in screen pixels. | 0; 131 | |
app.screen.coordinate.y | Required | int | The y (vertical) component of a screen coordinate, in screen pixels. | 12; 99 | |
app.screen.id | Recommended | string | An identifier that uniquely differentiates this screen from other screens in the same application. [1] | f9bc787d-ff05-48ad-90e1-fca1d46130b3; com.example.app.MainActivity; com.example.shop.ProductDetailFragment; MyApp.ProfileView; MyApp.ProfileViewController | |
app.screen.name | Opt-In | string | The name of an application screen. [2] | MainActivity; ProductDetailFragment; ProfileView; ProfileViewController |
[1] app.screen.id: A screen represents only the part of the device display drawn by the app. It typically contains multiple widgets or UI components and is larger in scope than individual widgets. Multiple screens can coexist on the same display simultaneously (e.g., split view on tablets).
[2] app.screen.name: A screen represents only the part of the device display drawn by the app. It typically contains multiple widgets or UI components and is larger in scope than individual widgets. Multiple screens can coexist on the same display simultaneously (e.g., split view on tablets).
Event: app.widget.click
Status:
The event name MUST be app.widget.click.
This event indicates that an application widget has been clicked.
Use this event to indicate that visual application component has been clicked, typically through a user’s manual interaction.
Attributes:
| Key | Stability | Requirement Level | Value Type | Description | Example Values |
|---|---|---|---|---|---|
app.widget.id | Required | string | An identifier that uniquely differentiates this widget from other widgets in the same application. [1] | f9bc787d-ff05-48ad-90e1-fca1d46130b3; submit_order_1829 | |
app.screen.id | Recommended | string | An identifier that uniquely differentiates this screen from other screens in the same application. [2] | f9bc787d-ff05-48ad-90e1-fca1d46130b3; com.example.app.MainActivity; com.example.shop.ProductDetailFragment; MyApp.ProfileView; MyApp.ProfileViewController | |
app.screen.coordinate.x | Opt-In | int | The x (horizontal) coordinate of a screen coordinate, in screen pixels. | 0; 131 | |
app.screen.coordinate.y | Opt-In | int | The y (vertical) component of a screen coordinate, in screen pixels. | 12; 99 | |
app.screen.name | Opt-In | string | The name of an application screen. [3] | MainActivity; ProductDetailFragment; ProfileView; ProfileViewController | |
app.widget.name | Opt-In | string | The name of an application widget. [4] | submit; attack; Clear Cart |
[1] app.widget.id: A widget is an application component, typically an on-screen visual GUI element.
[2] app.screen.id: A screen represents only the part of the device display drawn by the app. It typically contains multiple widgets or UI components and is larger in scope than individual widgets. Multiple screens can coexist on the same display simultaneously (e.g., split view on tablets).
[3] app.screen.name: A screen represents only the part of the device display drawn by the app. It typically contains multiple widgets or UI components and is larger in scope than individual widgets. Multiple screens can coexist on the same display simultaneously (e.g., split view on tablets).
[4] app.widget.name: A widget is an application component, typically an on-screen visual GUI element.
Crash Event
Event: app.crash
Status:
The event name MUST be app.crash.
This event represents a termination of a user-facing application due to unrecoverable programming errors such as exceptions or signals that indicate an error has happened at a lower level.
Crash events can be produced asynchronously by an OTel SDK instance that is not running in the application instance in which the crash happened. For example, the instrumentation may report crashes from previous app instances based on information found in tombstones on disk. If the reporter of the crash is not the crashing application instance itself, relevant resource attributes that identify the application instance that crashed MUST be provided as event attributes so that the corresponding attributes from the reporter’s resource aren’t used instead. How the instrumentation will determine whether an instance of a crash has already been reported and how the necessary data will be retrieved is left up to the instrumentation. Providing enough data to dedupe is NOT REQUIRED.
Attributes:
| Key | Stability | Requirement Level | Value Type | Description | Example Values |
|---|---|---|---|---|---|
app.build_id | Conditionally Required [1] | string | Unique identifier for a particular build or compilation of the application. | 6cff0a7e-cefc-4668-96f5-1273d8b334d0; 9f2b833506aa6973a92fde9733e6271f; my-app-1.0.0-code-123 | |
os.name | Conditionally Required [2] | string | Human readable operating system name. | iOS; Android; Ubuntu | |
os.version | Conditionally Required [3] | string | The version string of the operating system as defined in Version Attributes. | 14.2.1; 18.04.1 | |
service.version | Conditionally Required [4] | string | The version string of the service component. The format is not defined by these conventions. | 2.0.0; a01dbef8a | |
app.crash.id | Recommended | string | A unique identifier representing an instance of an end-user facing app crash. [5] | 083d3d2d-9a0e-47f8-be3d-bc3c5538ba38 | |
exception.message | Recommended | string | The exception message. [6] | Division by zero; Can't convert 'int' object to str implicitly | |
exception.stacktrace | Recommended | string | A stacktrace as a string in the natural representation for the language runtime. The representation is to be determined and documented by each language SIG. [7] | Exception in thread "main" java.lang.RuntimeException: Test exception\n at com.example.GenerateTrace.methodB(GenerateTrace.java:13)\n at com.example.GenerateTrace.methodA(GenerateTrace.java:9)\n at com.example.GenerateTrace.main(GenerateTrace.java:5) | |
exception.type | Recommended | string | The type of the exception (its fully-qualified class name, if applicable). The dynamic type of the exception should be preferred over the static type in languages that support it. [8] | java.net.ConnectException; OSError | |
session.id | Recommended | string | A unique id to identify a session. | 00112233-4455-6677-8899-aabbccddeeff |
[1] app.build_id: If reporter is not the crashing application instance itself and it’s available.
[2] os.name: If reporter is not the crashing application instance itself and the OS name is available.
[3] os.version: If reporter is not the crashing application instance itself.
[4] service.version: If reporter is not the crashing application instance itself.
[5] app.crash.id: Its value MAY be meaningful and be used as a reference for telemetry and metadata recorded by
the same instrumentation (e.g. it is an ID generated by an external source that captured the crash).
It MAY come from a source external to the instrumentation such that it can be used to look up additional
data from other sources as well as facilitate deduplication.
[6] exception.message: If this contains obfuscated symbols, app.build_id SHOULD be provided so they can be deobfuscated.
[7] exception.stacktrace: If this contains obfuscated symbols, app.build_id SHOULD be provided so they can be deobfuscated.
[8] exception.type: If this contains obfuscated symbols, app.build_id SHOULD be provided so they can be deobfuscated.
Jank Event
Event: app.jank
Jank is a disruption in UI rendering, resulting in a display that can feel sluggish or even unresponsive/frozen. Applications that are able to detect jank can report it with the following events:
Status:
The event name MUST be app.jank.
This event indicates that the application has detected substandard UI rendering performance.
Jank happens when the UI is rendered slowly enough for the user to experience some disruption or sluggishness.
Attributes:
| Key | Stability | Requirement Level | Value Type | Description | Example Values |
|---|---|---|---|---|---|
app.jank.frame_count | Recommended | int | A number of frame renders that experienced jank. [1] | 9; 42 | |
app.jank.period | Recommended | double | The time period, in seconds, for which this jank is being reported. | 1.0; 5.0; 10.24 | |
app.jank.threshold | Recommended | double | The minimum rendering threshold for this jank, in seconds. | 0.016; 0.7; 1.024 |
[1] app.jank.frame_count: Depending on platform limitations, the value provided MAY be approximation.
Attributes
See the app attributes registry for all application-related attributes that may appear on telemetry items.
Feedback
Was this page helpful?
Thank you. Your feedback is appreciated!
Please let us know how we can improve this page. Your feedback is appreciated!