将 Azure 函数 (v3) 绑定到 BlobTrigger 的 RequestTelemetry 添加自定义属性

Add Custom Properties for RequestTelemetry of the Azure Function (v3) binding to BlobTrigger

我想将自定义属性添加到为用 C# 编写的 Azure 函数 (V3) 生成的 RequestTelemetry。

多亏了,我设法通过 HttpTrigger 绑定实现了这个功能。

var requestTelemetry = req.HttpContext?.Features.Get<RequestTelemetry>();
requestTelemetry.Properties.Add("MyProp", "Some value");

但是,当我尝试对另一个具有 BlobTrigger 绑定的函数做同样的事情时,它变得混乱了。第一个挑战是:

How to get current RequestTelemetry in a function that is using BlobTrigger binding?

在具有 HttpTrigger 绑定的函数中,函数被注入 HttpRequest 参数

public async Task<IActionResult> Upload(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = "upload/{name}")] HttpRequest req,
            string name,
            ILogger log,
            ExecutionContext context)
        {  
  ...
}

因此我们可以使用 HttpRequest 获取当前 RequestTelemetry。但是,带有 BlobTrigger:

的函数呢?
    [FunctionName("Create-Thumbnail")]
            public async Task CreateThumbnail([BlobTrigger("input/{name}",  Source = BlobTriggerSource.EventGrid, Connection = "AzureWebJobsStorage")] Stream image,
                IDictionary<string,string> metadata,
                string name,
                ExecutionContext context)
            { 
  ...
}

我尝试注入 HttpRequest 并使用与 HttpTrigger 函数相同的方式。但是没用。

经过数小时的广泛研究,我找不到与此问题相关的任何文档或帖子。

任何人都可以为此提供一些提示吗?

据我所知,使用 blob 触发器时没有 http 请求。您仍然可以通过设置如下属性将自定义属性添加到执行期间生成的遥测:

// The current telemetry item gets a property. 
// Useful if the function is not triggered by an http request
Activity.Current.AddTag("setUsingTag", "setUsingTag");

// Subsequent telemetry gets this property attached
Activity.Current.AddBaggage("setUsingActivityBaggage", "setUsingActivityBaggage"); 

当使用 Baggage 而不是 Tag 时,自定义 属性 被添加到执行期间生成的所有遥测数据中,例如依赖项调用等

另请参阅 this github thread. It also mentions 更高版本的 AI 中可能引入了一个错误,可能会强制您降级 AI 以使其正常工作。


多亏了这个 GitHub issue,在将 System.Diagnostics.DiagnosticSource 降级到 4.6

版本后终于可以使用了
<PackageReference Include="System.Diagnostics.DiagnosticSource" Version="4.6.0" />