Kubernetes pod/容器状态和内存/CPU统计信息

ogsagwnx  于 2023-08-03  发布在  Kubernetes
关注(0)|答案(1)|浏览(83)

我正在使用Prometheus从我们的Kubernetes集群和Grafana中提取指标来可视化信息。我正在尝试在Grafana中设置一个视图,该视图将显示以下信息:

  • Pod和其中容器的当前状态。似乎有两个独立的状态,一个用于pod,一个用于container。我不知道我是应该试着展示两个,还是只展示一个。
  • 显示创建日期和/或年龄(拉伸目标)也可能很有用。
  • 每个容器的工作集内存(对于那些正在“运行”的容器)。我试图了解“使用中”的内存量。对于处于“不兼容”状态的pod/container,显示空白(或N/A)。
  • 对于具有指定内存请求和限制的容器,为指定的数量。对于不含任何一种的容器,显示空白(或N/A)。

注意:查询可以按节点过滤(多选或“全部”)。
[可选地,我还想在这个表中包含CPU信息(使用情况、请求/限制),但是如果它更有意义或者更容易将其分成单独的表视图,那就完全可以了。]
下面是一个假设的表头布局:
| 命名空间|豆荚|集装箱|荚态|集装箱状态|记忆|存储器请求|记忆极限| memory limit |
| --|--|--|--|--|--|--|--| ------------ |
我一直在尝试从几个不同的指标“家族”的各种指标中获取信息。我发现某些信息(例如存储器统计)可从一个族获得,而其它信息(例如,容器/容器状态)可从另一个系列获得。很难将来自这两个系列的度量的信息“合并”在一起。
以下是我在这项工作中所做的一些观察:

  • kube_pod_container...指标有关于pod/container及其状态的信息,但没有关于内存(或CPU)使用情况的信息。
  • container_memory_...指标有关于内存统计信息的信息,但没有关于状态的相应信息。我假设有一个类似的指标集container_cpu...,它提供CPU统计数据。
  • container_memory_working_set_bytes返回的信息包括标签尺寸有明显变化的数据。不知道这意味着什么。结果集中没有一致的标签,这似乎很奇怪。我还没有看过其他类似的指标,看看这种现象是否也发生在那里。

我正在努力实现一个能够准确显示上述内容的子集的单一表视图。我接近了,但结果总是有问题。
我真的需要一些帮助,想法和建议,我如何才能做到这一点。也许我想做的太多了,需要把它分开。互联网上似乎没有任何信息可以让你很好地了解甚至可以尝试使用的适当指标。

lokaqttq

lokaqttq1#

这是我想出的一个解决方案,它满足了(* 大部分 *)的要求。
4个查询:

label_replace(
  label_join(
    label_replace(
        {__name__=~"(kube_pod_container_status_running|kube_pod_container_status_terminated|kube_pod_container_status_waiting)"}
      ==
        1,
      "status",
      "$1",
      "__name__",
      "kube_pod_container_status_(.*)"
    ),
    "pod_container",
    "__",
    "pod",
    "container"
  ),
  "__name__",
  "kube_pod_container_status",
  "__name__",
  ".*"
)

label_join(
  node_namespace_pod_container:container_memory_working_set_bytes,
  "pod_container",
  "__",
  "pod",
  "container"
)

label_join(
  cluster:namespace:pod_memory:active:kube_pod_container_resource_requests,
  "pod_container",
  "__",
  "pod",
  "container"
)

label_join(
  cluster:namespace:pod_memory:active:kube_pod_container_resource_limits,
  "pod_container",
  "__",
  "pod",
  "container"
)

字符串
第一个查询将来自3个独立度量的信息组合为名为kube_pod_container_status的伪度量。派生的status标签提供给定结果条目的实际状态。
所有查询都将podcontainer标签连接到一个新的标签pod_container。这是用来连接它们所有的(即“按字段连接”转换)。然后,我使用“Organizedfields”转换来隐藏我不想要的列(其中许多是重复的),更改标签和重新排序列。

相关问题