获取 TraceTelemetry 以显示在 Application Insights 时间线中

Osk*_*kar 3 c# asp.net-web-api azure-application-insights

我有一个小的分析类,它实现IDisposable了在构造函数中启动秒表并停止它Dispose()并使用TelemetryClient.TrackTrace. 它工作正常,但我希望它出现在 Azure 门户的 Application Insights 页面的时间轴上。如果我使用它,我可以让它出现,TelemetryClient.TrackDependency但由于它不是依赖项,我不想使用它。有没有办法让它出现在时间线上?我试图将经过的时间添加为一个被调用的属性,duration但这没有用。

我不知道它是否有帮助,但分析器的简化版本看起来像这样:

public class Profiler : IDisposable
{
    private readonly Stopwatch _stopwatch;
    private readonly ILogger _logger;
    private readonly string _name;
    private readonly DateTimeOffset _timestamp;

    public Profiler(string name)
    {
        _logger = LogFactory.GetLogger();

        _stopwatch = Stopwatch.StartNew();
        _timestamp = DateTimeOffset.UtcNow;
        _name = name;
    }

    public static Profiler Step(string name)
    {
        return new Profiler(name);
    }

    public void Dispose()
    {
        var telemetryClient = new TelemetryClient();

        _stopwatch.Stop();

        var message = $"Step - {_name} {_stopwatch.ElapsedMilliseconds} ms";

        var traceTelemetry = new TraceTelemetry(message, SeverityLevel.Verbose)
        {
            Timestamp = _timestamp
        };

        traceTelemetry.Properties.Add("Elapsed Milliseconds", $"{_stopwatch.ElapsedMilliseconds}");

        telemetryClient.TrackTrace(traceTelemetry);
    }
}
Run Code Online (Sandbox Code Playgroud)

Dmi*_*eev 6

时间线视图主要显示包含时间戳和持续时间的事件类型作为基本属性(但不作为自定义属性),例如请求、依赖(随时间显示)或带有时间戳的关键事件,例如异常(显示为时间点)。

轨迹和事件在此视图中显示为平面有序列表,而不是时间线(如果切换到平面列表视图)。

考虑到当前的实现(除非更改),您建议使用 Dependencies 是在您的情况下实现时间线视图的最简单方法之一。

您可以在这里稍微使用定义 - 使用请求类型进行总体操作,使用依赖项作为方法,在失败的情况下使用异常。这应该很好地适合模型并提供良好的时间线表示。