如何查询 AKS 中每个容器的 CPU 和内存使用情况?

How can I query CPU and memory usage per container in AKS?

因此,我可以在 AKS 的见解选项卡中清楚地看到每个容器的统计信息。这些必须来自某个地方,但我只能在查询 logs/metrics 时找到每个节点的统计信息。我如何查询这个(为了建立一个工作簿)。

该数据位于日志管理部分的 Perf table 中:

How to query logs from Azure Monitor for containers 上的文档页面包含您可以开始的示例查询:

查询此数据需要一些解析,因为 Computer 字段始终显示从中收集数据的节点的名称,而不是 pod。为了获得 pod/container 特定数据,您必须查看带有 ObjectName == 'K8SContainer' 的记录并解析包含您需要的数据的 InstanceName 字段。 InstanceName 是这样构建的:/subscriptions/SUBSCRIPTIONID/resourceGroups/RESOURCEGROUPNAME/providers/Microsoft.ContainerService/managedClusters/CLUSTERNAME/PODUID/CONTAINERNAME。鉴于该数据,我们可以解析出 PodUid 并与 KubePodInventory 连接以获取 Pod.

的标识信息

这是一个示例查询:

Perf
| where ObjectName == 'K8SContainer' and TimeGenerated > ago(1m)
| extend PodUid = tostring(split(InstanceName, '/', 9)[0]), Container = tostring(split(InstanceName, '/', 10)[0])
| join kind=leftouter (KubePodInventory | summarize arg_max(TimeGenerated, *) by PodUid) on PodUid
| project TimeGenerated, ClusterName, Namespace, Pod = Name, Container, PodIp, Node = Computer, CounterName, CounterValue

此查询产生如下结果,其中应包含您需要的数据:

附带说明 - Computer 字段始终显示节点名称,因为那是 OMS 代理所在的位置 运行。它在节点级别收集统计数据,但这些统计数据包括每个 cgroup 的内存和 CPU 使用情况,这是容器背后的支持 CPU/memory 隔离和限制技术,就像如何命名空间用于分隔网络、文件系统和进程 ID。