在 Azure 函数中使用关联 ID 进行日志记录

Posted

技术标签:

【中文标题】在 Azure 函数中使用关联 ID 进行日志记录【英文标题】:Logging With Correlation Id in Azure Function 【发布时间】:2021-09-23 05:18:32 【问题描述】:

任何人都可以建议我如何实现为每个 http 请求的可追溯性添加相关 ID 到下面的函数。

[FunctionName("GetCars")]
public async Task<IActionResult> GetCars([HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "api/v1/id/id")] HttpRequest req, Guid id)

    try
    
        if (id == Guid.Empty)
        
            _logger.LogError("Id is Empty");
        

        var cars= _deviceService.GetCars(id);

        return new OkObjectResult(cars);
    
    catch (Exception ex)
                   
        _logger.LogError(ex, "Failed to Fetch Cars");
                
    

【问题讨论】:

使用应用洞察力,它会为您做到这一点。 我正在使用它,但我同时点击了这个 api,它们是失败的机会,所以我想在响应正文中返回 id,以便我可以在应用程序洞察力中追踪它 另一种选择是在 Application Insights SDK 上加入调用此 API 的部分。然后,当您打开任何遥测项(请求/依赖项/异常/跟踪)时,Application Insights 将跨所有应用提取整个分布式跟踪。 【参考方案1】:

所以,如果我没记错的话,您想要的是,在发生异常的情况下,您可以在正文中返回 *something*,以便您可以在 Application Insights 中找到发生的情况?如果是这样,试试这个:

var requestTelemetry = req.HttpContext.Features.Get<RequestTelemetry>();
var operationId = requestTelemetry.Context.Operation.Id;

并将 operationId 作为结果的一部分发送。

operationId 可用于在 Application Insights 中跟踪从请求到异常的整个操作。

【讨论】:

以上是关于在 Azure 函数中使用关联 ID 进行日志记录的主要内容,如果未能解决你的问题,请参考以下文章

Azure Functions with java - 如何获取写入函数的日志?

Azure 门户在存储帐户中创建 Blob 容器时出错

具有相同跟踪 ID 的 Stackdriver 日志条目未关联

Azure 函数 - 'azure-functions-host' 文件夹的位置

如何保持启用 Azure 应用程序日志记录?

Azure 应用程序网关和 Azure Application Insights 之间的关联