Google Managed Prometheus 未从 GKE cronjobs 收集指标

问题描述 投票:0回答:1

我在 GKE 集群 (v1.24.26) 上使用 Google 的托管集合,但找不到收集与 Kubernetes cronjobs 相关指标的方法。我找不到 kube_cronjob_next_schedule_time、kube_job_status_failed 或 kube_job_status_succeeded。

我需要配置一些特定的东西来收集 GKE 上的这些指标吗?

我尝试重新启动 kube-state-metrics-0,重新启动收集器,但没有任何效果。

kubernetes google-cloud-platform google-kubernetes-engine prometheus
1个回答
0
投票

好奇。

我可以重现您的问题。

我怀疑 GMP 使用 Kube State Metrics 存在问题。

部署后,我无法验证配置

collector
(仅 - 见下文)收集
kube_state_metrics_*
,但云监控也不会显示这些。

您已将

apply
Kube State Metrics 添加到集群中,其中包括
PodMonitoring
资源,但奇怪的是针对
metrics-self
中名为
metrics
的端口(而不是针对名为
kube-state-metrics
的端口):

kubectl get podmonitoring/kube-state-metrics \
--namespace=gmp-public \
--output=jsonpath="{.spec.endpoints[0]}"
{
  "interval":"30s",
  "port":"metrics-self"
}

但是(!)

kube-state-metrics
暴露了2个(指标)端口:

kubectl get statefulset/kube-state-metrics \
--namespace=gmp-public \
--output=jsonpath="{.spec.template.spec.containers[0].ports}"
[
  {
    "containerPort": 8080,
    "name": "metrics",
    "protocol": "TCP"
  },
  {
    "containerPort": 8081,
    "name": "metrics-self",
    "protocol": "TCP"
  }
]

如果您

port-forward
访问这些端口,
8081
会公开一组指标 (
kube_state_metrics_*
),但
8080
会公开您感兴趣的指标(
kube_job
kube_cronjob
):

kubectl port-forward statefulsets/kube-state-metrics \
--namespace=gmp-public \
8080:8080 \
8081:8081

然后:

  • http://localhost:8081/metrics (
    kube_state_metrics_*
    )
  • http://localhost:8080/metrics(
    kube_job_*
    kube_cronjob_*
    等)

或者:

# "metrics-self" (8081) doesn't include "kube_cronjob"
curl --silent --get http://localhost:8081/metrics |\
awk '/kube_cronjob/ {print}'

# "metrics" (8080) includes "kube_cronjob"
curl --silent --get http://localhost:8080/metrics |\
awk '/kube_cronjob/ {print}'

因此,第一件事是尝试创建一个新的

PodMonitoring
来捕获例如
kube_cronjob_*
指标也来自
metrics
(8080):

kube-state-metrics-2.yaml

apiVersion: monitoring.googleapis.com/v1
kind: PodMonitoring
metadata:
  name: kube-state-metrics-2
  namespace: gmp-public
  labels:
    app.kubernetes.io/name: kube-state-metrics
spec:
  endpoints:
  - port: metrics
    interval: 30s
  selector:
    matchLabels:
      app.kubernetes.io/name: kube-state-metrics

并且:

kubectl apply --filename=kube-state-metrics-2.yaml

然后(大约 30 秒后),检查 GMP 收集器是否正在抓取该目标:

kubectl port-forward daemonset/collector \
--namespace=gmp-system \
19090:19090

然后通过浏览 http://localhost:19090/targets 或:

 确认新的 
PodMonitoring
 目标 (
kube-state-metrics-2

) 正在被收集器抓取
curl \
--silent \
--get \
http://localhost:19090/api/v1/targets \
| jq -r '.data.activeTargets[].labels|select(.job=="kube-state-metrics-2")'
{
  "cluster": "...",
  "container": "kube-state-metric",
  "instance": "kube-state-metrics-0:metrics",
  "job": "kube-state-metrics-2",
  "location": "...",
  "namespace": "gmp-public",
  "pod": "kube-state-metrics-0",
  "project_id": "ackal-231229"
}

并且(!)通过浏览确认

collector
具有指标:

http://localhost:19090/graph?g0.expr=%7B__name__%3D~%22kube_cronjob_.%2B%22%7D

或者:

curl \
--silent \
--get \
--data-urlencode 'match[]={__name__=~"kube_cronjob_.+"}' \
http://localhost:19090/api/v1/series \
| jq -r '.data[].__name__'
kube_cronjob_annotations
kube_cronjob_created
kube_cronjob_info
kube_cronjob_labels
kube_cronjob_metadata_resource_version
kube_cronjob_next_schedule_time
kube_cronjob_spec_failed_job_history_limit
kube_cronjob_spec_successful_job_history_limit
kube_cronjob_spec_suspend
kube_cronjob_status_active
kube_cronjob_status_last_schedule_time
kube_cronjob_status_last_successful_time

结论:

  • kube-state-metrics
    例如
    kube_cronjob
    已暴露,但未被部署时创建的
    PodMonitoring
    刮擦
  • 即使确保收集器抓取指标后,Cloud Monitoring 也不会显示这些指标
  • 我无法在其他地方找到明显的错误来解释这些指标没有浮出水面
  • 作为最后一次绝望的尝试,我在
    operatorconfig/config
    中编辑了
    gmp-public
    以明确地将指标包含在过滤器中,但这也不起作用。

/难住了

© www.soinside.com 2019 - 2024. All rights reserved.