gpt4 book ai didi

azure - App Insights 跟踪无序(Azure Functions 应用程序)

转载 作者:行者123 更新时间:2023-12-04 12:45:51 25 4
gpt4 key购买 nike

我通过 App Insights integration 将 Azure Functions TraceWriter 输出发送到 Application Insights 。当我寻找痕迹时,它们并没有按顺序出现。例如,我可以运行如下查询

traces | where operation_Id == "<guid>" | order by timestamp asc

并从该调用中获取 19 条跟踪记录。但它们之间只有 5 个唯一的时间戳,因此记录不会以完美的顺序返回。

还有其他方法可以对痕迹进行排序吗?

<小时/>

此查询确认发送到 App Insights 的时间是毫秒分辨率 - 如果是的话。 (微米和纳米始终=0)。

traces | project timestamp, datetime_part('microsecond', timestamp)

最佳答案

我正在等待 App Insights 团队的官方答复,看看是否有办法提供更高的精度,但我们可能会受到 DateTime.Now 的摆布。

<小时/>

[更新]: App Insights 似乎将对此进行改进。他们提交了两个问题来跟踪:

在这些问题得到修复之前,解决方法仍然适用。

<小时/>

但是,您可以使用秒表添加自己的测量结果,甚至可以在 App Insights 中对其进行排序。您可以使用 structured logging capabilities in ILogger 执行此操作.

一个简单的例子:

using System.Net;
using System.Diagnostics;

public static HttpResponseMessage Run(HttpRequestMessage req, ILogger logger)
{
// offset the Stopwatch with the current ticks so multiple runs don't overlap.
var startTicks = DateTime.UtcNow.Ticks;
Stopwatch sw = Stopwatch.StartNew();
logger.LogInformation("[{PreciseTimeStamp}] Log 1", (startTicks + sw.ElapsedTicks).ToString());
logger.LogInformation("[{PreciseTimeStamp}] Log 2", (startTicks + sw.ElapsedTicks).ToString());
logger.LogInformation("[{PreciseTimeStamp}] Log 3", (startTicks + sw.ElapsedTicks).ToString());
logger.LogInformation("[{PreciseTimeStamp}] Log 4", (startTicks + sw.ElapsedTicks).ToString());
logger.LogInformation("[{PreciseTimeStamp}] Log 5", (startTicks + sw.ElapsedTicks).ToString());
sw.Stop();

return req.CreateResponse(HttpStatusCode.OK);
}

这将输出如下内容:

2018-03-06T19:46:32.278 [Info] [636559623922781779] Log 1
2018-03-06T19:46:32.278 [Info] [636559623922783356] Log 2
2018-03-06T19:46:32.278 [Info] [636559623922784381] Log 3
2018-03-06T19:46:32.278 [Info] [636559623922785325] Log 4
2018-03-06T19:46:32.278 [Info] [636559623922786254] Log 5

在 App Insights 中,您可以使用 order by tolong(customDimensions.prop__PreciseTimeStamp) asc 进行排序。但由于时间戳位于消息中,因此您也可以按时间戳进行排序。

如果您想变得更有趣,您可以将新列添加到您的跟踪中,而无需使用如下的日志记录帮助程序将其显示在消息中:

public static void LogWithPrecision(ILogger logger, string message, long ticks)
{
var state = new Dictionary<string, object>
{
["PreciseTimeStamp"] = ticks.ToString()
};

logger.Log(LogLevel.Information, 0, state, null, (s, e) => message);
}

您可以按照与上述相同的方式进行排序,但消息中不会显示勾号。

关于azure - App Insights 跟踪无序(Azure Functions 应用程序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49102487/

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