如何程序化获取Azure App Service重启指标及历史记录(C#)
当然可以通过程序化方式获取Azure App Service的重启记录,不管是活动日志还是诊断中心的重启数据都能拿到,用你提到的Microsoft.Azure.Management.Fluent完全可行,下面给你详细说明:
方法一:通过Azure活动日志获取重启记录
这是官方文档提到的包含重启数据的核心渠道,所有手动触发、平台自动触发的App Service重启事件都会被记录到活动日志中,用Fluent SDK可以直接查询:
C#代码示例
using Microsoft.Azure.Management.Fluent; using Microsoft.Azure.Management.ResourceManager.Fluent; using Microsoft.Azure.Management.ResourceManager.Fluent.Core; using System; using System.Linq; // 初始化Azure客户端(使用服务主体认证) var credentials = SdkContext.AzureCredentialsFactory .FromServicePrincipal( clientId: "你的客户端ID", clientSecret: "你的客户端密钥", tenantId: "你的租户ID", AzureEnvironment.AzureGlobalCloud); var azure = Azure .Configure() .WithLogLevel(HttpLoggingDelegatingHandler.Level.Basic) .Authenticate(credentials) .WithSubscription("你的订阅ID"); // 获取目标App Service的资源ID var targetApp = azure.WebApps.GetByResourceGroup("你的资源组名称", "你的App Service名称"); var appResourceId = targetApp.Id; // 查询最近7天内的重启事件 var restartEvents = azure.ActivityLogs.List( filter: $"eventTimestamp ge '{DateTime.Now.AddDays(-7).ToString("yyyy-MM-ddTHH:mm:ssZ")}' " + $"and resourceId eq '{appResourceId}' " + $"and (operationName eq 'Microsoft.Web/sites/restart/action' or operationName eq 'Microsoft.Web/sites/reboot/action')" ); // 遍历输出重启记录 foreach (var evt in restartEvents) { Console.WriteLine($"重启时间: {evt.EventTimestamp:yyyy-MM-dd HH:mm:ss}"); Console.WriteLine("触发类型: " + (evt.OperationName.Value.Contains("restart") ? "手动重启" : "平台自动重启")); Console.WriteLine("操作发起者: " + evt.Caller); Console.WriteLine("---"); }
说明
- 筛选条件里的两个操作名称分别对应手动重启和平台自动重启,可以根据需求调整;
- 可以修改
eventTimestamp的时间范围,比如查询最近30天的记录。
方法二:调用诊断API获取重启历史(对应诊断页面数据)
如果你需要和「诊断并解决问题 -> Web应用已重启」页面完全一致的数据,可以直接调用App Service的诊断API,这个接口返回的JSON包含重启时间、原因、持续时长等细节:
C#代码示例
using System.Net.Http; using System.Net.Http.Headers; using System.Text; using System.Threading.Tasks; public async Task FetchRestartHistoryFromDiagnostics(string appName, string publishUsername, string publishPassword) { // 诊断API端点 var apiUrl = $"https://{appName}.scm.azurewebsites.net/api/diagnostics/restartHistory"; using var client = new HttpClient(); // 使用发布配置文件的用户名密码进行Basic认证 var authToken = Convert.ToBase64String(Encoding.ASCII.GetBytes($"{publishUsername}:{publishPassword}")); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", authToken); var response = await client.GetAsync(apiUrl); response.EnsureSuccessStatusCode(); // 读取并输出重启历史数据 var restartData = await response.Content.ReadAsStringAsync(); Console.WriteLine("诊断页面同款重启记录:"); Console.WriteLine(restartData); }
说明
- 发布用户名和密码可以从App Service的「获取发布配置文件」下载的XML文件中提取;
- 如果想用Azure AD认证替代Basic认证,可以获取AD令牌后添加到请求头的
Authorization: Bearer <令牌>字段中。
内容的提问来源于stack exchange,提问作者johnstaveley




