【问题标题】:Azure Insights: tracking custom property through the chain of function executionsAzure Insights:通过函数执行链跟踪自定义属性
【发布时间】:2022-01-19 18:39:45
【问题描述】:

我的 Azure 应用中有 Azure Function1->Function2->Service 调用流。 Function1 有多个并发调用,每个调用都可以通过一些唯一的输入文档 ID 来标识。我想知道如何在 c# 代码中将 Azure Insight 上下文中的某些内容设置为 Funciton1 开头的该文档 ID,以便在任何后续调用中登录到 Azure Insights 的任何 [traces][exceptions][dependencies] 都包含文档 ID。我注意到它们都有customDimension 嵌套的属性列表,所以可能会以某种方式在其中添加一个属性。另外,如果 Function1 并行运行多次,我不希望这些文档 id 混淆。

目标是能够以最少的额外 c# 代码在各种日志中跟踪此文档 id,避免将文档 id 从函数传递到其他函数和其他服务,因此查看任何类型的日志(wheatear it's跟踪或异常或其他)我能够立即识别执行所属的文档。有可能吗?

【问题讨论】:

    标签: azure azure-application-insights


    【解决方案1】:

    要将自定义属性附加到所有日志,使用 azure 函数并不难,只需使用 telemetry initializer 即可:

        public class TelemetryEnrichment : ITelemetryInitializer
        {
            public void Initialize(ITelemetry telemetry)
            {
                if (!(telemetry is ISupportProperties item)) return;
    
                // Demonstrate static property
                item.Properties["Environment"] = "Production";
            }
        }
    

    如果是 http 触发函数,您可以像这样丰富请求遥测:

    var requestTelemetry = req.HttpContext.Features.Get<RequestTelemetry>();
    requestTelemetry.Properties.Add("aProp", "aValue");
    

    您还希望拥有由入口函数调用的其他函数记录的属性。这并不容易做到:您需要手动将 id 传递给另一个函数,例如使用该函数的 url 传递它。

    但是,如果您必须将 ID 附加到入口函数的日志,您可以轻松地创建一个查询来关联日志。基于operation id可以得到函数和服务之间通信流程的全貌,见the docs

    这样,您无需将 Id 作为自定义属性包含在每个遥测项中。

    【讨论】:

    • 彼得,谢谢您的回答。但是,将这种方法应用于我的情况有几个问题,我不知道如何克服:1)ITelemetryInitializer 对我不起作用,因为我需要记录函数输入参数(doc id,每个函数调用都是唯一的)。 2) Properties 集合被标记为 [Obsolete]。如果我尝试搜索它所替换的内容,则会将我带到无法将输入参数传递给的相同 ITelemetryInitializer 。 3)它是由时间触发函数触发的持久函数,它衍生出我想要跟踪的其他多个并发函数
    • @YMC 我稍后会解决这些问题,我没有看到任何无法解决的问题,但在我的手机上接听是行不通的:-)
    猜你喜欢
    • 2019-10-31
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-28
    相关资源
    最近更新 更多