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

时间:2018-04-25 10:43:26

标签: c# asp.net-web-api azure-application-insights

我有一个实现IDisposable的小型分析类,它在构造函数中启动秒表并在Dispose()中停止,并使用TelemetryClient.TrackTrace将经过的时间(以毫秒为单位)记录到Azure。它工作正常,但我希望它出现在Azure门户的应用程序见解页面的时间轴上。如果我使用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);
    }
}

1 个答案:

答案 0 :(得分:4)

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

此视图中的跟踪和事件显示为平面有序列表,但不显示为时间轴(如果切换到平面列表视图)。

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

您可以在此处使用定义 - 使用请求类型进行总体操作,使用方法的依赖关系,在出现故障时使用例外。这应该很好地适合模型并提供良好的时间表表示。