You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用C#获取Azure App Service中的CPU使用率?

在Azure App Service中编程获取应用CPU使用率的方案

以下是几种无需管理员权限、跨Windows/Linux平台的可行方案:

1. 使用Azure Monitor SDK/API获取实例级或应用级CPU指标

Azure Monitor提供标准化的指标查询接口,能获取App Service的整体CPU使用率,支持跨平台,只需给应用分配Monitoring Reader权限即可。

示例代码(C#)

首先安装NuGet包:

Install-Package Azure.Monitor.Query
Install-Package Azure.Identity

然后编写查询逻辑:

using Azure.Identity;
using Azure.Monitor.Query;
using System;
using System.Threading.Tasks;

public class CpuMetricsFetcher
{
    public static async Task FetchAppServiceCpuAsync()
    {
        string subscriptionId = "你的订阅ID";
        string resourceGroupName = "资源组名称";
        string appServiceName = "你的App Service名称";
        string resourceId = $"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{appServiceName}";

        // 使用DefaultAzureCredential自动处理本地和Azure环境的认证
        var metricsClient = new MetricsQueryClient(new DefaultAzureCredential());
        
        var queryResult = await metricsClient.QueryResourceAsync(
            resourceId,
            metricNames: new[] { "CpuTime" }, // 实例级CPU时间指标,可计算使用率
            options: new MetricsQueryOptions
            {
                TimeRange = new QueryTimeRange(TimeSpan.FromMinutes(5)),
                Aggregations = { MetricAggregationType.Average }
            });

        foreach (var metric in queryResult.Value.Metrics)
        {
            Console.WriteLine($"指标: {metric.Name.LocalizedValue}");
            foreach (var timeSeries in metric.TimeSeries)
            {
                foreach (var dataPoint in timeSeries.DataPoints)
                {
                    Console.WriteLine($"{dataPoint.Timestamp:yyyy-MM-dd HH:mm:ss} | 平均CPU使用率: {dataPoint.Average:F2}%");
                }
            }
        }
    }
}

2. 通过App Service SCM站点获取实时CPU数据

App Service的SCM(站点管理)站点提供实时指标端点,可直接获取当前实例的CPU使用情况,无需依赖Azure Monitor,但需要使用应用的发布凭证认证。

示例代码(C#)

using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;

public class ScmCpuFetcher
{
    public static async Task FetchRealTimeCpuAsync()
    {
        string appName = "你的App Service名称";
        string deploymentUsername = "$你的App Service名称"; // 从部署中心获取
        string deploymentPassword = "你的发布密码";

        using var httpClient = new HttpClient();
        // Basic认证
        var authBytes = System.Text.Encoding.ASCII.GetBytes($"{deploymentUsername}:{deploymentPassword}");
        httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(authBytes));

        var response = await httpClient.GetAsync($"https://{appName}.scm.azurewebsites.net/api/metrics/cpu");
        if (response.IsSuccessStatusCode)
        {
            var cpuData = await response.Content.ReadAsStringAsync();
            Console.WriteLine("实时CPU数据:");
            Console.WriteLine(cpuData);
        }
        else
        {
            Console.WriteLine($"请求失败: {response.StatusCode}");
        }
    }
}

3. 获取当前应用进程的CPU使用率

如果只需要监测自身应用进程的CPU消耗,可以直接使用.NET的Process类,无需额外权限,跨Windows和Linux平台。

示例代码(C#)

using System;
using System.Diagnostics;

public class ProcessCpuMonitor
{
    public static float GetCurrentProcessCpuUsage()
    {
        using var currentProcess = Process.GetCurrentProcess();
        // 第一次采样
        currentProcess.Refresh();
        var startTime = DateTime.Now;
        var startCpuTime = currentProcess.TotalProcessorTime;

        // 等待1秒后二次采样
        System.Threading.Thread.Sleep(1000);

        currentProcess.Refresh();
        var endTime = DateTime.Now;
        var endCpuTime = currentProcess.TotalProcessorTime;

        // 计算CPU使用率
        var cpuUsedMs = (endCpuTime - startCpuTime).TotalMilliseconds;
        var totalMsPassed = (endTime - startTime).TotalMilliseconds;
        var cpuUsage = cpuUsedMs / (Environment.ProcessorCount * totalMsPassed) * 100;

        return (float)Math.Round(cpuUsage, 2);
    }
}

方案选择建议

  • 若需要多实例或全局的CPU统计,优先使用Azure Monitor方案,数据更全面,权限管控更规范。
  • 若需要实时的单实例CPU数据,选择SCM站点端点,延迟更低。
  • 若仅关注自身进程的CPU消耗,使用Process类方案最简便,无外部依赖。

内容的提问来源于stack exchange,提问作者Milad Karimifard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 21:45:35