代码之家  ›  专栏  ›  技术社区  ›  frosty

将Serilog与一起使用。Net core和App Insights

  •  10
  • frosty  · 技术社区  · 6 年前

    之前,我曾将App insights直接用于应用程序日志记录,我也看到了这一点。Net core平台还创建跟踪事件,这些事件将转到App insights。

    以新的方式。Net核心API应用程序,我想使用Serilog进行应用程序日志记录,使用App Insight存储和可视化日志事件。我想知道:

    1. 如何继续获取。净核心。是否创建了应用程序洞察的跟踪事件?

    2. 如何将应用程序中的相关Id传递给。Net core创建的跟踪事件?

    3. App insight portal中的端到端交易功能是否会同时显示所有事件?了解并关注SQL调用的延迟对我来说很重要。

    2 回复  |  直到 6 年前
        1
  •  14
  •   ironstone13    5 年前

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

    要关联事件,使其显示为一个“端到端事务”,您必须执行以下操作:

    1. 创建一个Serilog enricher,记录当前 Activity id作为 ScalarValue 在一个 LogEventProperty -请参见 OperationIdEnricher
    2. [可选]为此enricher创建扩展-请参阅 LoggingExtensions
    3. 注册enricher/通过代码或配置将其添加到管道中-请参阅 logging.json
    4. 创建自定义 TelemetryConverter (子类来自 TraceTelemetryConverter EventTelemetryConverter )对于将设置 telemetry.Context.Operation.Id 从1中设置的值)-请参阅 OperationTelemetryConverter

    查看我的博客帖子“ Serilog with ApplicationInsights “这就用更多的细节和链接解释了上述要点

    另外,一定要看看 Telemetry correlation in Application Insights 在MSDN上

        2
  •  4
  •   Dmitry Matveev    6 年前

    如果在中使用ILogger。Net core用于日志记录,这些消息可以通过 following modification 启动时间。反恐精英:

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

    如果使用自己的关联ID,则可以在中相应地修改Application Insights关联ID Context.Operation 您自己的遥测项目字段 Telemetry Initializer 或者在 respective headers ( Request-ID (全局ID)和 Correlation-Context (名称-值对)),AI将从这些请求中提取相关ID。

    端到端事务应该在Application Insights telemetry的详细信息视图中的时间线上一起显示(请求/依赖项和异常)。对于您自己的关联ID,如果它们从事务的一开始就在其中(例如,在第一个组件中),那么它也应该工作得很好,否则在中间注入它们将打破链条。