无法获取通过 Partition.ReportLoad 报告的 mertics 值

Can't get mertics values reported through Partition.ReportLoad

我正在尝试针对我的无状态服务的所有实例动态报告负载。目标是稍后从代码中读取报告的值。到目前为止,我有报告一些指标并使用 FabricClient 读取它们的代码,但无论我做什么,我得到的数字始终为 0。所以这是服务的配置方式 -

<StatelessService ServiceTypeName="MySvcType" InstanceCount="-1">
    <SingletonPartition />
    <LoadMetrics>
      <LoadMetric Name="MemoryInMb" />
      <LoadMetric Name="CPU" />
    </LoadMetrics>
</StatelessService>

报告指标的代码-

    protected override async Task RunAsync(CancellationToken cancellationToken)
    {
        await base.RunAsync(cancellationToken);

        PerformanceCounter cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total");
        PerformanceCounter ramCounter = new PerformanceCounter("Memory", "Available MBytes");

        while (true)
        {
            cancellationToken.ThrowIfCancellationRequested();

            this.Partition.ReportLoad(new List<LoadMetric> { new LoadMetric("MemoryInMb", (int)ramCounter.NextValue()), new LoadMetric("CPU", (int)cpuCounter.NextValue()) });

            await Task.Delay(5000);
        }
    }

这是我必须提取这些指标的代码 -

        var partitions = await fabricClient.QueryManager.GetPartitionListAsync(new Uri("fabric:/MyApp/MySvc"));
        foreach (var partition in partitions)
        {
            var partitionLoad = await fabricClient.QueryManager.GetPartitionLoadInformationAsync(partition.PartitionInformation.Id);

            var replicas = new List<Replica>();
            ServiceReplicaList replicaList = await fabricClient.QueryManager.GetReplicaListAsync(partition.PartitionInformation.Id);
            replicas.AddRange(replicaList);
            while (!string.IsNullOrEmpty(replicaList.ContinuationToken))
            {
                replicaList = await fabricClient.QueryManager.GetReplicaListAsync(partition.PartitionInformation.Id, replicaList.ContinuationToken);
                replicas.AddRange(replicaList);
            }

            foreach(var replica in replicas)
            {
                var replicaLoad = await fabricClient.QueryManager.GetReplicaLoadInformationAsync(partition.PartitionInformation.Id, replica.Id);
                var memoryReports = replicaLoad.LoadMetricReports.Where(r => r.Name == "MemoryInMb");
                var cpuReports = replicaLoad.LoadMetricReports.Where(r => r.Name == "CPU");
            }
        }

因此,对于我定义的每个指标,我只返回一份报告,并且值始终为 0。关于我应该如何开始检索无状态服务中报告的值,有什么想法吗?

负载指标每五分钟缓冲一次并发送到集群。也许您只是等待的时间不够长?