Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

Initialize Trace Context for Service Bus Trigger using message "Diagnostic-Id"

Open
#632 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
38/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Stale
Tech stack
azure, typescript

Research direction

Start by reproducing the Service Bus topic-to-subscription trigger described in the issue and inspect where the worker initializes context.traceContext. Verify the Service Bus message's Diagnostic-Id is used, and confirm built-in request/response logging and context.log entries share the resulting correlation context.

Written by the indexing model from the issue text.

Description

area:nodejs-functions investigate
Investigative information

Please provide the following:

Test was run locally, but if needed can setup a "on cloud" reproduction.

Repro steps
  1. Create a Service Bus Triggered function (Topic -> Subscription)
  • Connected with AppInsights
  • Add some traces via context.log
  • throw an error so as the processed messages gets moved to the DLQ (makes it easier to debug)
  1. Fire a service bus event for subscription
Expected behavior

When a Service Bus triggered function is executed, I would expert the context.traceContext to be initialized using the Service Bus message Diagnostic-Id.

Actual behavior

The function seems to just initialize a brand new traceContext (not correlated to anything).

Known workarounds

Using the AppInsights wrapWithCorrelationContext, a traceContext can be initialized with the Diagnostic-Id being manually overridden as the traceParent.

// Default export wrapped with Application Insights FaaS context propagation
export default async function contextPropagatingHttpTrigger(context, message) {
  // overwrite with the proper traceparent from the message. 
  const sbTraceParent = context.bindingData.applicationProperties['diagnostic-Id'];
  if (sbTraceParent) {
    context.traceContext.traceparent = sbTraceParent;
  }

  const correlationContext = appInsights.startOperation(context, req) as CorrelationContext;

  // Wrap the Function runtime with correlationContext
  return appInsights.wrapWithCorrelationContext(async () => {

    try {
      appInsights.defaultClient.trackTrace({
        message: 'Correct Trace Context',
      });

      //wrong operation_Id
      context.log('Incorrect Trace Context');

      return await trigger(context, message);

    } catch (e) {
      context.log.error(e);
      throw e;
    } finally {
      // Track Request on completion
      appInsights.defaultClient.flush();
    }
  }, correlationContext)();
}

However, doing so only partially works.

  1. The "out of the box" request/response logging will still be done using the initial traceContext
  2. Any calls to context.log will still use the initial trace context.

Message In Service Bus
aebe-test__e2kf-servicebus-ngpphloem-dev01_aebe-test__-_Microsoft_Azure

Request Logged Against Initial TraceContext

e2kf-appinsights-ngp-dev01_-_Microsoft_Azure

Traces from AppInsights Correlation Context
e2kf-appinsights-ngp-dev01_-_Microsoft_Azure

Dominant language
TypeScript
Stars
110
Forks
52
Avg merge
7h 33m
Merged PRs (30d)
1

Getting set up

This project ships no dev container, Dockerfile or contributing guide, so setting up is up to you: start from its README, and see our first-contribution guide for the general steps.

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from Azure/azure-functions-nodejs-worker

All issues in Azure/azure-functions-nodejs-worker

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.