Kubernetes 使用docker compose设置普罗米修斯,以获取现有库伯内特斯吊舱的指标

Kubernetes 使用docker compose设置普罗米修斯,以获取现有库伯内特斯吊舱的指标,kubernetes,prometheus,prometheus-node-exporter,Kubernetes,Prometheus,Prometheus Node Exporter,我有prometheus配置,它可以在terraform部署的集群上工作。现在,我想在本地(在地形之外)使用相同的Prometheus.yml设置Prometheus。我创建了一个新项目,使用docker compose设置Promethese,并使用同一个prometheus.yml文件,但当我访问prometheus站点时,kubernetes的指标似乎不可用,例如关于kubernetes容器的以下指标: 容器\u cpu\u使用量\u秒数\u总数 容器\u cpu\u负载\u平均\u 10

我有prometheus配置,它可以在terraform部署的集群上工作。现在,我想在本地(在地形之外)使用相同的Prometheus.yml设置Prometheus。我创建了一个新项目,使用docker compose设置Promethese,并使用同一个prometheus.yml文件,但当我访问prometheus站点时,kubernetes的指标似乎不可用,例如关于kubernetes容器的以下指标: 容器\u cpu\u使用量\u秒数\u总数 容器\u cpu\u负载\u平均\u 10s 容器\内存\使用量\字节 容器\u内存\u rss

你能让我知道我在这个项目中缺少了什么吗

这是普罗米修斯.yml

global:
  scrape_interval: 15s
scrape_configs:
- job_name: 'prometheus'
  static_configs:
  - targets: ['localhost:9090']
- job_name: 'kube-state-metrics'
  static_configs:
    - targets: ['10.36.1.10']
    - targets: ['10.36.2.6']
    - targets: ['10.36.1.12']
- job_name: 'kubernetes-pods'
  kubernetes_sd_configs:
  - api_server: https://10.36.1.10:6443
    role: node
    bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    tls_config:
      insecure_skip_verify: true
  - api_server: https://10.36.2.6:6443
    role: node
    bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    tls_config:
      insecure_skip_verify: true
  - api_server: https://10.36.1.12:6443
    role: node
    bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    tls_config:
      insecure_skip_verify: true
  - role: pod
  relabel_configs:
  - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
    action: keep
    regex: true
  - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
    action: replace
    target_label: __metrics_path__
    regex: (.+)
  - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
    action: replace
    regex: ([^:]+)(?::\d+)?;(\d+)
    replacement: $1:$2
    target_label: __address__
  - action: labelmap
    regex: __meta_kubernetes_pod_label_(.+)
  - source_labels: [__meta_kubernetes_namespace]
    action: replace
    target_label: kubernetes_namespace
  - source_labels: [__meta_kubernetes_pod_label_component]
    action: replace
    target_label: job
  - source_labels: [__meta_kubernetes_pod_name]
    action: replace
    target_label: kubernetes_pod_name

version: '3'

services:
  prometheus:
    image: prom/prometheus:v2.21.0
    ports:
      - 9000:9090
    volumes:
      - ./prometheus:/etc/prometheus
      - prometheus-data:/prometheus
    command: --web.enable-lifecycle  --config.file=/etc/prometheus/prometheus.yml

  grafana:
    image: grafana/grafana:$GRAFANA_VERSION
    environment:
      GF_SECURITY_ADMIN_USER: $GRAFANA_ADMIN_USER
      GF_SECURITY_ADMIN_PASSWORD: $GRAFANA_ADMIN_PASSWORD
    ports:
      - 3000:3000
    volumes:
      - grafana-storage:/var/lib/grafana
    depends_on:
      - prometheus
    networks:
      - internal

networks:
  internal:

volumes:
  prometheus-data:
  grafana-storage:
这是docker compose.yml

global:
  scrape_interval: 15s
scrape_configs:
- job_name: 'prometheus'
  static_configs:
  - targets: ['localhost:9090']
- job_name: 'kube-state-metrics'
  static_configs:
    - targets: ['10.36.1.10']
    - targets: ['10.36.2.6']
    - targets: ['10.36.1.12']
- job_name: 'kubernetes-pods'
  kubernetes_sd_configs:
  - api_server: https://10.36.1.10:6443
    role: node
    bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    tls_config:
      insecure_skip_verify: true
  - api_server: https://10.36.2.6:6443
    role: node
    bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    tls_config:
      insecure_skip_verify: true
  - api_server: https://10.36.1.12:6443
    role: node
    bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    tls_config:
      insecure_skip_verify: true
  - role: pod
  relabel_configs:
  - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
    action: keep
    regex: true
  - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
    action: replace
    target_label: __metrics_path__
    regex: (.+)
  - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
    action: replace
    regex: ([^:]+)(?::\d+)?;(\d+)
    replacement: $1:$2
    target_label: __address__
  - action: labelmap
    regex: __meta_kubernetes_pod_label_(.+)
  - source_labels: [__meta_kubernetes_namespace]
    action: replace
    target_label: kubernetes_namespace
  - source_labels: [__meta_kubernetes_pod_label_component]
    action: replace
    target_label: job
  - source_labels: [__meta_kubernetes_pod_name]
    action: replace
    target_label: kubernetes_pod_name

version: '3'

services:
  prometheus:
    image: prom/prometheus:v2.21.0
    ports:
      - 9000:9090
    volumes:
      - ./prometheus:/etc/prometheus
      - prometheus-data:/prometheus
    command: --web.enable-lifecycle  --config.file=/etc/prometheus/prometheus.yml

  grafana:
    image: grafana/grafana:$GRAFANA_VERSION
    environment:
      GF_SECURITY_ADMIN_USER: $GRAFANA_ADMIN_USER
      GF_SECURITY_ADMIN_PASSWORD: $GRAFANA_ADMIN_PASSWORD
    ports:
      - 3000:3000
    volumes:
      - grafana-storage:/var/lib/grafana
    depends_on:
      - prometheus
    networks:
      - internal

networks:
  internal:

volumes:
  prometheus-data:
  grafana-storage:


您正在本地和服务器级别运行Prometheus

服务器1工作正常,并获得Kubernetes容器的度量,因为它在Kubernetes上

docker compose时,由于您在docker而不是kubernetes集群上本地运行它,所以它无法工作

这是你的普罗米修斯没有得到你的库伯内特斯星群的指标的问题

例如,您正在本地运行Prometheus,但要监视外部Kubernetes集群,您必须使用IP公开您的Kube状态度量

在这种情况下,您的普罗米修斯配置将具有类似于

scrape_configs:
  - job_name: 'kube-state-metrics'
    static_configs:
      - targets: ['address'] //address of the k8s service IP
在你的情况下,你必须像

kubernetes_sd_configs:
- api_server: https://<ip>:6443
  role: node
  bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
  tls_config:
    insecure_skip_verify: true
kubernetes\u sd\u配置:
-api_服务器:https://:6443
角色:节点
承载令牌文件:/var/run/secrets/kubernetes.io/servicecomport/token
tls_配置:
不安全\u跳过\u验证:真
这将获取kubernetes集群的度量,您可以在本地查看数据


您可以阅读这篇精彩的文章:

非常感谢@Harsh Manvar我会尝试一下的好的,如果您遇到任何问题,请告诉我。Hello@Harsh Manvar我按照建议更改了配置,我使用命令
kubectl get pod-o wide
检查k8s服务的IP地址,这就是我得到的,因此,我在
scrape\u configs
下添加了:``-job\u name:'kube state metrics'static\u configs:['10.36.1.10']-targets:['10.36.2.6']-targets:['10.36.1.12']`并且可以收集节点导出器度量,通常在端口9142上查询每个节点。这些与Kubernetes API无关。您可以使用scrape_配置。或者kubernetes_sd_发现,如果有指向节点导出器的服务。如果您不熟悉普罗米修斯和库伯内特斯(有一些东西需要收集,…),那么在库伯内特斯部署普罗米修斯操作员可能会更容易,然后将这些指标联合到基于docker compose的Prometheus部署中。@Harsh Manvar很抱歉,我还没有时间在docker compose上的Prometheus本地上尝试此配置,因为我已经通过Terraform/Helm部署了Prometheus,它似乎对Kubernetes有效,但configMap存在一些问题(正如您在另一个线程中回答的,谢谢)。我对你的答复投了赞成票。