cAdvisor(container Advisor 的縮寫)分析並公開來自執行中容器的資源使用率和效能資料。cAdvisor 開箱即用地公開 Prometheus 指標。在本指南中,我們將
首先,您需要設定 Prometheus 以從 cAdvisor 抓取指標。建立一個 prometheus.yml
檔案,並使用此設定填充它
scrape_configs:
- job_name: cadvisor
scrape_interval: 5s
static_configs:
- targets:
- cadvisor:8080
現在我們需要建立一個 Docker Compose 設定,指定哪些容器是我們安裝的一部分,以及每個容器公開哪些端口、使用哪些卷等等。
在您建立 prometheus.yml
檔案的同一個資料夾中,建立一個 docker-compose.yml
檔案,並使用此 Docker Compose 設定填充它
version: '3.2'
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
ports:
- 9090:9090
command:
- --config.file=/etc/prometheus/prometheus.yml
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
depends_on:
- cadvisor
cadvisor:
image: gcr.io/cadvisor/cadvisor:latest
container_name: cadvisor
ports:
- 8080:8080
volumes:
- /:/rootfs:ro
- /var/run:/var/run:rw
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
depends_on:
- redis
redis:
image: redis:latest
container_name: redis
ports:
- 6379:6379
此設定指示 Docker Compose 執行三項服務,每項服務都對應一個 Docker 容器
prometheus
服務使用本地 prometheus.yml
設定檔案(透過 volumes
參數匯入到容器中)。cadvisor
服務公開端口 8080(cAdvisor 指標的預設端口),並依賴於各種本地卷(/
、/var/run
等)。redis
服務是一個標準的 Redis 伺服器。cAdvisor 將自動從此容器收集容器指標,即無需任何進一步的設定。要執行安裝
docker-compose up
如果 Docker Compose 成功啟動所有三個容器,您應該看到類似這樣的輸出
prometheus | level=info ts=2018-07-12T22:02:40.5195272Z caller=main.go:500 msg="Server is ready to receive web requests."
您可以使用 ps
命令驗證所有三個容器是否正在執行
docker-compose ps
您的輸出將看起來像這樣
Name Command State Ports
----------------------------------------------------------------------------
cadvisor /usr/bin/cadvisor -logtostderr Up 8080/tcp
prometheus /bin/prometheus --config.f ... Up 0.0.0.0:9090->9090/tcp
redis docker-entrypoint.sh redis ... Up 0.0.0.0:6379->6379/tcp
您可以透過 http://localhost:8080
存取 cAdvisor Web UI。您可以在 http://localhost:8080/docker/<container>
中探索我們安裝中特定 Docker 容器的統計資訊和圖表。例如,Redis 容器的指標可以在 http://localhost:8080/docker/redis
存取,Prometheus 在 http://localhost:8080/docker/prometheus
存取,依此類推。
cAdvisor 的 Web UI 是一個有用的介面,用於探索 cAdvisor 監控的各種內容,但它不提供探索容器指標的介面。為此,我們需要 Prometheus 運算式瀏覽器,它位於 http://localhost:9090/graph
。您可以將 Prometheus 運算式輸入到運算式欄中,如下所示
讓我們從探索 container_start_time_seconds
指標開始,它記錄容器的啟動時間(以秒為單位)。您可以使用 name="<container_name>"
運算式按名稱選擇特定容器。容器名稱對應於 Docker Compose 設定中的 container_name
參數。例如,container_start_time_seconds{name="redis"}
運算式顯示 redis
容器的啟動時間。
下表列出了一些其他範例運算式
運算式 | 描述 | 適用於 |
---|---|---|
rate(container_cpu_usage_seconds_total{name="redis"}[1m]) |
過去一分鐘內 cgroup 的 CPU 使用率 | redis 容器 |
container_memory_usage_bytes{name="redis"} |
cgroup 的總記憶體使用量(以位元組為單位) | redis 容器 |
rate(container_network_transmit_bytes_total[1m]) |
過去一分鐘內,容器每秒透過網路傳輸的位元組數 | 所有容器 |
rate(container_network_receive_bytes_total[1m]) |
過去一分鐘內,容器每秒透過網路接收的位元組數 | 所有容器 |
在本指南中,我們在單個安裝中使用 Docker Compose 執行了三個獨立的容器:一個 Prometheus 容器從 cAdvisor 容器抓取指標,而 cAdvisor 容器又收集了由 Redis 容器產生的指標。然後,我們使用 Prometheus 運算式瀏覽器探索了一些 cAdvisor 容器指標。
此文件是開源的。請透過提交 issue 或 pull request 來幫助改進它。