Performance Monitoring

By default, Sentry error events will not get trace context unless you configure the scope with the transaction. For example:

const Sentry = require("@sentry/node");
const Tracing = require("@sentry/tracing");

const http = require("http");

  dsn: "",
  integrations: [
    // enable HTTP calls tracing
    new Sentry.Integrations.Http({ tracing: true }),

  // We recommend adjusting this value in production, or using tracesSampler
  // for finer control
  tracesSampleRate: 1.0,

const transaction = Sentry.startTransaction({
  op: "transaction",
  name: "My Transaction",

// Note that we set the transaction as the span on the scope.
// This step makes sure that if an error happens during the lifetime of the transaction
// the transaction context will be attached to the error event
Sentry.configureScope(scope => {

let request;

try {
  // this should generate an http span
  request = http.get("", res => {
    console.log(`STATUS: ${res.statusCode}`);
    console.log(`HEADERS: ${JSON.stringify(res.headers)}`);

  // this error event should have trace context
} catch (err) {

request.on("close", () => {

Manual Instrumentation

To manually instrument a specific region of your code, you can create a transaction to capture it.

The following example creates a transaction for a part of the code that contains an expensive operation (for example, processItem), and sends the result to Sentry:

app.use(function processItems(req, res, next) {
  const item = getFromQueue();
  const transaction = Sentry.startTransaction({
    op: "task",
    name: item.getTransaction(),

  // processItem may create more spans internally (see next examples)
  processItem(item, transaction).then(() => {

Retrieving a Transaction

In cases where you want to attach Spans to an already ongoing Transaction you can use Sentry.getCurrentHub().getScope().getTransaction(). This function will return a Transaction in case there is a running Transaction otherwise it returns undefined. If you are using our Express integration by default we attach the Transaction to the Scope. So you could do something like this:

app.get("/success", function successHandler(req, res) {
  const transaction = Sentry.getCurrentHub()

  if (transaction) {
    let span = transaction.startChild({
      op: "encode",
      description: "parseAvatarImages",
    // Do something
You can edit this page on GitHub.