【问题标题】:How can I query CPU and memory usage per container in AKS?如何在 AKS 中查询每个容器的 CPU 和内存使用情况?
【发布时间】:2021-02-20 17:02:21
【问题描述】:

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

【问题讨论】:

    标签: azure-aks


    【解决方案1】:

    该数据位于 LogManagement 部分的 Perf 表中:

    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/内存隔离和限制技术,就像命名空间用于分离网络、文件系统一样, 和进程 ID。

    【讨论】:

    • 感谢您的回复!我确实看过这张表,但据我了解 - 它存储每台计算机/节点而不是每个容器(或至少 - pod)的指标。我在同一个集群中有几个部署,这意味着上面的数据平均了不同的应用程序和同一应用程序的不同实例,这不是我想要的。
    • 该表中的数据实际上是节点级别(ObjectName == 'K8SNode')和容器级别(ObjectName == 'K8SContainer')。我编辑了我的答案,提供了一个示例查询,展示了如何解析容器级别的详细信息并加入 KubePodInventory 以获取命名空间、pod 名称和容器名称。
    • 关键的见解是我需要将 Perf 表(性能指标)与 KubePodInventory(找出数据相关的容器)连接起来。谢了哥们!只有一个建议 - 使连接成为左外连接:)
    • 已更新 - 你是对的。我的实际生产查询确实具有那种连接类型——我只是没有方便,而是从内存中快速重新创建了它。祝你好运!
    猜你喜欢
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-21
    • 2019-08-04
    • 1970-01-01
    • 2011-03-25
    • 1970-01-01
    相关资源
    最近更新 更多