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

neM*_*iac 9 azure-aks

AKS 见解

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

Pat*_*aly 9

该数据位于 LogManagement 部分的 Perf 表中: 显示原始性能数据的日志分析查询的屏幕截图

有关如何从 Azure Monitor 查询容器日志的文档页面包含您可以开始使用的示例查询: 显示示例查询的文档页面的屏幕截图

查询此数据需要一些解析,因为该Computer字段始终显示从中收集数据的节点的名称,而不是 Pod。为了获取 Pod/容器的特定数据,您必须查看记录并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
Run Code Online (Sandbox Code Playgroud)

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

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