Microsoft Azure のリソースのメトリックを取得したかった。Azure SQL Database のとか。
Azure SDK for .NET の Azure.Monitor.Query 使えば、任意のリソースのメトリックを取得できた。
using Azure.Identity; using Azure.Monitor.Query; using Azure.Monitor.Query.Models; var client = new MetricsQueryClient( credential: new DefaultAzureCredential()); var result = await client.QueryResourceAsync( resourceId: "<リソース ID>", metrics: new[] { "cpu_percent", }, options: new MetricsQueryOptions { Aggregations = { MetricAggregationType.Average, }, // 間隔 Granularity = TimeSpan.FromMinutes(5), // 期間 TimeRange = new QueryTimeRange( start: new DateTimeOffset(2023, 5, 29, 0, 0, 0, TimeSpan.Zero), end: new DateTimeOffset(2023, 5, 30, 0, 0, 0, TimeSpan.Zero)), }); foreach (var metric in result.Value.Metrics) { Console.WriteLine(metric.Name); Console.WriteLine(metric.Description); Console.WriteLine(metric.Unit); foreach (var time in metric.TimeSeries) { foreach (var value in time.Values) { Console.WriteLine(value.Average); } } Console.WriteLine(); } Console.ReadLine();
なお、TimeRange で UTC 以外の DateTimeOffset を指定すると、下記のようなレスポンスが返ってきた。
{"code":"BadRequest","message":"Detected invalid time interval input: 2023-05-29T00:00:00.0000000 09:00/2023-05-30T00:00:00.0000000 09:00, supported Iso 8601 time interval format: (Datetime/Datetime, Datetime/Duration, Duration/Datetime, Duration)"}
UTC しか対応してないのか?でも、Azure ポータルだと現地時間選べるし。SDK のバグでは。
ひとまず UTC で指定して、表示を工夫するしかないか。