将Serilog与.Net核心和App Insights结合使用

fro*_*sty 2 serilog azure-application-insights .net-core asp.net-core-2.0

之前,我曾直接使用App见解来进行应用程序日志记录,而且我已经看到.Net核心平台还创建了跟踪事件,这些事件都涉及到App见解。

在一个新的.Net核心API应用程序中,我想使用Serilog进行应用程序日志记录,并使用App Insight来存储和可视化日志事件。我想知道:

  1. 如何继续获取.Net核心.created跟踪事件以了解App见解?

  2. 如何将关联ID从应用程序传递到.Net核心创建的跟踪事件?

  3. App洞察门户中的端到端交易功能会一起显示所有事件吗?对我来说,了解并密切注意SQL调用的延迟非常重要。

iro*_*e13 5

仅使用Serilog.Sinks.ApplicationInsights不够的,因为它不会将Serilog事件与Application Insights上的其余遥测相关联。

为了关联事件,将它们显示为一个“端到端事务”-您必须执行以下操作:

  1. 创建一个Serilog扩充程序,将当前ActivityID 记录为ScalarValueLogEventProperty-请参见OperationIdEnricher
  2. [可选]为此扩展程序创建扩展-请参阅LoggingExtensions
  3. 注册浓缩器/通过代码或配置将其添加到管道中-请参阅logging.json
  4. 为ApplicationInsights 创建一个自定义TelemetryConverter(从TraceTelemetryConverter或的子类EventTelemetryConverter),该自定义将telemetry.Context.Operation.Id根据在1中设置的值进行设置-请参见OperationTelemetryConverter

查看我的博客文章“ Serilog with ApplicationInsights ”,其中详细说明了以上几点,并提供了链接

另外,请务必在MSDN上的Application Insights中查看遥测相关性


Dmi*_*eev 4

如果您在 .Net core 中使用 ILogger 进行日志记录,则可以通过对startup.cs进行以下修改将这些消息定向到 Application Insights :

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

如果您使用自己的相关 ID,则可以使用Context.Operation自己的遥测初始值设定项在遥测项目字段中相应地修改 Application Insights 相关 ID,或者在请求中的相应标头Request-ID(全局 ID)和Correlation-Context(名称-值对))中传递这些值到这个应用程序 - AI 将从中获取相关 ID。

端到端事务应该在 Application Insights 遥测的详细信息视图中的时间线上一起显示(请求/依赖项和异常)。对于您自己的相关 ID,如果它们从事务一开始就存在于其中(例如在第一个组件中),它应该也能正常工作 - 否则在中间注入它们会破坏链。