普罗米修斯不刮另外的碎片

时间:2019-12-11 15:56:59

标签: kubernetes prometheus prometheus-operator

我正在使用稳定/ prometheus-operator图表部署Prometheus。它安装在monitoring命名空间中。在default命名空间中,我有一个运行着名为my-pod的Pod,带有三个副本。此pod在端口9009上吐出指标(我已经通过执行k端口转发并验证了localhost:9009中显示的指标来对此进行验证)。我希望prometheus-operator能够抓取这些指标。所以我将以下配置添加到values.yaml

prometheus:
  prometheusSpec:
    additionalScrapeConfigs:
    - job_name: 'my-pod-job'
      scrape_interval: 15s
      kubernetes_sd_configs:
      - role: pod
        namespaces:
          names:
          - default
      relabel_configs:
      - source_labels: [__meta_kubernetes_pod_name]
        action: keep   
        regex: 'my-pod'  

然后我使用以下命令安装prometheus:

helm upgrade --install prometheus stable/prometheus-operator \
--set kubeEtcd.enabled=false \
--set kubeControllerManager.enabled=false \
--set kubeScheduler.enabled=false \
--set prometheusOperator.createCustomResource=true \
--set grafana.smtp.existingSecret=smtp-secret \
--set kubelet.serviceMonitor.https=true \
--set kubelet.enabled=true \
-f values.yaml --namespace monitoring

但是,当我转到/service-discover时,看到

my-pod-job (0/40 active targets)

问题

如何配置prometheus,以使其从默认名称空间中运行的pod抓取指标并在端口9009上吐出指标?

2 个答案:

答案 0 :(得分:0)

要告诉普罗米修斯刮豆荚,请添加以下注释:

...
  template:
    metadata:
      annotations:
        prometheus.io/scrape: 'true'
        prometheus.io/port: '9009'

答案 1 :(得分:0)

正如@gears所提到的,如果您要从特定的pod或服务中刮取指标,则必须对它应用prometheus刮擦注释。例如:

...
spec:
  replicas: 1
  template:
    metadata:
      annotations:
        prometheus.io/path: <path_to_scrape>
        prometheus.io/port: "80"
        prometheus.io/scrape: "true"
...

但是,如前所述:

  

prometheus运算符不支持基于注释的发现   服务,使用   serviceMonitor   CRD取代了它,因为它提供了更多的配置选项。

现在,如果我正确理解了ServiceMonitor对象,则应在应用程序所在的同一个命名空间中创建该对象。您需要确保serviceMonitorNamespaceSelector选择该命名空间和Prometheus服务器具有访问该命名空间中的Service / Endpoints / Pod对象的适当权限。

请让我知道是否有帮助。