azure - 如何在 Application Insights 中扩展对传出 http 请求的依赖项跟踪

标签 azure .net-core azure-application-insights

我有一个 .NET core API,它执行与其他 API 的 HTTP 连接。我可以在 Application Insights 中的“依赖项事件类型”下可视化传出 HTTP 请求,但它只有基本信息。我正在研究如何添加有关传出 HTTP 调用的更多信息(例如 HTTP header )。

我调查过https://learn.microsoft.com/en-us/azure/azure-monitor/app/api-custom-events-metrics#trackdependency但我没有找到任何具体的方法来做到这一点。

最佳答案

正如前面所说,IvanYang 提出的解决方案是使用接收的请求而不是依赖请求。 我为此构建了这个 ITelemetryInstance:

public void Initialize(ITelemetry telemetry)
{
    var dependecyTelemetry = telemetry as DependencyTelemetry;
    if (dependecyTelemetry == null) return;

    if (dependecyTelemetry.TryGetOperationDetail("HttpRequest", out object request)
        && request is HttpRequestMessage httpRequest)
    {
        foreach (var item in httpRequest.Headers)
        {
            if (!dependecyTelemetry.Properties.ContainsKey(item.Key))
                dependecyTelemetry.Properties.Add(item.Key, string.Join(Environment.NewLine, item.Value));
        }
    }
    if (dependecyTelemetry.TryGetOperationDetail("HttpResponse", out object response)
        && response is HttpResponseMessage httpResponse)
    {
        var responseBody = httpResponse.Content.ReadAsStringAsync().GetAwaiter().GetResult();
        if (!string.IsNullOrEmpty(responseBody))
            dependecyTelemetry.Properties.Add("ResponseBody", responseBody);
    }
}

这将记录发送到依赖项的所有 header 以及收到的响应

关于azure - 如何在 Application Insights 中扩展对传出 http 请求的依赖项跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53952010/

相关文章:

sql-server - 将 Guid 主键和聚集索引迁移到 INT (Azure SQL)

c# - 托管的BackgroundService StopAsync 在等待后未执行

python - Azure Functions for python、结构化日志记录到 Application Insights?

javascript - 使用 Application Insights 配置 NLog 和 JS 异常

sql - Visual Studio Web 部署卡在输出控制台更新 dll 文件中

azure - 无法通过 CNAME URI 访问 blob

azure - 一旦事件中心的数据过期,我们在从 azure-eventhub 接收消息时是否可以获得重复的偏移值?

ssl - 在 .Net Core 控制台应用程序中生成受信任的自签名证书

c# - Span<T> 是否可以在没有固定表达式的情况下指向固定大小的缓冲区?

azure-application-insights - Application Insights .net core : Process was called on the TelemetrySink after it was disposed, 遥测数据被丢弃