Skip to main content

Applications

在 Kubernetes 中,如果你想通过 Prometheus 获取 部署的应用信息(比如 Deployment、StatefulSet、Service 等),通常使用 kube-state-metrics 提供的以下指标。它会将 Kubernetes 对象的状态以指标暴露出来。


Service 相关指标(服务)

kube_service_info

  • 描述:K8s 中每个 Service 的基本信息
  • 常用 label:
    • exported_namespace(服务所在命名空间)
    • exported_service(服务名)
    • cluster_ip, type
  • 📌 识别集群中有哪些服务(通常是暴露的应用)

为什么有两个 namespace

kube_service_info{
cluster_ip="10.96.121.123",
container="kube-state-metrics",
endpoint="http",
exported_namespace="foo",
exported_service="team-new-ai-assistant",
instance="172.20.0.103:8080",
job="prometheus-kube-state-metrics",
namespace="monitor",
pod="prometheus-kube-state-metrics-85db568dc7-nsjws",
prometheus="monitor/foo",
service="prometheus-kube-state-metrics"
}
  • namespace="monitor":指标来源(kube-state-metrics 所在的命名空间)
  • exported_namespace="foo":被监控资源所在的命名空间。

这是 kube-state-metrics 的一个常见设计。


Deployment 相关指标(部署)

kube_deployment_labels

  • 描述:列出每个 Deployment 的标签
  • 📌 可以识别应用的分组(比如 app=nginx)

kube_deployment_created

  • 描述:Deployment 的创建时间(Unix 时间戳)

kube_deployment_spec_replicas

  • 描述:期望副本数

kube_deployment_status_replicas_available

  • 描述:当前可用副本数

Pod 相关指标(实际运行的应用容器)

kube_pod_info

  • 描述:每个 Pod 的基本信息
  • 常用 label:
    • pod, namespace, node, created_by_kind, created_by_name(可以追溯回应用)

kube_pod_labels

  • 描述:Pod 的标签
  • 📌 可用于过滤出特定 app,例如 app="myapp"

StatefulSet / DaemonSet(有状态服务)

  • kube_statefulset_info
  • kube_daemonset_info
  • kube_statefulset_labels
  • kube_daemonset_labels

实际查询示例

获取所有已部署服务列表(应用级别)

kube_service_info

获取所有 Deployment 名称

kube_deployment_labels

你可以加上 label_replace 提取 Deployment 名称:

label_replace(kube_deployment_labels, "deployment", "$1", "deployment", "(.*)")

如果你想识别“有哪些应用在运行”?

一个通用的做法是通过 Deployment 或 Pod 的 appcomponentname 等标签来聚合:

count by (namespace, label_app) (kube_pod_labels)