Application Insights不记录自定义事件

Pau*_*cas 6 c# asp.net azure azure-application-insights

我有在C#控制器我的ASP.NET核心应用设置应用程序见解,它是记录基本数据,如网页浏览,响应时间等,但我想创造一些自定义的事件和日志的一样好,但我不能让任何他的自定义事件将显示在Azure门户中.目前我正在使用免费版的Application Insights.

非常直截了当

var appInsights = new TelemetryClient();
appInsights.TrackEvent(eventName, properties);
Run Code Online (Sandbox Code Playgroud)

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();
    }

}
Run Code Online (Sandbox Code Playgroud)

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

        Tracker.TrackEvent("Visit HomePage", User.Identity.Name);
Run Code Online (Sandbox Code Playgroud)

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

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

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

yon*_*sha 8

Application Insights遥测客户端具有内存缓冲区和刷新间隔(据我所记得,默认为1分钟),用于将缓冲的遥测发送到AI端点。
您的Track方法具有遥测客户端的本地成员,该成员在实际将数据刷新到AI端点之前已被“垃圾收集”。因此,您有三种选择(首先推荐):

  1. 将遥测客户端存储为该类的成员,这将节省每次Track执行时的初始化,更重要的是-使客户端在刷新间隔内保持活动状态(只要您不每次都重新生成ApplicationInsightsTracker) 。
  2. 在调用TrackEvent / TrackRequest / TrackX之后,通过调用Flush API(appInsights.Flush())来刷新内存缓冲区。
  3. 出于开发目的 -您还可以启用“ 开发人员模式”以自动刷新跟踪的每个遥测上的缓冲区。