2016-05-31 52 views
4

我在C#控制器的ASP.NET Core应用程序中设置了应用程序洞察,它正在记录页面查看,响应时间等基本数据。但是我想创建一些自定义事件和日志这些也是,但是我无法将他的自定义事件显示在Azure门户中。目前我正在使用Application Insights的免费版本。应用程序洞察不记录自定义事件

的是非常简单的

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

凡eventName的是包含我想跟踪和属性自定义事件的字符串是一个字典来跟踪一些附加属性。

当我运行应用程序并敲了几下这些行之后,我可以到天蓝色的门户并查看基本信息,但是当我执行搜索时,它说有0个自定义事件并搜索任何按名称的自定义事件不会返回任何结果。

我有使用它是

 Tracker.TrackEvent("Visit HomePage", User.Identity.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(); 
    } 

} 

然后我的一个简单的例子,在它的遥测东西类:上述事件是工作,但下方一个不是,它根本不记录这一个。这会调用TrackRequest和TelementryClient上的TrackEvent,但我根本没有看到这些。

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

我稍微回顾一下。我看到其中一些事件已经通过,但是我将其中的一些事件连续记录下来,我只能看到我应该看到的6个事件中的2个事件?任何想法可能会发生什么?

+0

你能举一个确切的例子吗?你如何按名称搜索?如果您可以在没有过滤器的搜索视图中看到它们,那么您应该也可以搜索它们。您在门户中输入搜索内容的确切语法时可能会遇到一些细微问题? –

+0

我根本看不到他们。当我点击搜索时,说自定义事件说瓷砖0,我根本找不到它们。 就一个确切的例子。当您调试应用程序时,请参阅上面的代码 –

+0

,您是否在调试输出窗口中看到如下行:“Application Insights Telemetry:{something here |}”?我想确保一切都真正走出去。或者,如果您使用fiddler,您是否可以看到从您的应用程序出去的“dc.servies.visualstudio.com”的出站请求?他们成功了吗? (200s?) –

回答

2

应用程序Insights遥测客户端具有内存缓冲区和刷新间隔(默认为1分钟,据我记忆)将缓冲遥测发送到AI端点。
您的跟踪方法有一个遥测客户端的本地成员,在实际将数据刷新到AI端点之前,它是“垃圾收集”的。因此,你有三种选择(第一推荐):

  1. 商店遥测客户端作为类的成员,这将不遗余力在每个轨道运行,更重要的初始化 - 将保持客户的延续,同时刷新间隔时间(只要您不重新生成ApplicationInsightsTracker每次)。
  2. 调用 TrackEvent/TrackRequest/TrackX后,通过调用Flush API (appInsights.Flush())来刷新内存缓冲区。
  3. 用于开发目的 - 您还可以启用Developer Mode自动刷新每个跟踪的遥测器上的缓冲区。
+0

我将TelementryClient移动到类级别变量中,并将Flush添加到行中并且没有任何区别 –

+0

天真的问题,但值得一问:是否确保更新ApplicationInsights.config与您的应用程序的仪器密钥?您可能会获取页面视图遥测,因为js代码对ikey具有其自己的配置,并且它不使用ApplicationInsights.config文件。 – yonisha

+0

在VS中,我单击添加应用程序见解来添加它,它没有添加任何.config文件。它确实把以下内容放在appsettings.json文件中。这是一个ASP。NET核心应用程序 “ApplicationInsights”:{ “InstrumentationKey”:“blah-blah” }, –

0

我怀疑在构建TelemetryClient()对象时,某些基本配置未初始化。它可能像Telemetry Client对象中的“无仪器密钥”,或者是从TelemetryConfiguration()对象读取的更隐藏的东西。

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

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

AI WEB SDK和AI ASP.NET核心SDK的代码位于GitHub,因此您可以快速浏览代码以查看还有哪些内容可以在此处旁路。