通過cadvisor+influxdb+grafana三者有機結合,打造跨主機容器監控。
優點
1、跨主機監控,可擴展
2、容器自發現
3、歷史數據長期保存
4、自定義配置程度高
5、採集間隔很短,達到秒級
6、多種方式告警
缺點
1、不能自動隱藏已停止的容器
2、grafana會展現所有的數據,導致展示長時間的數據時,各個數據點重疊。
組件
數據採集–cAdvisor
cAdvisor爲Docker容器用戶提供了了解運行時容器資源使用和性能特徵的工具。
cAdvisor是單機版容器監控系統,通過收集宿主機的cgroup統計信息,經過加工處理後通過圖展示在頁面上。
這些信息包括宿主機、容器的CPU、內存、網絡流量、磁盤空間等資源隔離和運行數據。
工作流程大致:
1)、收集、聚集、處理宿主機的cgroup統計數據
2)、寫入後端基於事件序列的數據庫(本文使用InfluxDB)
3)、展示時讀取基於事件序列的數據庫
優勢:
部署、維護簡單:通過容器形式部署,“開箱即用”,無需配置即可使用
監控容器和宿主機
通過圖展示,比較美觀
支持多種基於事件序列的數據庫,寫入和讀取快
不足之處:
只能看到2-3分鐘的監控數據
消耗的內存較高,通常幾百M
頁面加載較慢
數據存儲–InfluxDB
InfluxDB是一個開源分佈式時序、事件和指標數據庫。
influxdb使用Go語言編寫,無需外部依賴。其設計目標是實現分佈式和水平伸縮擴展。
其主要特色功能
基於時間序列,支持與時間有關的相關函數(如最大,最小,求和等)
可度量性:可以實時對大量數據進行計算
基於事件:支持任意的事件數據
InfluxDB的主要特點
無結構(無模式):可以是任意數量的列
可拓展的
支持min, max, sum, count, mean, median 等一系列函數,方便統計
原生的HTTP支持,內置HTTP API
強大的類SQL語法
自帶管理界面,方便使用
在使用過程中發現influxdb缺點:
在select查詢時,字段必須是time或者value,不能爲其他字段
例如:select container_name from "cpu_usage_user" limit 100無結果
監控配置和展示–Grafana
Grafana是一款開源的監控繪圖工具。
對收集來的數據進行展示和分析。
特性:
用於可視化大型測量數據的開源程序,提供了強大和優雅的方式去創建、共享、瀏覽數據。
dashboard中展示不同metric數據源中的數據。
常用於因特網基礎設施和應用分析,但在其他領域也有機會用到,比如:工業傳感器、家庭自動化、過程控制等等。
有熱插拔控制面板和可擴展的數據源,目前已經支持Graphite、Cloudwatch、Prometheus、InfluxDB、Elasticsearch。
自定義配置靈活,支持模板、展示數據內容配置等等。
支持告警
部署
運行環境
宿主機:CentOS7 7.3.1611
docker版本爲1.12.6
通過docker容器方式部署。部署情況
cadvisor influxdb grafana
docker1 192.168.20.128 部署 部署 部署
docker2 192.168.20.129 部署 / /
docker3 192.168.20.130 部署 / /
influxdb
創建容器
docker create -p 8083:8083 -p 8086:8086 -v /opt/influxdb:/var/lib/influxdb --name=influxdb --hostname=influxdb tutum/influxdb
docker start influxdb
8086用於Influxdb數據讀寫,8083用於數據庫管理界面
InfluxDB容器創建成功後,可以通過http://192.168.20.128:8083/打開管理界面。
創建用戶
點擊頁面右上角的設置圖標,數據賬號和密碼,點擊save
創建數據庫
創建cadvisor數據庫,用於收集存儲Docker的性能數據,在輸入框輸入CREATE DATABASE “cadvisor”然後按回車,執行命令。
在輸入框輸入SHOW DATABASES,可以看到剛纔創建的數據庫
cadvisor
創建cAdvisor容器
docker run --volume=/:/rootfs:ro --volume=/var/run:/var/run:rw --volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker:ro --hostname=cadvisor --publish=8080:8080 --detach=true --name=cadvisor google/cadvisor -storage_driver=influxdb -storage_driver_host=192.168.20.128:8086 -storage_driver_db=cadvisor -storage_driver_user=root -storage_driver_password=1qaz2wsx
-storage_driver=influxdb 指定存儲驅動,使cadvisor將數據存儲到數據庫中,更多存儲插件
-storage_driver_host=influxdb:8086 InfluxDB數據庫的地址
-storage_driver_db=cadvisor 數據庫名稱
如果要指定用戶名可以用-storage_driver_user參數,默認是root
如果要指定密碼可以用-storage_driver_password參數,默認是root
cAdvisor運行以後,可以通過http://宿主機IP:8080/查看到Docker運行的機器和容器情況。
驗證cAdvisor是否已經向InfluxDB存入數據
打開http://192.168.20.128:8083/的InfluxDB管理界面
點擊右上角Database切換到cadvisor數據庫
然後在輸入框輸入SHOW MEASUREMENTS可以看到已經創建了很多個表
grafana
部署容器
docker create -p 3000:3000 --hostname grafana --name grafana grafana/grafana
默認admin的用戶名和密碼是admin/admin
配置
添加數據庫
配置模板