【发布时间】:2021-02-06 20:13:12
【问题描述】:
在现有的 Azure Service Fabric 实例上,最近使用以下代码合并了“Azure Application Insights”
return new WebHostBuilder().UseHttpSys()
.ConfigureServices(
services => services
.AddSingleton<StatelessServiceContext>(serviceContext)
.AddSingleton<ServiceFabricAppContext>(new ServiceFabricAppContext(){
NodeName = serviceContext.NodeContext.NodeName,
ServiceHostIP=serviceContext.NodeContext.IPAddressOrFQDN,
ServiceHostPort=FabricRuntime.GetActivationContext().GetEndpoints()[0].Port
} )
.AddSingleton<ITelemetryInitializer>((serviceProvider) => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext))) // Azure Service Fabric Telemetry Initializer
.UseContentRoot(Directory.GetCurrentDirectory())
.UseApplicationInsights()
.UseStartup<Startup>()
.UseEnvironment(environment)
.UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.None)
.UseUrls(url)
.Build();
基本上在一行附加代码的下方添加,即,
.AddSingleton<ITelemetryInitializer>((serviceProvider) => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext)))
以下是添加的附加包,
<PackageReference Include="Microsoft.ApplicationInsights.ServiceFabric.Native" Version="2.1.1" />
<PackageReference Include="Microsoft.ServiceFabric.Diagnostics.Internal" Version="4.1.417" />
目前在 AzureApplicationInsights => 日志下,只有“requests”表具有数据,而其他必需表尤其是“performanceCounters”为空。
需要做什么/配置,以便已经连接的 Azure 应用程序洞察实例可以记录性能计数器详细信息,例如托管 .Net Core 2.1 Web Api 应用程序的现有服务结构节点的 CPU、内存等?
用于获取性能计数器的代码:
using Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector;
public IServiceProvider ConfigureServices(IServiceCollection services)
{
var aiOptions = new Microsoft.ApplicationInsights.AspNetCore.Extensions
.ApplicationInsightsServiceOptions();
aiOptions.EnableAdaptiveSampling = false;
aiOptions.EnableQuickPulseMetricStream = true;
aiOptions.InstrumentationKey = "cxxxxxx4-2xx6-xxx1-axxf-071xxxxxxxb";
services.AddApplicationInsightsTelemetry(aiOptions);
// The following configures PerformanceCollectorModule.
services.ConfigureTelemetryModule<PerformanceCollectorModule>((module) =>
{
// the application process name could be "dotnet" for ASP.NET Core self-hosted applications.
module.Counters.Add(new PerformanceCounterCollectionRequest(
@"\Process([**_dotnet_**])\Page Faults/sec", "DotnetPageFaultsPerfSec")); //not sure "dotnet" is right value here?
});
//Add MVC
services.AddMvcCore(options =>
{
options.Filters.Add(new
LoggingFilter(_container.GetInstance<IMemoryCache>()));
});
}
【问题讨论】:
标签: azure azure-service-fabric azure-application-insights azure-monitoring