Span APIedit

A span measures the duration of a single event. When a span is created it will measure the time until span.end() is called.

To get a Span object, you need to call apm.startSpan().

To see an example of using custom spans, see the Custom Spans in Node.js article.

span.transactionedit

Added in: v0.1.0

  • Type: Transaction

A reference to the parent transaction object.

All spans belong to a transaction.

span.nameedit

Added in: v0.1.0

The name of the span. This can also be set via apm.startSpan().

span.typeedit

Added in: v0.1.0

Split components into type, subtype and action in: v3.0.0

The type of span. This can also be set via apm.startSpan().

The type is used to group similar spans together. For instance, all spans of MySQL queries are given the type db, with a subtype of mysql and an action of query.

In the above example, db is considered the type. Though there are no naming restrictions for the type, the following are standardized across all Elastic APM agents: app, db, cache, template, and ext.

span.subtypeedit

Added in: v0.1.0

The subtype of the span. This can also be set via apm.startSpan().

The subtype is typically the name of a module or library. For example, MySQL queries have a subtype of mysql.

span.actionedit

Added in: v0.1.0

The action of the span. This can also be set via apm.startSpan().

The action is typically a specific function name or a general description of specific functionality. For example, a database query would generally have an action of query.

span.traceparentedit

Added in: v2.9.0

Get the serialized traceparent string of the span.

span.setLabel(name, value)edit

Added in: v2.1.0

Renamed from span.setTag() to span.setLabel(): v2.10.0

  • name <string> Periods (.), asterisks (*), and double quotation marks (") will be replaced by underscores (_), as those characters have special meaning in Elasticsearch
  • value <string> If a non-string data type is given, it’s converted to a string before being sent to the APM Server

Set a label on the span. You can set multiple labels on the same span.

span.addLabels({ [name]: value })edit

Added in: v2.1.0

Renamed from span.addTags() to span.addLabels(): v2.10.0

  • labels <Object> Contains key/value pairs:

    • name <string> Any periods (.), asterisks (*), or double quotation marks (") will be replaced by underscores (_), as those characters have special meaning in Elasticsearch
    • value <string> If a non-string data type is given, it’s converted to a string before being sent to the APM Server

Add several labels on the span. You can add labels multiple times.

span.idsedit

Added in: v2.17.0

Produces an object containing span.id and trace.id. This enables log correlation to APM traces with structured loggers.

{
  "trace.id": "abc123",
  "span.id": "abc123"
}

span.toString()edit

Added in: v2.17.0

Produces a string representation of the span to inject in log messages. This enables log correlation to APM traces with text-only loggers.

"trace.id=abc123 span.id=abc123"

span.end([endTime])edit

Added in: v0.1.0

  • endTime <number> The time when the span ended. Must be a Unix Time Stamp representing the number of milliseconds since January 1, 1970, 00:00:00 UTC. Sub-millisecond precision can be achieved using decimals. If not provided, the current time will be used

End the span. If the span has already ended, nothing happens.