![]() |
VOOZH | about |
In Datadog RUM, a feature represents a major user-facing area of your application like checkout, login, or search. Each feature includes operations, which are the critical technical steps that make the experience work.
For example, the checkout experience of an e-commerce platform is a feature. Within it, operations might include entering payment details, saving a payment method, and completing a purchase. After the SDK has been instrumented, Datadog RUM measures each operation’s performance, including execution volume, completion rate, and failure rate. Measuring operations’ health enables you to identify exactly when and why users may not convert in your feature.
The following table shows additional example features and their associated feature operations by industry.
| Industry | Feature | Feature Operations |
|---|---|---|
| Social network | Profile | Users can load their profile Users can upload a picture Users can update their status |
| E-Commerce | Checkout | Users can enter payment details Users can save their payment method Users can pay |
| Streaming | Search | Users can find results for their search Users can load the description of a title Users can start watching the trailer |
| CRM | Quote | Users can start a new quote Users can add line items to the quote Users can send a quote to recipients |
feature_operation_vital experimental feature to be enabled.Use the SDK APIs to define your operations.
Every operation must be started by calling startOperation (some SDKs may use the legacy name of this API - startFeatureOperation).
DD_RUM.init({
...,
enableExperimentalFeatures: ["feature_operation_vital"], // you need to have this flag turned on for the API to work
})
startFeatureOperation: (
name: string,
options?: {
operationKey?: string,
context?: Context,
description?: string,
}) => void
GlobalRumMonitor.get().startOperation(
name: String,
operationKey: String?,
options: OperationOptions,
attributes: Map<String, Any?>
)
RUMMonitor.shared().startOperation(
name: String,
operationKey: String?,
attributes: [AttributeKey: AttributeValue]?,
options: OperationOptions?
)
DdRum.startFeatureOperation(
name: string,
operationKey?: string,
attributes?: Record<string, any>
)
DatadogSdk.instance.rum?.startFeatureOperation(
String name, {
String? operationKey,
Map<String, Object?> attributes = const {},
}
)
To use operations on Flutter Web, enable the feature_operation_vital experimental feature in the Browser SDK.
m.global.datadogRumAgent@.startOperation(
name as string,
operationKey = invalid as dynamic, ' optional: string or invalid for unkeyed operations
context = {} as object ' optional: AssocArray of custom attributes
)
Every started operation must have a stop. Use succeedOperation to stop an operation with a successful outcome (some SDKs may use the legacy name of this API - succeedFeatureOperation).
DD_RUM.init({
...,
enableExperimentalFeatures: ["feature_operation_vital"], // this flag needs to be enabled for the API to work
})
succeedFeatureOperation: (
name: string,
options?: {
operationKey?: string,
context?: Context,
description?: string,
}) => void
GlobalRumMonitor.get().succeedOperation(
name: String,
operationKey: String?,
attributes: Map<String, Any?>
)
RUMMonitor.shared().succeedOperation(
name: String,
operationKey: String?,
attributes: [AttributeKey: AttributeValue]?
)
DdRum.succeedFeatureOperation(
name: string,
operationKey?: string,
attributes?: Record<string, any>
)
DatadogSdk.instance.rum?.succeedFeatureOperation(
String name, {
String? operationKey,
Map<String, Object?> attributes = const {},
}
)
To use operations on Flutter Web, enable the feature_operation_vital experimental feature in the Browser SDK.
m.global.datadogRumAgent@.succeedOperation(
name as string,
operationKey = invalid as dynamic, ' optional: string or invalid for unkeyed operations
context = {} as object ' optional: AssocArray of custom attributes
)
operationKey must be the same in the start and end Operation event.Every started operation must have a stop. Use failOperation to stop an operation with a failure outcome (some SDKs may use the legacy name of this API - failFeatureOperation).
DD_RUM.init({
...,
enableExperimentalFeatures: ["feature_operation_vital"], // this flag needs to be enabled for the API to work
})
failFeatureOperation: (
name: string,
failureReason: FailureReason, //'error' | 'abandoned' | 'other'
options?: {
operationKey?: string,
context?: Context,
description?: string,
}) => void
GlobalRumMonitor.get().failOperation(
name: String,
operationKey: String?,
failureReason: FailureReason, // ERROR, ABANDONED, OTHER
attributes: Map<String, Any?>
)
RUMMonitor.shared().failOperation(
name: String,
operationKey: String?,
reason: RUMFeatureOperationFailureReason, // .error, .abandoned, .other
attributes: [AttributeKey: AttributeValue]
)
m.global.datadogRumAgent@.failOperation(
name as string,
failureReason as string, ' "error", "abandoned", or "other"
operationKey = invalid as dynamic, ' optional: string or invalid for unkeyed operations
context = {} as object ' optional: AssocArray of custom attributes
)
DdRum.failFeatureOperation(
name: string,
operationKey?: string,
reason: FeatureOperationFailure, // 'ERROR' | 'ABANDONED' | 'OTHER'
attributes: Record<string, any>
)
DatadogSdk.instance.rum?.failFeatureOperation(
String name,
RumFeatureOperationFailureReason failureReason, // .error, .abandoned, .other
{
String? operationKey,
Map<String, Object?> attributes = const {},
}
)
To use operations on Flutter Web, enable the feature_operation_vital experimental feature in the Browser SDK.
You may have cases where users are starting several feature operations in parallel. To individually track them, use the operationKey defined when calling startOperation. You must reuse the same operationKey later in other APIs, for example when calling succeedOperation.
@operation.failure_reason:timeout.After you’ve configured the SDK APIs, you can monitor your operations by navigating to RUM > Performance Monitoring > Operations.
Datadog groups together all operations with the same name into a catalog.
Each operation has two out-of-the-box metrics computed over your full, ingested, unsampled traffic:
rum.measure.operation, which counts the volume of operations reported to Datadogrum.measure.operation.duration, which measures the elapsed time between the start and end of all the operations reported to DatadogBoth metrics are retained for 15 months, and include several dimensions:
operation.name, which is defined on the client sideoperation.status, which is either a success or failureoperation.failure_reason, which can be an error, or abandoned, or otherThose metrics are included in the price of RUM Measure and available to all RUM without Limits customers that define one or more operations.
You can run an agentic investigation on a single operation directly from the Operations page. The agent analyzes both the success rate and the latency of the operation and surfaces focused investigations for each failure mode (errors, timeouts, abandonment) and for latency regressions. For more information, see Operation AI Investigation.
Operations are a new type of event in RUM. Operations are bound to a RUM Session, but can span across multiple RUM Views. Operations can be targeted in retention filters. This allows you to align your retention strategy on features that are cornerstones for your user experiences. For example, you can programmatically keep RUM Sessions that had specific operations fail or are taking longer than desired.
Similarly to metrics, those events come with specific attributes you can use in retention filters:
@operation.name@operation.status@operation.failure_reason@operation.duration@operation.start_view.name@operation.end_view.nameAdditional helpful documentation, links, and articles:
| |