Dot-Net-Core

將 Serilog 與 .Net 核心和 App Insights 結合使用

  • August 4, 2019

我之前曾直接將 App 洞察力用於應用程序日誌記錄,並且我已經看到 .Net 核心平台也會創建用於 App 洞察力的跟踪事件。

在一個新的 .Net 核心 API 應用程序中,我想使用 Serilog 進行應用程序日誌記錄,並使用 App Insight 來儲存和視覺化日誌事件。我想知道:

  1. 如何繼續將 .Net 核心 .created 跟踪事件獲取到 App 洞察?
  2. 如何將相關 ID 從我的應用程序傳遞到 .Net 核心創建的跟踪事件?
  3. 應用洞察門戶中的端到端交易功能是否會一起顯示所有事件?了解並關注 SQL 呼叫的延遲對我來說很重要。

如果您在 .Net 核心中使用 ILogger 進行日誌記錄,則可以通過以下修改startup.cs 將這些消息定向到 Application Insights:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
/*...existing code..*/
           loggerFactory.AddApplicationInsights(app.ApplicationServices, LogLevel.Warning);
}

如果您使用自己的相關 ID,則可以Context.Operation使用自己的遙測初始化程序在遙測項欄位中相應地修改 Application Insights 相關 ID,或在請求中的相應標頭Request-ID(全域 ID)和Correlation-Context(名稱-值對))中傳遞這些值到這個應用程序 - AI 將從這些應用程序中獲取相關 ID。

端到端事務應該在 Application Insights 遙測的詳細資訊視圖中的時間線上一起顯示(請求/依賴項和異常)。使用您自己的相關 ID,如果它們從事務的一開始就在那裡(例如在第一個組件中),它應該也可以工作 - 否則在中間注入它們會破壞鏈。

僅使用Serilog.Sinks.ApplicationInsights不夠的,因為它不會將 Serilog 事件與 Application Insights 上的其餘遙測數據關聯起來。

要關聯事件,以便將它們顯示為一個“端到端事務” - 您必須執行以下操作:

  1. 創建一個 Serilog 豐富器,它將目前Activityid 記錄為ScalarValuea LogEventProperty- 請參閱OperationIdEnricher
  2. $$ Optional $$為此擴充器創建擴展 - 請參閱LoggingExtensions
  3. 通過程式碼或配置註冊濃縮器/將其添加到管道中 - 請參閱logging.json
  4. 為 ApplicationInsights創建一個自定義TelemetryConverter(來自TraceTelemetryConverter或的子類),它將從 1 中設置的值設置) - 請參閱OperationTelemetryConverterEventTelemetryConverter``telemetry.Context.Operation.Id

查看我的部落格文章“使用 ApplicationInsights 的 Serilog ”,該文章解釋了以上幾點以及更多詳細資訊和連結

此外,請務必查看MSDN 上Application Insights 中的遙測相關性

引用自:https://stackoverflow.com/questions/50088805