来自自定义导出器的 Prometheus 指标显示在 /metrics 中,但不在 /graph (k8s) 中

     2023-02-15     143

关键词:

【中文标题】来自自定义导出器的 Prometheus 指标显示在 /metrics 中,但不在 /graph (k8s) 中【英文标题】:Prometheus metrics from custom exporter display in /metrics, but not in /graph (k8s) 【发布时间】:2020-12-01 16:03:06 【问题描述】:

我在 golang 中编写了一个名为“my-node-exporter”的节点导出器,其中包含一些收集器来显示指标。在我的集群中,我可以通过以下方式查看我的指标:

kubectl port-forward my-node-exporter-999b5fd99-bvc2c 9090:8080 -n kube-system
localhost:9090/metrics

但是,当我尝试在 prometheus 仪表板中查看我的指标时

kubectl port-forward prometheus-prometheus-operator-158978-prometheus-0 9090
localhost:9090/graph

找不到我的指标,我只能看到默认指标。我是否错过了将指标显示在图表上的步骤?


这是我的默认命名空间中的 pod,其中包含我的 prometheus 内容。

pod/alertmanager-prometheus-operator-158978-alertmanager-0            2/2     Running   0          85d
pod/grafana-1589787858-fd7b847f9-sxxpr                                1/1     Running   0          85d
pod/prometheus-operator-158978-operator-75f4d57f5b-btwk9              2/2     Running   0          85d
pod/prometheus-operator-1589787700-grafana-5fb7fd9d8d-2kptx           2/2     Running   0          85d
pod/prometheus-operator-1589787700-kube-state-metrics-765d4b7bvtdhj   1/1     Running   0          85d
pod/prometheus-operator-1589787700-prometheus-node-exporter-bwljh     1/1     Running   0          85d
pod/prometheus-operator-1589787700-prometheus-node-exporter-nb4fv     1/1     Running   0          85d
pod/prometheus-operator-1589787700-prometheus-node-exporter-rmw2f     1/1     Running   0          85d
pod/prometheus-prometheus-operator-158978-prometheus-0                3/3     Running   1          85d

我使用helm安装prometheus operator。

编辑:添加我的 yaml 文件

# Configuration to deploy
#
# example usage: kubectl create -f <this_file>

---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: my-node-exporter-sa
  namespace: kube-system

---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: my-node-exporter-binding
subjects:
  - kind: ServiceAccount
    name: my-node-exporter-sa
    namespace: kube-system
roleRef:
  kind: ClusterRole
  name: my-node-exporter-role
  apiGroup: rbac.authorization.k8s.io

---

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: my-node-exporter-role
rules:
  - apiGroups: [""]
    resources: ["secrets"]
    verbs: ["get", "list", "watch"]
  - apiGroups: [""]
    resources: ["persistentvolumes"]
    verbs: ["get", "list", "watch"]
  - apiGroups: [""]
    resources: ["persistentvolumeclaims"]
    verbs: ["get", "list", "watch"]
  - apiGroups: ["storage.k8s.io"]
    resources: ["storageclasses"]
    verbs: ["get", "list", "watch"]

---
#####################################################
############  Service ############
#####################################################

kind: Service
apiVersion: v1
metadata:
  name: my-node-exporter-svc
  namespace: kube-system
  labels:
    app: my-node-exporter
spec:
  ports:
    - name: my-node-exporter
      port: 8080
      targetPort: metrics
      protocol: TCP
  selector:
    app: my-node-exporter

---
#########################################################
############   Deployment  ############
#########################################################

kind: Deployment
apiVersion: apps/v1
metadata:
  name: my-node-exporter
  namespace: kube-system
spec:
  selector:
    matchLabels:
      app: my-node-exporter
  replicas: 1
  template:
    metadata:
      labels:
        app: my-node-exporter
    spec:
      serviceAccount: my-node-exporter-sa
      containers:
        - name: my-node-exporter
          image: locationofmyimagehere
          args:
            - "--telemetry.addr=8080"
            - "--telemetry.path=/metrics"
          imagePullPolicy: Always
          ports:
            - containerPort: 8080
          volumeMounts:
            - name: log-dir
              mountPath: /var/log
      volumes:
        - name: log-dir
          hostPath:
            path: /var/log

服务监控yaml

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: my-node-exporter-service-monitor
  labels:
    app: my-node-exporter-service-monitor
spec:
  selector:
    matchLabels:
      app: my-node-exporter
    matchExpressions:
      - key: app, operator: Exists
  endpoints:
  - port: my-node-exporter
  namespaceSelector:
    matchNames:
    - default
    - kube-system

普罗米修斯 yaml

# Prometheus will use selected ServiceMonitor
apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
  name: my-node-exporter
  labels:
    team: frontend
spec:
  serviceMonitorSelector:
      matchLabels:
        app: my-node-exporter
      matchExpressions:
      - key: app
        operator: Exists

【问题讨论】:

【参考方案1】:

您需要明确告诉 Prometheus 要收集哪些指标 - 以及从何处收集 - 首先创建一个指向您的 my-node-exporter pod 的 Service,然后创建一个 ServiceMonitor,如在Prometheus Operator docs 中描述 - 搜索短语“此服务对象由 ServiceMonitor 发现”。

【讨论】:

我已经创建了一个服务。我按照他们的描述创建了 servicemonitor yaml 文件,并将“app”设置为 my-node-exporter,没有任何改变。我还尝试将“app”设置为服务 my-node-exporter-svc,因为不清楚我应该使用哪一个。我在默认命名空间中创建了 servicemonitor 以及我的 prometheus 部署。 您可以查看 Prometheus Operator 安装附带的默认 ServiceMonitors,看看它们是如何定义的。如果你仍然不能让它工作,你能告诉你DeploymentServiceServiceMonitor的确切定义吗? 我已经添加了完整的 yaml。是否有必要将我的导出器添加到抓取配置中,如此处所述? prometheus.io/docs/prometheus/latest/getting_started/…。我已经做到了,它也没有帮助。 看起来在您的ServiceMonitor 中,您正在处理一个未在您的Service 中定义的端口名称:port: my-node-exporter。 This diagram 在创建事物应如何连接在一起的心智模型方面看起来很有用。 我已经对 yaml 文件进行了更改,并在上面更新了它们,试图将它们在该图表中所做的事情与我的能力相匹配。仍然没有在目标或图表上看到我的出口商。将我的 prometheus yaml 也添加到了编辑中。【参考方案2】:

让 Deployment/Service/ServiceMonitor/PrometheusRule 在 PrometheusOperator 中工作需要非常小心。 所以我创建了一个 helm chart repo kehao95/helm-prometheus-exporter 来安装任何 prometheus-exporters,包括您的客户 exporter,您可以尝试一下。 它不仅会为您创建导出器Deployment,还会为您创建Service/ServiceMonitor/PrometheusRule

安装图表
helm repo add kehao95 https://kehao95.github.io/helm-prometheus-exporter/
kehao95/prometheus-exporter 创建一个值文件my-exporter.yaml
exporter: 
  image: your-exporter
  tag: latest
  port: 8080
  args:
  - "--telemetry.addr=8080"
  - "--telemetry.path=/metrics"
用 helm 安装它
helm install --namespace yourns my-exporter kehao95/prometheus-exporter -f my-exporter.yaml

然后你应该在 prometheus 中看到你的指标。

【讨论】:

具有来自 Prometheus 的自定义指标的 Horizo​​ntal Pod Autoscaler 以及 CPU 使用率的百分位数

】具有来自Prometheus的自定义指标的Horizo​​ntalPodAutoscaler以及CPU使用率的百分位数【英文标题】:HorizontalPodAutoscalerwithcustommetricsfromPrometheuswithpercentilesforCPUusage【发布时间】:2020-01-1107:16:59【问题描述】:所以我想弄清楚如何从P... 查看详情

Prometheus 添加自定义指标

】Prometheus添加自定义指标【英文标题】:Prometheusaddcustommetrics【发布时间】:2020-02-2001:51:26【问题描述】:我们有一个Prometheus在我们的集群中运行,我们可以使用grafana来查看我们的集群/pods指标,现在我想添加一些自定义指标... 查看详情

如何使用 JSON 格式获取 Prometheus 节点导出器指标

】如何使用JSON格式获取Prometheus节点导出器指标【英文标题】:HowtogetPrometheusNodeExportermetricswithJSONformat【发布时间】:2020-04-0516:42:09【问题描述】:我在k8s上部署了PrometheusNodeExporterpod。效果很好。但是当我尝试通过在我的自定义... 查看详情

具有自定义指标的 HPA

...应用程序抓取特定指标并将其导出到堆栈驱动程序。使用prometheus-to-sd边车。该指标在堆栈驱动程序中显示为custom.googleapis.com/dummy/foo现在,通常 查看详情

使用 Prometheus 适配器的 Horizo​​ntal Pod Autoscaler (HPA) 自定义指标(单位是如何定义的?)

】使用Prometheus适配器的Horizo​​ntalPodAutoscaler(HPA)自定义指标(单位是如何定义的?)【英文标题】:HorizontalPodAutoscaler(HPA)custommetricswithPrometheusAdapter(Howareunitsdefined?)【发布时间】:2021-12-1911:26:54【问题描述】:我正在使用来自... 查看详情

Actuator Prometheus 的自定义指标

】ActuatorPrometheus的自定义指标【英文标题】:CustomMetricsforActuatorPrometheus【发布时间】:2018-10-2814:21:57【问题描述】:我已经激活了弹簧执行器prometheusendpont/actuator/prometheus。通过添加千分尺和执行器的依赖项并启用prometheus端点。... 查看详情

prometheus自定义metrics

...行指标通常需要项目提供一系列指标信息,我们目前用的prometheus,而项目当然要提供一系列prometheusmetrics指标信息,但是默认官方golang的仓库不是很好用。于是乎找到github上一个很好的项目,可以满足上面所有需求可以大多数一... 查看详情

从自定义 K8s prometheus 导出器中删除默认变量

】从自定义K8sprometheus导出器中删除默认变量【英文标题】:RemovedefaultvarsfromcustomK8sprometheusexporter【发布时间】:2020-12-1004:06:36【问题描述】:我开始使用自定义导出器(使用kubernetes、grafana和prometheus),但遇到了问题。我设法... 查看详情

关于 Nan 值的 Prometheus 警报

】关于Nan值的Prometheus警报【英文标题】:PrometheusalertonNanvalues【发布时间】:2020-02-1023:19:25【问题描述】:所以我使用节点导出器的文本文件收集器创建了一个自定义指标,它检查数据库的大小,如果找不到当天的数据库备份,... 查看详情

使用 Flask 的 prometheus_client 自定义指标

】使用Flask的prometheus_client自定义指标【英文标题】:prometheus_clientcustommetricswithFlask【发布时间】:2021-01-0601:46:32【问题描述】:我正在尝试通过Flask为自定义Prometheus指标提供服务。看着https://github.com/prometheus/client_python,我的代... 查看详情

为啥 Prometheus 不会在不可见的指标上引发错误?

】为啥Prometheus不会在不可见的指标上引发错误?【英文标题】:WhyPrometheusdoesnotraiseerroroninvisiblemetric?为什么Prometheus不会在不可见的指标上引发错误?【发布时间】:2021-12-1421:36:45【问题描述】:我们有一个自定义指标,仅在应... 查看详情

Prometheus 无法从自定义 Rest Endpoint 读取指标

】Prometheus无法从自定义RestEndpoint读取指标【英文标题】:PromotheusnotabletoreadmetricsfromcustomRestEndpoint【发布时间】:2021-06-0822:07:49【问题描述】:我正在尝试让Promotheus获取通过自定义SpringBoot端点公开的指标。我在文件中有指标#HELP... 查看详情

k8s 上的 Prometheus 自定义指标服务发现

】k8s上的Prometheus自定义指标服务发现【英文标题】:Prometheuscustommetricservicediscoveryonk8s【发布时间】:2021-10-1117:43:43【问题描述】:我正在尝试通过将http“metrics”服务(与我的主要服务在同一个pod上运行)公开为k8s端点来向Prome... 查看详情

prometheus使用三(自定义监控指标实现)

  prometheus提供了了系列的export帮助采集各种容器和中间件的运行指标,但有时我们还需要更灵活的监控指标,介绍一下自定义    本文用来监控dubbo的服务提供者的被调用指标,包括调用次数,p99等。  &nb... 查看详情

无法从 prometheus-adapter 检索自定义指标

】无法从prometheus-adapter检索自定义指标【英文标题】:Unabletoretrievecustommetricsfromprometheus-adapter【发布时间】:2020-08-2704:21:00【问题描述】:我正在尝试使用HPA+自定义指标扩展在我的树莓派kubernetes集群上运行的一个应用程序pod,... 查看详情

使用 Prometheus Operator 监控自定义 kubernetes pod 指标

】使用PrometheusOperator监控自定义kubernetespod指标【英文标题】:MonitorcustomkubernetespodmetricsusingPrometheusOperator【发布时间】:2021-02-1201:28:28【问题描述】:我有一个现成的Kubernetes集群,配置了grafana+prometheus(operator)监控。我使用我的... 查看详情

使用一些指标导出器 + Prometheus + Grafana 监控日志文件

】使用一些指标导出器+Prometheus+Grafana监控日志文件【英文标题】:Monitoringlogfilesusingsomemetricsexporter+Prometheus+Grafana【发布时间】:2017-04-3020:41:51【问题描述】:我需要监控非常不同的日志文件中的错误、成功状态等。我需要使用P... 查看详情

springboot使用prometheus采集自定义指标数据(代码片段)

        我们在k8s集群成功搭建了Prometheus服务。今天,我们将在springboot2.x中使用prometheus记录指标。一、我们需要什么指标        对于DDD、TDD等,大家比较熟悉了,但是对于MDD可能就比较陌生了。MDD是Metrics-Dr... 查看详情