使用 prometheus 监控 docker - cpu 不同容器的用法看起来相同
Monitoring docker with prometheus - cpu usage looks the same for different containers
我的设置:
- 普罗米修斯服务器
- 2 个节点导出器
- Grafana
docker-compose.yml
version: '2'
services:
prometheus_srv:
build: ./prom_serv
image: prom/prometheus
container_name: prometheus_server
hostname: prometheus_server
prometheus_node:
image: prom/node-exporter
container_name: prom_node_exporter
hostname: prom_node_exporter
depends_on:
- prometheus_srv
prometheus_node2:
image: prom/node-exporter
container_name: prom_node_exporter2
hostname: prom_node_exporter2
depends_on:
- prometheus_node
grafana:
image: grafana/grafana
container_name: grafana_server
hostname: grafana_server
depends_on:
- prometheus_node2
Prometheus 服务器的 Dockerfile:
FROM prom/prometheus
ADD prometheus.yml /etc/prometheus/
prometheus.yml
# Load and evaluate rules in this file eve
scrape_configs:
# Scrape Prometheus itself
- job_name: 'prometheus'
scrape_interval: 10s
scrape_timeout: 10s
static_configs:
- targets: ['localhost:9090']
# Scrape the Node Exporter
- job_name: 'node'
scrape_interval: 10s
static_configs:
- targets: ['prom_node_exporter:9100']
# Scrape the Node Exporter2
- job_name: 'node2'
scrape_interval: 10s
static_configs:
- targets: ['prom_node_exporter2:9100']
将 Prometheus 数据源添加到 Grafana 后,我添加了一个新的仪表板,其中包含 2 个 CPU 使用情况图,每个节点导出器一个:
100 - (avg by (instance) (irate(node_cpu{job="node",mode="idle"}[5m])) * 100)
100 - (avg by (instance) (irate(node_cpu{job="node2",mode="idle"}[5m])) * 100)
并尝试为第一个节点导出器生成 CPU 尖峰,例如 this:
docker container exec -it prom_node_exporter sh
/ # dd if=/dev/zero of=/dev/null
我最后看到的是,这两个图看起来很相似:
我想 CPU 的使用率应该比使用命令的容器高得多。这里出了什么问题?有什么建议吗?
我假设您运行将所有容器安装在同一台主机上。节点导出器将导出主机信息——因此两个节点导出器将显示关于一台主机的相同信息。
要收集有关 CPU 容器使用情况的信息,请使用 cAdvisor:它将允许您收集每个容器的 CPU 使用情况。
您应该 运行 每个主机一个 cAdvisor 来收集有关主机上容器的信息,每个主机一个节点导出器来收集有关主机的信息。
我的设置:
- 普罗米修斯服务器
- 2 个节点导出器
- Grafana
docker-compose.yml
version: '2'
services:
prometheus_srv:
build: ./prom_serv
image: prom/prometheus
container_name: prometheus_server
hostname: prometheus_server
prometheus_node:
image: prom/node-exporter
container_name: prom_node_exporter
hostname: prom_node_exporter
depends_on:
- prometheus_srv
prometheus_node2:
image: prom/node-exporter
container_name: prom_node_exporter2
hostname: prom_node_exporter2
depends_on:
- prometheus_node
grafana:
image: grafana/grafana
container_name: grafana_server
hostname: grafana_server
depends_on:
- prometheus_node2
Prometheus 服务器的 Dockerfile:
FROM prom/prometheus
ADD prometheus.yml /etc/prometheus/
prometheus.yml
# Load and evaluate rules in this file eve
scrape_configs:
# Scrape Prometheus itself
- job_name: 'prometheus'
scrape_interval: 10s
scrape_timeout: 10s
static_configs:
- targets: ['localhost:9090']
# Scrape the Node Exporter
- job_name: 'node'
scrape_interval: 10s
static_configs:
- targets: ['prom_node_exporter:9100']
# Scrape the Node Exporter2
- job_name: 'node2'
scrape_interval: 10s
static_configs:
- targets: ['prom_node_exporter2:9100']
将 Prometheus 数据源添加到 Grafana 后,我添加了一个新的仪表板,其中包含 2 个 CPU 使用情况图,每个节点导出器一个:
100 - (avg by (instance) (irate(node_cpu{job="node",mode="idle"}[5m])) * 100)
100 - (avg by (instance) (irate(node_cpu{job="node2",mode="idle"}[5m])) * 100)
并尝试为第一个节点导出器生成 CPU 尖峰,例如 this:
docker container exec -it prom_node_exporter sh
/ # dd if=/dev/zero of=/dev/null
我最后看到的是,这两个图看起来很相似:
我想 CPU 的使用率应该比使用命令的容器高得多。这里出了什么问题?有什么建议吗?
我假设您运行将所有容器安装在同一台主机上。节点导出器将导出主机信息——因此两个节点导出器将显示关于一台主机的相同信息。
要收集有关 CPU 容器使用情况的信息,请使用 cAdvisor:它将允许您收集每个容器的 CPU 使用情况。
您应该 运行 每个主机一个 cAdvisor 来收集有关主机上容器的信息,每个主机一个节点导出器来收集有关主机的信息。