带有性能计数器的 Azure Service Fabric 上的 Azure Application Insights

Posted

技术标签:

【中文标题】带有性能计数器的 Azure Service Fabric 上的 Azure Application Insights【英文标题】:Azure Application Insights On Azure Service Fabric with Performance Counter 【发布时间】: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>()));
  );
 

【问题讨论】:

【参考方案1】:

要从集群节点获取遥测数据,您需要将 OMS 代理部署到每个节点。 确保使用 separate 日志分析存储部署 Application Insights,以便您可以对两个数据集使用相同的存储。

更多信息here。

【讨论】:

如果没有代理,我们不能用它实现“代码”吗? docs.microsoft.com/en-us/azure/azure-monitor/app/… afaik 您需要代理收集有关节点的详细信息并将其上传到 Log Analytics 或使用 WAD 根据docs.microsoft.com/en-us/azure/azure-monitor/app/…,Application Insights Agent 目前仅支持 .Net IIS 托管的应用程序。 我认为您正在将应用程序遥测与操作系统遥测混合在一起。代理/虚拟机扩展只会收集机器信息,而不是应用程序信息。应用程序信息来自您的代码(您已经准备好了)。 我认为你是对的,我将应用程序遥测与操作系统遥测混合在一起。其实我想知道什么具体限制了SF集群节点的负载? Azure 应用程序支持了解节点中的 cpu、内存使用情况的最佳选择是什么?

以上是关于带有性能计数器的 Azure Service Fabric 上的 Azure Application Insights的主要内容,如果未能解决你的问题,请参考以下文章

在 Azure 中使用 Visual Studio Online 加载测试性能计数器

在 Window Azure 上获取与性能计数器相关的错误

如何使用Powershell脚本获取Azure VM来宾指标(性能计数器)

使用Azure Monitor监视Process

Azure 上托管的高可用性 Service Fabric WebApi

Azure上CentOS上安装LIS (Linux Integration Service)