Portal Community

Span Hierarchy

# Example trace for a workflow with 4 nodes including one HIL node

workflow.execute  [TRACE ROOT — entire execution]
  traceId: 4bf92f3577b34da6a3ce929d0e0e4736
  workflow.id: wf-8a4c2f91
  execution.id: exec-d1e2f3a4
  tenant.id: tenant-abc-123
  duration: 4h 23m 47s  ← includes HIL suspension time

  ├── node.execute  [StartNode]
  │     node.key: start-node-01
  │     node.type: StartNode
  │     duration: 3ms

  ├── node.execute  [DataFetchNode]
  │     node.key: data-fetch-01
  │     node.type: DataFetchNode
  │     duration: 4.2s
  │     └── http.client  [GET https://api.example.com/customer/data]
  │           http.url: https://api.example.com/customer/data
  │           http.method: GET
  │           http.status_code: 200
  │           duration: 4.1s   ← the slow external call

  ├── node.execute  [ApprovalNode — HIL]
  │     node.key: approval-node-01
  │     node.type: ApprovalNode
  │     hil.actor: user-xyz-789
  │     hil.outcome: approved
  │     duration: 4h 23m      ← waiting for human approval
  │     events:
  │       hil.suspended  [timestamp: 14:32:01]
  │       hil.resumed    [timestamp: 18:55:08, outcome: approved]

  └── node.execute  [EndNode]
        node.key: end-node-01
        node.type: EndNode
        duration: 2ms

Standard Span Attributes by Span Type

Span NameRequired AttributesOptional Attributes
workflow.executeworkflow.id, execution.id, tenant.id, triggered_byworkflow.name, workflow.version
node.executenode.key, node.type, execution.id, tenant.idnode.name, node.display_name
node.execute (HIL)hil.actor, hil.outcomehil.reason, hil.deadline
http.clienthttp.url, http.method, http.status_codehttp.request.content_type
db.querydb.system, db.name, db.statement (sanitized)db.operation

Span Events

Span events are timestamped log entries attached to a specific span. BizFirstGO uses them for HIL lifecycle events:

# Span events on the ApprovalNode span:
event[0]:
  name: "hil.suspended"
  timestamp: 2026-05-25T14:32:01Z
  attributes:
    hil.reason: "Manager approval required for invoices > $10,000"
    hil.assigned_to: "manager-group-finance"

event[1]:
  name: "hil.resumed"
  timestamp: 2026-05-25T18:55:08Z
  attributes:
    hil.outcome: "approved"
    hil.actor: "user-xyz-789"
    hil.comment: "Approved — within quarterly budget"
    hil.duration_seconds: 16387

Automatically Instrumented Spans

These span types are created automatically by OTel auto-instrumentation — no code changes needed in executors: