kubernetes - 使用外部 Prometheus 抓取 CoreDNS 指标

标签 kubernetes prometheus flannel coredns

我有一个 kubernetes 集群(使用 Typhoon 模块构建)和一个位于不同 VPC 中的 Prometheus 实例(在 docker-compose 上运行,而不是在 Kubernetes 集群上运行)。我已启用 vpc 对等连接,并且所需端口已对此 vpc 打开。除 coredns pod 外,所有指标均按预期进行抓取。这里的问题是 coredns pod 分配了 10.2.. IP,这与我为要运行的 pod 配置的 IP 范围不同。

如果 coredns pod 获取 IP 172...*,我的 Prometheus 将能够解析它并且抓取将会成功。

现在,我不知道如何抓取这个指标。如果您知道我做错了什么,请告诉我。

$ kubectl get pods -n kube-system -o wide | grep coredns

coredns-7d8995c4cd-4l4ft                   1/1     Running   1          7d1h    10.2.5.2        ip-172-*-*-*   <none>           <none>
coredns-7d8995c4cd-vxd9d                   1/1     Running   1          6d3h    10.2.3.9        ip-172-*-*-*   <none>           <none>

Prometheus.yml 文件配置了以下作业。

  - job_name: 'kubernetes-service-endpoints'
    kubernetes_sd_configs:
      - role: endpoints
        api_server: https://kubernetes-cluster:6443
        tls_config:
          insecure_skip_verify: true
        bearer_token: "TOKEN"

    bearer_token: "TOKEN"

    honor_labels: true
    relabel_configs:
      - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape]
        action: keep
        regex: true
      - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scheme]
        action: replace
        target_label: __scheme__
        regex: (https?)
      - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_path]
        action: replace
        target_label: __metrics_path__
        regex: (.+)
      - source_labels: [__address__, __meta_kubernetes_service_annotation_prometheus_io_port]
        action: replace
        target_label: __address__
        regex: ([^:]+)(?::\d+)?;(\d+)
        replacement: $1:$2
      - action: labelmap
        regex: __meta_kubernetes_service_label_(.+)
      - source_labels: [__meta_kubernetes_namespace]
        action: replace
        target_label: namespace
      - source_labels: [__meta_kubernetes_pod_name]
        action: replace
        target_label: pod
      - source_labels: [__meta_kubernetes_service_name]
        action: replace
        target_label: job

    metric_relabel_configs:
      - source_labels: [__name__]
        action: drop
        regex: etcd_(debugging|disk|request|server).*

P.S:我使用 Flannel 作为我的网络 CNI,这样我就可以使用主机网络本身的 IP 创建 Pod。

更新信息: 我尝试在 kubernetes 上部署 prometheus,并尝试按照 Yaron 的建议将这些数据联合到我的 prometheus docker。

我正在尝试以下联合配置,但没有看到任何指标加载到我的目标普罗米修斯。

  - job_name: 'federate'
    scrape_interval: 10s

    honor_labels: true
    metrics_path: '/federate'

    params:
      'match[]':
        - '{job="prometheus"}'
        - '{job="kubernetes-nodes"}'
        - '{job="kubernetes-apiservers"}'
        - '{job="kubernetes-service-endpoints"}'
        - '{job="kubernetes-cadvisor"}'
        - '{job="kubelet"}'
        - '{job="etcd"}'
        - '{job="kubernetes-services"}'
        - '{job="kubernetes-pods"}'
    scheme: https
    static_configs:
    - targets:
      - prom.mycompany.com

最佳答案

解决此问题的最佳实践是在运行 Coredns 的集群内运行一个 prometheus 实例,并将该 prometheus 抓取的指标联合到使用 docker-compose 运行的外部 prometheus 中。

您可以阅读有关联邦的更多信息 here ,了解如何开始利用它。

更高级的用例是使用 Thanos 更好地在不同的 Prometheus 服务器之间分配查询,但要点仍然是在每个集群中运行内部 Prometheus 服务器。

关于kubernetes - 使用外部 Prometheus 抓取 CoreDNS 指标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64088375/

相关文章:

jdbc - 如何使用 Grafana 监控 JDBC 调用和统计信息

docker - Kubernetes ingress-nginx 从非默认命名空间调用服务

kubernetes - 没有找到匹配的 Helm 切片

kubernetes - 通过Kubernetes注释进行Traefik健康检查

grafana - Prometheus 查询 grafana 中的表

docker - minikube : not able to connect a locally deployed nginx service

Kubernetes ExternalName 服务无法解析

systemd - 在哪里可以找到 systemd 节点导出器指标列表?

centos - Kube-api 服务器没有出现在 Baremetal 上

kubernetes - kube-dns 获取 kube-proxy 无法列出 *core.Endpoints