1

我正在使用 stable/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 上吐出指标?

4

2 回答 2

3

要告诉 prometheus 抓取 pod,请添加以下注释:

...
  template:
    metadata:
      annotations:
        prometheus.io/scrape: 'true'
        prometheus.io/port: '9009'
于 2019-12-11T18:34:58.620 回答
1

正如@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 对象的适当权限那个命名空间。

请让我知道这是否有帮助。

于 2019-12-17T12:37:57.667 回答