根据Pod标签动态更新Prometheus抓取配置

时间:2020-09-21 11:40:32

标签: kubernetes prometheus prometheus-operator

我正在尝试加强监控,并希望扩大从我们的Kube资产中提取到Prometheus中的指标数量。我们已经有一个独立的Prom实现,该实现具有一个硬编码的配置文件,用于监视一些裸机服务器,并且可以通过cadvisor来获取通用的Pod指标。

我想做的是配置Kube来监视部署在群集中的Web服务器的apache_exporter指标,还可以在实例扩展时动态添加第二,第三等Web服务器。

我看过kube-prometheus项目,但这似乎更适合没有部署既定Prometheus的实例。是否有一种简单的方法来使Prometheus刮擦Kube API或etcd来提取与特定条件匹配的Pod的当前列表(即,像deploymentType=webserver这样的标记)并刮擦这些Pod的apache_exporter指标,并且刮取mysqld_exporter指标,其中deploymentType=mysql

1 个答案:

答案 0 :(得分:0)

有一个名为kube-prometheus-stack(以前是prometheus-operator)的项目:https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack

它具有称为ServiceMonitorPodMonitor的概念:

基本上,这是一个选择器,它将您的Prometheus实例指向抓取目标。对于服务选择器,它将发现服务后面的所有Pod。对于Pod选择器,它将直接发现Pod。在这两种情况下,Prometheus scrape配置都会自动更新并重新加载。

示例PodMonitor

apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
  name: example
  namespace: monitoring
spec:
  podMetricsEndpoints:
  - interval: 30s
    path: /metrics
    port: http
  namespaceSelector:
    matchNames:
    - app
  selector:
    matchLabels:
      app.kubernetes.io/name: my-app

请注意,此PodMonitor对象本身必须由控制器发现。为此,您可以编写一个PodMonitorSelectorlink)。这种额外的显式链接是有意完成的-通过这种方式,如果您的群集上有2个Prometheus实例(例如InfraProduct),则可以将哪个Prometheus分离到哪个Pods中去。 / p>

ServiceMonitor也是如此。