Helm Prometheus-operator无法从api获取自定义指标

时间:2020-04-12 12:44:49

标签: kubernetes prometheus kubernetes-helm prometheus-operator

我正在使用头盔prometheus-operator图表:https://github.com/helm/charts/blob/master/stable/prometheus-operator/values.yaml,我希望它可以像以前一样通过“硬编码”服务的名称和端口中的端口来从golang api获取自定义指标。 values.yml文件:

 scrape_configs:
    - job_name: 'custom-api'
      static_configs:
        - targets: ['custom-api-service.backend.svc.cluster.local:8000']

但是,随着我拥有更多的微服务,我知道也可以使用_meta标签动态地完成它。例: __meta_kubernetes_service_name

但是,我还没有弄清楚我应该从values.yaml文件中进行哪些修改以使其正常工作。

Grafana正在从custom-api获取我的CPU和内存使用率,但是custom-api没有出现在Prometheus仪表板的targets选项卡中,这很奇怪...

这些是我的服务

apiVersion: v1
kind: Service
metadata:
  name: custom-api-service
  namespace: backend
  labels:
    service: custom-api-service
spec:
  type: NodePort
  ports:
    - port: 8000
      targetPort: 8000
      nodePort: 30080
      protocol: TCP
      name: custom-api
  selector:
    component: goapi

---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: servicemonitor
  namespace: backend
  labels:
    service: servicemonitor
spec:
  selector:
    matchLabels:
      service: custom-api-service
  endpoints:
  - port: custom-api

2 个答案:

答案 0 :(得分:1)

您将必须创建一个Service monitor CRD才能抓取指标。

假设您有一个k8s服务(此处为example-app),该服务用于与您的微服务通信。确保您的微服务在某个端口公开了Prometheus指标,并且k8s服务也包括该端口(此处为prom)。

kind: Service
apiVersion: v1
metadata:
  name: example-app
  labels:
    app: example-app
spec:
  selector:
    app: example-app
  ports:
  - name: prom
    port: 8080
  - name: other-port
    port: xxxx

此Service对象由ServiceMonitor发现,后者以相同的方式进行选择。您需要确保serviceMonitor对象的matchLabels与服务的metadata.labels匹配。

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: example-app
  labels:
    team: frontend
spec:
  selector:
    matchLabels:
      app: example-app
  endpoints:
  - port: prom

一旦创建了serviceMonitor对象,操作员控制器将为您完成其余工作(即更新Prometheus配置)。您还可以通过serviceMonitor对象提供自定义配置。

有关更多详细信息,请访问Getting started with Prometheus operatorservice monitor

答案 1 :(得分:1)

$cat资源包括一个名为Architecture & Design的字段,该字段定义了要使用的$cat = 'sound'; Array ( [Architecture & Design] => Array ( [0] => architecture [1] => fashion [2] => game [3] => graphic [4] => interior [5] => industrial [6] => textile [7] => web [8] => ui [9] => sound ) [Test array] => Array ( [0] => item1 [1] => item2 [2] => item3 [3] => item4 [4] => item5 [5] => item6 [6] => item7 [7] => item8 [8] => item9 [9] => item0 ) ) 的选择。默认情况下,在版本v0.19.0之前,Prometheus必须安装在与Prometheus实例相同的名称空间中。使用Prometheus Operator v0.19.0及更高版本,可以通过serviceMonitorSelector资源的ServiceMonitors字段在Prometheus命名空间之外选择ServiceMonitors

在监视名称空间中,创建一个ServiceMonitors对象,该对象通过标签serviceMonitorNamespaceSelector选择Prometheus

Prometheus

您可以在ServiceMonitor命名空间中以service: servicemonitor的形式找到apiVersion: monitoring.coreos.com/v1 kind: Prometheus metadata: name: prometheus spec: serviceAccountName: <service-account-name> serviceMonitorSelector: matchLabels: service: servicemonitor resources: requests: memory: 400Mi enableAdminAPI: false