Datadog

How to integrate Datadog with Asayer and see backend errors alongside session replays.

1. Generate Datadog API Key & Application Key

Go to Datadog > Integrations > APIs and generate the API Key, or use the existing one.

Datadog API Key

On the same page, click on Application Keys and generate a new application key.

Datadog Application Key

2. Enable Integration in Asayer

Paste your API Key and Application Key in Datadog in Asayer dashboard under Preferences > Integrations.

Datadog Integration in Asayer

3. Propagate asayer_session_id

To link a Datadog event with the recorded user session, a unique id has to be propagated from your frontend to your backend on each request you want to track. This can be done using a custom HTTP header. In the below example, we use the fetch function to send that header.

const headers = {
Accept: 'application/json',
'Content-Type': 'application/json',
};
if (window.asayer && window.asayer.id()) {
headers['X-Session-Id'] = window.asayer.id(); // Inject asayer_session_id
}
fetch('www.your-backend.com', {
'GET',
headers,
});

In order for Asayer to associate a Datadog log entry with the recorded user session, a unique id has to be propagated to each backend error you wish to track.

Below is an example in Python using Monkey Patching.

import sys
import traceback
old_tb = traceback.print_exception
old_f = sys.stdout
old_e = sys.stderr
ASAYER_SESSION_ID = None
class F:
def write(self, x):
if ASAYER_SESSION_ID is not None and x != '\n':
old_f.write(f"[asayer_session_id={ASAYER_SESSION_ID}] {x}")
else:
old_f.write(x)
def flush(self):
pass
def tb_print_exception(etype, value, tb, limit=None, file=None, chain=True):
if ASAYER_SESSION_ID is not None:
value = type(value)(f"[asayer_session_id={ASAYER_SESSION_ID}] " + str(value))
old_tb(etype, value, tb, limit, file, chain)
traceback.print_exception = tb_print_exception
sys.stdout = F()
sys.stderr = F()

The name of the tag asayer_session_id is case insensitive.