在集群环境中访问 c​​advisor 的正确方法

Posted

技术标签:

【中文标题】在集群环境中访问 c​​advisor 的正确方法【英文标题】:Right way to access cadvisor in a swarm environment 【发布时间】:2019-04-29 02:07:12 【问题描述】:

我有一个有两个节点的 Swarm,我正在运行 cadvisor 作为一项全球服务。我得到了指标,grafana/Promethues 可以抓取它们。但是我的数字是错误的。当我使用 docker 命令行工具检查容器数量时,我看到第一个节点上运行了 17 个容器,第二个节点上运行了 14 个容器。然而,Prometheus/grafana 会告诉我,我有 34 个容器,两个节点上的容器数量都是 17。

我认为我的问题来自将 cadvisor 定义在与 prometheus 和 grafana 容器不同的堆栈中,并尝试通过服务 API 访问 cadvisor。

在堆栈 A 我有

version: '3.6'

services:

  cadvisor:
    image: google/cadvisor
    deploy:
      mode: global
    ports:
      - "8888:8080"
    #privileged: true 
    #command: 
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:rw
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro    

然后在 prometheus.yml 配置中,我有以下抓取定义,其中 host1 和 host2 是节点的主机名。

  - job_name: 'cadvisor'
    scrape_interval: 20s
    static_configs:
      - targets: ['host1:8888','host2:8888']  

有没有人在具有多个节点的集群中使用 cadvisor 的工作示例,或者可以指出如何在 proemtheus 配置中为 cadvisor 定义目标?

【问题讨论】:

【参考方案1】:

也许有点晚了,但就是这样。 要执行“自动发现”方式,您可以使用类似的方法:

- job_name: 'cadvisor'
  dns_sd_configs:
   - names: ['tasks.cadvisor']
     type: 'A'
     port: 8080 # internal

在“tasks.cadvisor”中,点后面的名称必须与您在 docker compose 中或通过 docker service create 命令为服务指定的名称相匹配。

【讨论】:

这种自动发现是否可以像 Kubernetes 使用 CoreDNS 一样与集群中的 DNS 一起使用?

以上是关于在集群环境中访问 c​​advisor 的正确方法的主要内容,如果未能解决你的问题,请参考以下文章

cadvisor 与 Prometheus 集成

Spring Batch 在集群环境中正确重启未完成的作业

Oracle SQL 优化之sql tuning advisor (STA)

Oracle SQL 优化之sql tuning advisor (STA)

Intel Advisor:检查方法,包括所有子方法

安装程序未能初始化。可能是丢失文件所致。请下载adobe support advisor 检测问题