kubernetes - 根据 pod 标签动态更新 prometheus scrape 配置

标签 kubernetes prometheus prometheus-operator

我正在尝试加强我的监控,并希望扩大从我们的 Kube Assets 中提取到 Prometheus 的指标数量。我们已经有了一个独立的 Prom 实现,它有一个硬编码的配置文件来监控一些裸机服务器,并连接到 cadvisor 以获取通用 Pod 指标。
我想要做的是配置 Kube 以监控来自集群中部署的网络服务器的 apache_exporter 指标,而且随着实例的扩大,动态添加第二、第三等网络服务器。
我查看了 kube-prometheus 项目,但这似乎更适合没有部署已建立的 Prometheus 的实例。有没有一种简单的方法可以让 prometheus 抓取 Kube API 或 etcd 以提取符合特定条件(即 deploymentType=webserver 之类的标签)的当前 Pod 列表并抓取这些 Pod 的 apache_exporter 指标,并抓取mysqld_exporter 指标,其中 deploymentType=mysql

最佳答案

有一个项目叫 kube-prometheus-stack (原 prometheus-operator ):https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack
它具有称为 ServiceMonitor 的概念。和 PodMonitor :

  • https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/design.md#servicemonitor
  • https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/design.md#podmonitor

  • 基本上,这是一个将 Prometheus 实例指向抓取目标的选择器。在服务选择器的情况下,它会发现服务背后的所有 pod。对于 pod 选择器,它直接发现 pod。在这两种情况下,Prometheus 抓取配置都会自动更新和重新加载。
    示例 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对象本身必须由 Controller 发现。为了达到这个目的,你写了一个 PodMonitorSelector (link)。这种额外的显式链接是有意完成的 - 通过这种方式,如果您的集群上有 2 个 Prometheus 实例(例如 InfraProduct ),您可以将哪些 Prometheus 将哪些 Pod 分配到其抓取配置中。
    这同样适用于 ServiceMonitor .

    关于kubernetes - 根据 pod 标签动态更新 prometheus scrape 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63991541/

    相关文章:

    caching - kubernetes nginx 入口 Controller /缓存静态 Assets

    go - 同一网络中的应用程序和服务器之间的通信

    go - Prometheus 添加自定义指标

    docker - 如何更改Prometheus监控的cadvisor和node-exporter中的端口号

    prometheus - 我们如何为 Prometheus 指标添加额外的标签?

    kubernetes - 如何使用配置文件使 Prometheus Alertmanager 静音?

    Kubernetes - 在预安装作业中使用 secret

    kubernetes - 我可以获得 storageclasses.storage.k8s.io 支持的访问模式吗?

    kubernetes - 仅监控一个命名空间指标 - Prometheus with Kubernetes

    spring-boot - Micrometer 与 Prometheus Pushgateway 不发送最近的指标