- 
                Notifications
    
You must be signed in to change notification settings  - Fork 44
 
Open
Labels
Milestone
Description
Investigative information
Please provide the following:
Test was run locally, but if needed can setup a "on cloud" reproduction.
Repro steps
- 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)
 
- 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.
- The "out of the box" request/response logging will still be done using the initial 
traceContext - Any calls to 
context.logwill still use the initial trace context. 
Request Logged Against Initial TraceContext


