Skip to main content
Feedback

Understanding Flow observability data

Flow observability data follows the OpenTelemetry standard, which is built around the 'trace' data concept.

Flow trace

  • A trace records the details of a particular action in an application. In Flow, a trace describes each runtime invocation performed by a user, such as clicking a button to move to a new outcome/step for example.

  • Traces contain 'span' steps, objects representing the work being done by individual or components in a request. In Flow, each trace always contains a top-level span that describes the action itself.

  • Child spans may also be incuded within a span, representing actions that occured within the execution of the parent span, such as calls to external for example.

  • Each span has a set of standard OpenTelemetry fields, such as "timestamp", "duration", "name", and "status code" for example.

  • In addition to these standard OpenTelemetry fields, a collection of specific "tags" are included in the data. These provide more detailed information about the action that are particularly relevant to , such as a step name, the selected outcome ID, the name of the flow, the flow tenant, details about the user, the URL and call success, the status code, and if any faults occurred. This is typically shown in a tags section by an APM vendor, but may be presented differently in different APM vendors.

note

Some APM vendors may not fully align with the standard terminology used by the OpenTelemetry standard in . Data from flow runtime execution is inserted into OpenTelemetry datasets and passed to the APM backend, either directly (if supported) or via the OpenTelemetry Collector; how these values are interpreted and presented in each APM's vizualization tool may vary. Typically, an APM will present a list of traces for the supplied date range, and offer users the ability to drill into an individual trace to see child spans (i.e. calls) and their duration/status.

Standard OpenTelemetry data

The following standard OpenTelemetry fields are included in the observability dataset.

Field nameDescription
duration_msHow much time a span took, in milliseconds.
enduser.emailThe email of the runtime user that recorded the flow action.
enduser.idThe runtime user that recorded the flow action. If no runtime user information is captured by the flow (as it is a public flow), this is set as "Public User".
enduser.tenant.idThe ID of the tenant that the flow belongs to.
enduser.tenant.nameThe name of the tenant that the flow belongs to.
library.nameThe source name for the data, i.e. .
nameThe type of flow request, followed by the step name. For example, FORWARD-welcome indicates that a user moved forward in a flow to a step named "welcome".
net.peer.ipThe remote IP address of the peer, i.e. the IP address for the user that ran the flow.
service.instance.idThe ID of the that was used to perform the flow action.
service.nameThe name of the that was used to perform the flow action.
status_codeThe standard HTTP response status code returned for the flow request.
timestampWhen the flow action occurred, given as a full date and time.
trace.span_idThe unique ID of a span.
trace.trace_idThe ID of the trace that a span belongs to.
typeThe OpenTelemetry request type.

Flow tag data

The following metadata is also available as tags within a span.

Tag nameDescription
flow.nameThe name of the flow that the action was recorded in.
flow.request.invokeTypeThe type of action that was recorded, such as a progression FORWARD from a step.
flow.request.selectedOutcomeIdThe ID of the outcome selected in the flow.
flow.request.state.idThe flow state ID. See Flow states.
flow.response.hasRootFaultsWhether any root faults were recorded as a result of the action within the flow. If root faults were recorded, this is set to "True", with details of the root fault populated in the flow.response.firstRootFault tag.
flow.response.firstRootFaultIf root faults were recorded, full details of the fault are populated in this tag, such as the error message, status code and URI.
flow.response.mapElementThe name of the step that the user progressed to in the flow.
flow.response.statusCodeThe internal response status code returned for the flow request. Note that this is different to the status_code field. For example, if a runtime user was unauthenticated, this tag would show a 401 status (indicating an unsuccessful authentication request), even though the status_code field would show a 200 successful request status.
flow.versionThe version of the flow that the action was recorded in.
On this Page