簡介
容器監控三劍客:cAdvisor監控收集 + InfluxDB存儲數據 + Grafana展示圖表
我們在主機上部署了很多個容器,要想監控它們該怎么辦,通常我們使用原生命令 Docker ps 或 docker stats 就可以查看到容器的狀態。
如下:
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2a10d91cae48 portainer/portainer-ce:2.11.1 "/portainer" 17 minutes ago Up 17 minutes 0.0.0.0:8000->8000/tcp, :::8000->8000/tcp, 0.0.0.0:9443->9443/tcp, :::9443->9443/tcp, 9000/tcp portainer
554e72db6ef0 billygoo/Tomcat8-jdk8 "catalina.sh run" 29 hours ago Up 59 seconds 0.0.0.0:8082->8080/tcp, :::8082->8080/tcp tomcat82
9e7e05d78b86 billygoo/tomcat8-jdk8 "catalina.sh run" 29 hours ago Up 57 seconds 0.0.0.0:8081->8080/tcp, :::8081->8080/tcp tomcat81
[root@localhost ~]# docker stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
2a10d91cae48 portainer 0.00% 17.2MiB / 1.777GiB 0.95% 2.52MB / 6.98MB 0B / 2.02MB 5
554e72db6ef0 tomcat82 0.17% 92.44MiB / 1.777GiB 5.08% 1.1kB / 0B 165MB / 0B 42
9e7e05d78b86 tomcat81 0.15% 88.45MiB / 1.777GiB 4.86% 836B / 0B 11.6MB / 0B 42
通過docker stats命令可以很方便的看到當前宿主機上所有容器的CPU,內存以及網絡流量等數據,一般小公司夠用了。。。。但是,docker stats統計結果只能是當前宿主機的全部容器,數據資料是實時的,沒有地方存儲、沒有健康指標過線預警等功能。
如何解決,那就要用到接下來所要講的方案:cAdvisor+InfluxDB+Grafana
是什么
容器監控三劍客:cAdvisor監控收集 + InfluxDB存儲數據 + Grafana展示圖表
cAdvisor
cAdvisor 是一個容器資源監控工具,包括容器的內存、CPU、網絡IO、磁盤IO等監控,同時提供了一個Web頁面用于查看容器的實時運行狀態。
cAdivisor 默認存儲2分鐘的數據,而且只是針對單物理機。不過,cAdivisor提供了很多數據集成接口,支持InfluxDB、redis、Kafka、Elasticsearch等集成,可以加上對應配置將監控數據發往這些數據庫存儲起來。
cAdvisor 功能主要有兩點:
- 展示Host和容器兩個層次的監控數據。
- 展示歷史變化數據。
InfluxDB
InfluxDB 使用Go語言編寫的一個開源分布式時許、時間和指標數據庫,無需外部依賴。
cAdvisor 默認旨在本機保存最近2分鐘的數據,為了持久化存儲數據和統一收集展示監控數據,需要將數據存儲到InfluxDB中。InfluxDB是一個時許數據庫,專門用于存儲時許相關數據,很適合存儲CADvisor的數據,而且,CAdvisor本身已經提供了InfluxDB的集成方法,啟動容器時指定配置即可。
InfluxDB主要功能:
- 基于時間序列,支持與時間有關的相關函數(如最大、最小、求和等);
- 可度量性:你可以實時對大量數據進行計算;
- 基于事件:它支持任意的事件數據。
Grafana
Grafana 是一個開源的數據監控分析可視化平臺,支持多種數據源配置(支持的數據源包括InfluxDB、MySQL、Elasticsearch、OpenTSDB、Graphite等)和豐富的插件及模塊功能,支持圖表權限控制和報警。
Grafana主要特性:
- 靈活豐富的圖形化選項;
- 可以混合多種風格;
- 支持白天和夜間模式;
- 多個數據源。
環境搭建
方式一:分別安裝
通常在進行監控的時候是需要一臺單獨機器作為監控主機的,這里我們創建一臺新的監控主機(192.168.92.148),在監控主機上部署InfluxDB+Grafana,然后在被監控主機(192.168.92.149)上部署cAdvisor
部署InfluxDB(監控主機)
這里預先定義了創建一個初始數據庫:
INFLUXDB_DB=cadvisor # 初始數據庫名稱
INFLUXDB_USER=root # 初始數據庫用戶名
INFLUXDB_USER_PASSword=root123456 # 初始數據庫密碼
docker run -d -p 8086:8086 --restart=always --name influxdb
-e INFLUXDB_DB=cadvisor
-e INFLUXDB_USER=root
-e INFLUXDB_USER_PASSWORD=root123456
-v influxdb_data:/var/lib/influxdb
influxdb:1.8
部署Grafana(監控主機)
docker run -d -p 3000:3000 --restart=always --name grafana
-v grafana_data:/var/lib/grafana
grafana/grafana
部署cAdvisor(被監控主機)
這里注意填入在部署influxdb時設置的數據庫、用戶名、密碼
-storage_driver_db=cadvisor # influxdb的數據庫名稱
-storage_driver_host=192.168.92.148:8086 # influxdb的主機地址
-storage_driver_user=root # influxdb的用戶名
-storage_driver_password=root123456 # influxdb的密碼
docker run -d -p 8080:8080 --restart=always --name cadvisor
-v /:/rootfs:ro
-v /var/run:/var/run:rw
-v /sys:/sys:ro
-v /var/lib/docker/:/var/lib/docker:ro
google/cadvisor
-storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_host=192.168.92.148:8086 -storage_driver_user=root -storage_driver_password=root123456
方式二:Compose容器編排一套帶走
如果你想將cAdvisor+InfluxDB+Grafana以及其他的容器都安裝到同一臺主機上,那使用這個compose一套帶走方案就可以了。
新建目錄
mkdir -p /data/cig
新建3件套組合的 docker-compose.yml 文件
cd /data/cig/
vim docker-compose.yml
文件內容如下:
version: '3.1'
services:
influxdb:
image: influxdb:1.8
restart: always
environment:
- INFLUXDB_DB=cadvisor
- INFLUXDB_USER=root
- INFLUXDB_USER_PASSWORD=root123456
ports:
- "8086:8086"
volumes:
- influxdb_data:/var/lib/influxdb
cadvisor:
image: google/cadvisor
depends_on:
- influxdb
command: -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_host=influxdb:8086 -storage_driver_user=root -storage_driver_password=root123456
restart: always
ports:
- "8080:8080"
volumes:
- /:/rootfs:ro
- /var/run:/var/run:rw
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
grafana:
user: "104"
image: grafana/grafana
restart: always
depends_on:
- influxdb
ports:
- "3000:3000"
volumes:
- grafana_data:/var/lib/grafana
volumes:
influxdb_data: {}
grafana_data: {}
檢查語法:
沒有輸出則正常。
docker-compose config -q
啟動:
docker-compose up -d
查看是否都啟動:
[root@localhost cig]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
06dffc78e480 grafana/grafana "/run.sh" 3 seconds ago Up 2 seconds 0.0.0.0:3000->3000/tcp, :::3000->3000/tcp cig_grafana_1
bdee27fbd3c8 google/cadvisor "/usr/bin/cadvisor -…" 3 seconds ago Up 2 seconds 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp cig_cadvisor_1
a328796c8d2a tutum/influxdb:0.9 "/run.sh" 4 seconds ago Up 3 seconds 0.0.0.0:8083->8083/tcp, :::8083->8083/tcp, 0.0.0.0:8086->8086/tcp, :::8086->8086/tcp cig_influxdb_1
訪問測試
1. 瀏覽CAdvisor收集服務:http://被監控主機的IP:8080/
2. 瀏覽Grafana展現服務:http://部署Grafana的主機IP:3000/
配置Grafana
添加數據源:
如果是使用 docker-compose 部署的,這里URL直接寫 http://influxdb:8086 即可;
如果是單獨安裝的,這里URL要寫 http://influxdb的主機IP:8086
滾動到下面,填寫部署influxdb時初始化的數據庫cadvisor、用戶名root、密碼root123456,點擊Save &Test.
添加 dashboard:
點擊右上角 Save 保存。
還可以點擊右上角添加新的圖表,監控其他項目,如:CPU、網絡、磁盤等,需要具體去看看查詢語法獲取正確的值制作圖表。