首页 文章

Application Insights不记录自定义事件

提问于
浏览
5

我在C#Controller中的ASP.NET核心应用程序中设置了Application Insights,它正在记录基本数据,如页面视图,响应时间等 . 但我想创建一些自定义事件并记录这些事件,但我无法获得任何他的自定义事件将显示在Azure门户中 . 目前我正在使用免费版的Application Insights .

非常直截了当

var appInsights = new TelemetryClient();
appInsights.TrackEvent(eventName, properties);

eventName是一个字符串,包含我想要跟踪的自定义事件,属性是一个字典来跟踪一些其他属性 .

在我运行应用程序并点击这些行几次后,我可以转到天蓝色的门户网站查看基本信息,但是当我进行搜索时,它说有0个自定义事件并通过以下方式搜索任何自定义事件name不返回任何结果 .

我有一个类,下面有遥测器的东西

public class ApplicationInsightsTracker : IApplicationTracker
{

    private readonly TelemetryClient AppInsights = new TelemetryClient();

    public void TrackEvent(string eventName, string userName, Dictionary<string, string> properties = null)
    {
        AppInsights.Context.User.AccountId = userName;
        TrackEvent(eventName, properties);
    }

    public void TrackRequest(string eventName, string userName, TimeSpan elapsed,
        Dictionary<string, string> properties = null)
    {
        AppInsights.Context.User.AccountId = userName;
        TrackEvent(eventName, properties);

        AppInsights.TrackRequest(eventName, DateTimeOffset.Now, elapsed, "200", true);
        AppInsights.Flush();
    }

    private void TrackEvent(string eventName, IDictionary<string, string> properties = null)
    {
        AppInsights.TrackEvent(eventName, properties);
        AppInsights.Flush();
    }

}

然后我用它的一个简单例子是

Tracker.TrackEvent("Visit HomePage", User.Identity.Name);

编辑:上面的事件正在运行,但下面的事件不是,它根本没有记录这个 . 这会调用TrackRequest以及TelementryClient上的TrackEvent,但我根本没有看到这些 .

Tracker?.TrackRequest("Drill Report", userName, stopwatch.Elapsed, 
        new Dictionary<string, string>
        {
            { "DrillBy", report.DrillBy == null ? "None" : report.DrillBy.FriendlyName }
        });

我有点拿回来 . 我看到其中一些事件发生了,但是我把它们背靠背记录了一下,我只看到6个我应该看到的中的2个?什么想法可能会发生什么?

2 回答

  • 0

    Application Insights遥测客户端具有内存缓冲区和刷新间隔(默认值为1分钟,据我记得),用于将缓冲遥测发送到AI endpoints .
    您的Track方法具有遥测客户端的本地成员,该实体在实际将数据刷新到AI endpoints 之前是'garbage collected' . 因此,您有三个选项(首先推荐):

    • 将遥测客户端存储为类的成员,这将在每次Track执行时保留初始化,更重要的是 - 将使客户端保持活动状态以使刷新间隔启动(只要您不每次都重新生成ApplicationInsightsTracker) ) .

    • 通过调用Flush API(appInsights.Flush())调用TrackEvent / TrackRequest / TrackX后刷新内存缓冲区 .

    • For development purposes - 您还可以启用Developer Mode以自动刷新每个跟踪的遥测数据上的缓冲区 .

  • 4

    我怀疑在构造TelemetryClient()对象时没有初始化一些基本配置 . 它可能很容易像遥测客户端对象中的“无检测密钥”,或者从TelemetryConfiguration()对象读取的更隐藏的东西 .

    您可能希望检查传出的HTTP流量以查看对dc.services.visualstudio.com的失败请求 - 错误可能会提供有关修复/初始化内容的线索 .

    此外,您可以专门为Asp.Net核心项目查看getting started - 它可能包含您正在寻找的缺失部分 .

    AI WEB SDK和AI ASP.NET核心SDK的代码在GitHub上,因此您可以快速浏览代码,看看还有什么可以在这里进行侧钻 .

相关问题