2016-05-31 54 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,因此您可以快速瀏覽代碼以查看還有哪些內容可以在此處旁路。