If you want to create your own tracing implementation, you can use our Trace API. This doc explains how to send traces in our general format, also known as newrelic format. (To send Zipkin-format data, see Zipkin.)
Get started
Using our Trace API is as simple as:
- Sending trace data in the expected format (in this case, our
newrelicformat). - Sending that data to the appropriate endpoint.
Before using the Trace API, you should decide whether you want to use Infinite Tracing. To learn more about this, see Intro to Infinite Tracing and Sampling considerations.
To get started using the Trace API, follow one of these paths:
- Want to use Infinite Tracing? Follow the Set up a trace observer instructions. That walks you through creating a trace observer and sending a sample payload to the trace observer endpoint.
- Don't want Infinite Tracing? See how to send a sample payload (below).
Send sample trace payload (non-Infinite Tracing)
The following explains how to send a standard (non-Infinite Tracing) payload to the Trace API using our newrelic format.
Get a for the account you want to report data to.
Insert that key into the following JSON and then send the JSON to our endpoint. Note: if you have a EU New Relic account, use the EU endpoint instead.
bash$curl -i -H 'Content-Type: application/json' \>-H 'Api-Key: YOUR_LICENSE_KEY' \>-H 'Data-Format: newrelic' \>-H 'Data-Format-Version: 1' \>-X POST \>-d '[${$"common": {$"attributes": {$"service.name": "Test Service A",$"host": "host123.example.com"$}$},$"spans": [${$"trace.id": "123456",$"id": "ABC",$"attributes": {$"duration.ms": 12.53,$"name": "/home"$}$},${$"trace.id": "123456",$"id": "DEF",$"attributes": {$"error.message": "Invalid credentials",$"service.name": "Test Service A",$"host": "host456.example.com",$"duration.ms": 2.97,$"name": "/auth",$"parent.id": "ABC"$}$}$]$}$]' 'https://trace-api.newrelic.com/trace/v1'Tip
If you're sending more than one
POST, change thetrace.idto a unique value. Sending the same payload or spanidmultiple times for the sametrace.idmay result in fragmented traces in the UI.If your test returned
HTTP/1.1 202 Accepted, go to our UI to see a query of your test data using the span attributeservice.name = Test Service A.Tip
Traces may take up to one minute to be processed by both the trace observer and the Trace API.
Trace API payload (New Relic format)
The Trace API JSON payload is an array of objects, with each object representing a single trace. Each of these objects requires a spans key and may also include a common key. spans (required) contains an array of objects, with each object representing a span. common (optional) shares information across multiple spans.
The Span object in the spans array
field | type | description | required | default |
|---|---|---|---|---|
| string | Unique identifier for this span. | yes | N/A |
| string | Unique identifier shared by all spans within a single trace. | yes | N/A |
| long | Span start time in milliseconds since the Unix epoch. | no | Current time in UTC time zone |
| object | Any set of key: value pairs that add more details about a span. | yes | N/A |
Requests without the required keys above will be rejected, and an NrIntegrationError will be generated.
The common object (optional)
field | type | description | required | default |
|---|---|---|---|---|
| object | Any set of key: value pairs that add common details about spans in the payload. If a span contains an attribute that has been set in | no | N/A |
Highly recommended attributes
While not required, these attributes should be included for the best experience with your data in the attributes object for each span.
attribute | default | description |
|---|---|---|
float | none | Duration of this span in milliseconds. |
string | none | The name of this span. |
string | none | The id of the caller of this span. Value is |
string | none | The name of the entity that created this span. If no value or an empty string is provided, the span is assigned to an "UNKNOWN" entity and will show as such in the UI. This value should be provided to get a complete experience in the UI. |
Reserved attributes
These attributes are currently reserved for internal New Relic usage. While they are not explicitly blocked, we recommend not using them.
attribute | default | description |
|---|---|---|
string |
| This is derived from the |
string |
| The entity type is assumed to be a service. |
string | None | The |
Other attributes
You can add any arbitrary attributes you want in the attributes object in either common or each span object, with the exception of the restricted attributes. For example, you might want to add attributes like customer.id or user.id to help you analyze your trace data.
Requirements and guidelines for trace JSON using the newrelic format:
- Each JSON payload is an array of objects.
- Each object should contain a required
spanskey. - Each object can contain an optional
commonkey. Use this if you want to share information across multiple spans in a object. - Any keys on a span have precedence over the same key in the
commonblock. - The value for a
spanskey is a list ofspanobjects. - Certain attributes are required, and must be included either in the optional
commonblock, or in each span. - Recommended and custom attributes can be optionally included in a list of key-value pairs under a key named
attributes, in the optionalcommonblock and/or in each span.
In the following example POST, there are two spans, both of which have the trace.id 12345 and the custom attribute host: host123.example.com. The first span has no parent.id, so that is the root of the trace; the second span's parent.id points to the ID of the first.
[ { "common": { "attributes": { "host": "host123.example.com" } }, "spans": [ { "trace.id": "12345", "id": "abc", "timestamp": 1603336834823, "attributes": { "user.email": "bob@newr.com", "service.name": "my-service", "duration.ms": 750, "name": "my-span" } }, { "trace.id": "12345", "id": "def", "timestamp": 1603336834899, "attributes": { "parent.id": "abc", "service.name": "second-service", "duration.ms": 750, "name": "second-span" } } ] }]To learn how to control how spans appear in New Relic (for example, adding errors or setting a span as a datastore span), see Decorate spans.
Explore more about distributed tracing:
- Learn where Trace API data shows up in the UI.
- Learn how to decorate spans for a richer, more detailed UI experience. For example, you can have spans show up as datastore spans or display errors.
- Learn about general data limits, required metadata, and response validation.
- If you don't see your trace data, see Troubleshooting.