gpt4 book ai didi

azure-functions - 在 Azure Function 中添加自定义遥测属性

转载 作者:行者123 更新时间:2023-12-03 21:18:54 25 4
gpt4 key购买 nike

我有一个 Azure 函数 (v2),其中数据通过 HTTP 正文作为 JSON 传入。我想使用标准的 Trace 和 Request 事件在 Application Insights 中记录其中的一些 JSON 数据。

到目前为止我尝试过的:

  • 使用自定义的 ITelemetryInitializer 解析主体并将属性添加到 ISupportProperties.Properties 。但这有两个缺点:每个请求都会多次读取和解析主体(一次在我的函数中,在遥测初始化程序中多次),有时访问主体会抛出异常,因为它已被处理(可能它会消失)函数调用结束时的范围)。
  • 在我的函数中使用 TelemetryClient。但是这个客户端似乎没有合适的属性来设置:
  • TelemetryClient.Context.GlobalProperties 用于全局属性,而不用于请求范围的属性;
  • TelemetryClient.Context.Properties 已过时,我不知道如何在那里使用推荐的替代 ISupportProperties.Properties

  • 理想情况下,我想使用在我的函数中解析的数据,并使用该数据来初始化遥测数据。

    最佳答案

  • 您可以通过在 Activity.Current 上添加标签来更新请求遥测属性,如 Activity.Current?.AddTag("my-prop", ExtractPropFromRequest()); 无需任何额外更改,这些标签将出现在请求中。不幸的是,您不会将它们印在痕迹上。
  • 你也可以在函数中解析一次你的请求体,并将其存储在 AsyncLocal 中。然后在 TelemetryInitializer
  • 中访问这个 AsyncLocal

     public class AsyncLocalPropertyTelemetryInitializer : ITelemetryInitializer
    {
    public void Initialize(ITelemetry telemetry)
    {
    if (telemetry is ISupportProperties propTelemetry &&
    Function1.AdditionalContext.Value != null) // you may find a better way to make it work with DI
    {
    propTelemetry.Properties["my-prop"] = Function1.AdditionalContext.Value;
    }
    }
    }


    public static class Function
    {
    internal static readonly AsyncLocal<string> AdditionalContext = new AsyncLocal<string>();
    [FunctionName("Function1")]
    public static async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req, ILogger log)
    {
    AdditionalContext.Value = "something important"; // read the body here
    log.LogInformation("C# HTTP trigger function processed a request.")
    AdditionalContext.Value = null;
    // ...
    }
    }
    }

    关于azure-functions - 在 Azure Function 中添加自定义遥测属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56851912/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com