【问题标题】:Set up Prometheus with docker-compose to get metrics of existing Kubernetes pods使用 docker-compose 设置 Prometheus 以获取现有 Kubernetes pod 的指标
【发布时间】:2021-05-05 11:23:12
【问题描述】:

我有 prometheus 配置,可以在 terraform 部署的集群上运行。现在,我想在本地(在 terraform 之外)使用相同的 prometheus.yml 设置 Prometheus。我创建了一个新项目来使用 docker-compose 设置 Promethese 并使用相同的 prometheus.yml 文件,但是当我访问 prometheus 站点时,似乎 kubernetes 的指标不可用,例如关于 kubernetes 容器的这些指标: container_cpu_usage_seconds_total container_cpu_load_average_10s container_memory_usage_bytes container_memory_rss

您能否告诉我我的项目中缺少什么来完成这项工作?

这是prometheus.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

还有,这是docker-compose.yml

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:

【问题讨论】:

    标签: kubernetes prometheus prometheus-node-exporter


    【解决方案1】:

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

    服务器 1 工作正常并获取 Kubernetes 容器的指标,就像它在 kubernetes 上一样。

    而 docker-compose 一个由于您在 docker 上本地而不是在 kubernetes 集群上运行而无法工作。

    问题在于您的 Prometheus 的 Target 没有获得您的 Kubernetes 集群的指标。

    例如,您在本地运行 Prometheus,但想要监控外部 Kubernetes 集群,您必须公开您的 Kube-state-metrics 使用IP的服务。

    在这种情况下,您的 Prometheus 配置将具有类似的工作

    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 集群的指标,您可以在本地查看数据。

    你可以阅读这个不错的要点:https://gist.github.com/sacreman/b61266d2ec52cf3a1af7c278d9d93450

    【讨论】:

    • 非常感谢@Harsh Manvar 我会试试这个
    • 您好@Harsh Manvar 我按照建议更改了配置,我使用命令kubectl get pod -o wide 检查了k8s 服务的IP 地址,这就是我得到的k8sIP,所以我在scrape_configs 下添加: ``` - job_name: 'kube-state-metrics' static_configs: - 目标:['10.36.1.10'] - 目标:['10.36.2.6'] - 目标:['10.36.1.12'] ``` 和
    • 还有kubernetes_sd_configs: ``` - api_server: 10.36.1.10:6443 角色: node bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token tls_config: insecure_skip_verify: true - api_server :10.36.2.6:6443 角色:节点承载令牌文件:/var/run/secrets/kubernetes.io/serviceaccount/token tls_config:insecure_skip_verify:true - api_server:10.36.1.12:6443 角色:节点承载令牌文件:/var/run/secrets/kubernetes.io/服务帐户/令牌 tls_config: insecure_skip_verify: true ```
    • 可以收集 node_exporter 指标,查询每个节点,通常在端口 9142 上。这些与 Kubernetes API 无关。您可以使用 scrape_config。或者 kubernetes_sd_discovery,如果有一个服务指向你的 node_exporters。如果您不熟悉 Prometheus 和 Kubernetes(有一些东西要收集,...),在 Kubernetes 中使用一些 prometheus-operator 部署可能会更容易,然后将这些指标联合到基于 docker-compose 的 Prometheus 部署中.
    • @Harsh Manvar 抱歉,我还没有时间在 docker-compose 上的本地 Prometheus 上尝试此配置,因为我有由 Terraform/Helm 部署的 Prometheus,这似乎适用于 Kubernetes,但有些问题configMap (正如您在另一个线程中回答的那样,谢谢)。我赞成你的回复。
    猜你喜欢
    • 2023-02-02
    • 2020-02-05
    • 2019-05-20
    • 1970-01-01
    • 2021-02-12
    • 1970-01-01
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    相关资源
    最近更新 更多