使用应用程序洞察跟踪 hangfire 后台作业

Tracking hangfire background jobs with app insights

我已在 Asp.net 核心应用程序中设置应用洞察。我的所有网络 api 请求都在应用程序洞察力上进行了跟踪,如果我有任何失败,我可以在 Failures 部分简单地找到它们。

但是,我也有 Hangfire 后台作业 运行,如果它们失败了,我无法在应用洞察中找到它们。我也有警报规则 Whenever the total http server errors is greater than or equal to 1 count,我不确定在这种情况下是否会出现 hangfire 5xx 错误。

那么有什么方法可以跟踪 Hangfire 作业失败并收到有关它们的通知吗?

Hangfire 会在后台处理大多数异常,因此默认情况下 App Insights 不会拾取它们。您还需要对 App Insights 进行一系列配置。

我为 Hangfire 编写了一个 JobFilter,它允许您连接 App Insights,这应该足以让您继续: https://github.com/maitlandmarshall/MIFCore/blob/master/MIFCore.Hangfire/Analytics/AppInsightsEventsFilter.cs

对于 App Insights 配置: https://github.com/maitlandmarshall/MIFCore/blob/master/MIFCore.Hangfire/Analytics/TelemetryConfigurationFactory.cs

将以上链接中的所有内容放在一起:

var appInsights = this.rootScope.ResolveOptional<AppInsightsConfig>();
var childScope = ServiceScope = this.rootScope.BeginLifetimeScope("HangfireServiceScope");
var activator = new AutofacLifecycleJobActivator(childScope);
var options = new BackgroundJobServerOptions()
{
    Activator = activator,
    Queues = new[] { JobQueue.Alpha, JobQueue.Beta, JobQueue.Default, JobQueue.Low }
};

this.globalConfig
    .UseFilter(new BackgroundJobContext());

if (!string.IsNullOrEmpty(appInsights?.InstrumentationKey))
{
    var telemetryClient = new TelemetryClient(TelemetryConfigurationFactory.Create(appInsights));
    this.globalConfig.UseFilter(new AppInsightsEventsFilter(telemetryClient));
}

using (var server = new BackgroundJobServer(options))
{
    await server.WaitForShutdownAsync(stoppingToken);
}

创建了一个不错的 nuget package Hangfire.Extensions.ApplicationInsights

所以,安装包:

Install-Package Hangfire.Extensions.ApplicationInsights

并将行添加到 ConfigureService 方法:

services.AddHangfireApplicationInsights();

如果您的解决方案需要一些自定义细节,您可以调整 github repository 中的代码。