Container Insights が収集した AKS のコンテナのメトリックを取得

Azure SDK for .NET の Azure.Monitor.Query 使えば、Container Insights が収集した AKS のコンテナのメトリックを取得できた。

www.nuget.org

LogsQueryClient で Log Analytics ワークスペースに対して Kusto クエリを実行。

using Azure.Identity;
using Azure.Monitor.Query;

const string WorkspaceId = "Log Analytics ワークスペースの概要に表示されているワークスペース ID";

var client = new LogsQueryClient(new DefaultAzureCredential());

// Container CPU
{
    var result = await client.QueryWorkspaceAsync(
        workspaceId: WorkspaceId,
        query: $@"Perf
| where ObjectName == ""K8SContainer"" and CounterName == ""cpuUsageNanoCores""
| summarize AvgCPUUsageNanoCores = avg(CounterValue) by bin(TimeGenerated, 30m), InstanceName",
        timeRange: new QueryTimeRange(
            start: DateTimeOffset.UtcNow.AddDays(-1),
            end: DateTimeOffset.UtcNow));

    foreach (var row in result.Value.Table.Rows)
    {
        Console.WriteLine($"TimeGenerated:{row["TimeGenerated"]}\tAvgCPUUsageNanoCores:{row["AvgCPUUsageNanoCores"]}");
    }
}

// Container memory
{
    var result = await client.QueryWorkspaceAsync(
        workspaceId: WorkspaceId,
        query: $@"Perf
| where ObjectName == ""K8SContainer"" and CounterName == ""memoryRssBytes""
| summarize AvgUsedRssMemoryBytes = avg(CounterValue) by bin(TimeGenerated, 30m), InstanceName",
        timeRange: new QueryTimeRange(
            start: DateTimeOffset.UtcNow.AddDays(-1),
            end: DateTimeOffset.UtcNow));

    foreach (var row in result.Value.Table.Rows)
    {
        Console.WriteLine($"TimeGenerated:{row["TimeGenerated"]}\tAvgUsedRssMemoryBytes:{row["AvgUsedRssMemoryBytes"]}");
    }
}

Console.ReadLine();