容器監控的方案有不少,有docker自身的docker stats命令、有Scout、有Data Dog等等,本文主要和你們分享一下比較經典的容器開源監控方案組合:cAdvisor+InfluxDB+Grafan。docker
cAdvisor:用於數據採集
InfluxDB:用於數據存儲
Grafana: 用於數據展現數據庫
它是Google用來監測單節點的資源信息的監控工具。Cadvisor提供了一目瞭然的單節點多容器的資源監控功能。Google的Kubernetes中也缺省地將其做爲單節點的資源監控工具,各個節點缺省會被安裝上Cadvisor。總結起來主要兩點:安全
- 展現 Host 和容器兩個層次的監控數據。
- 展現歷史變化數據。
因爲 cAdvisor 提供的操做界面略顯簡陋,並且須要在不一樣頁面之間跳轉,而且只能監控一個 host,這難免會讓人質疑它的實用性。但 cAdvisor 的一個亮點是它能夠將監控到的數據導出給第三方工具,由這些工具進一步加工處理。網絡
咱們能夠把 cAdvisor 定位爲一個監控數據收集器,收集和導出數據是它的強項,而非展現數據。tcp
InfluxDB 是用Go語言編寫的一個開源分佈式時序、事件和指標數據庫,無需外部依賴。相似的數據庫有Elasticsearch、Graphite等。編輯器
InfluxDB主要特點功能分佈式
InfluxDB主要特色ide
Grafana是一個可視化面板(Dashboard),有着很是漂亮的圖表和佈局展現,功能齊全的度量儀表盤和圖形編輯器,支持Graphite、zabbix、InfluxDB、Prometheus和OpenTSDB做爲數據源。Grafana主要特性:靈活豐富的圖形化選項;能夠混合多種風格;支持白天和夜間模式;多個數據源。函數
前面也說過了,你能夠不用建立自定網絡,做者只是爲了把後期建立的cAdvisor+InfluxDB+Grafana這三個容器都加入本身定義的網絡便於理解和管理,因此才新建一個自定義網絡:工具
[root@ganbing ~]# docker network create monitor cc193568263604e3bc3e7a5d78f18d07af99810e1d5c19bac99fccfa045f48f5
啓動容器,tutum/influxdb這裏沒有指定版本,默認會pull最新版本的influxdb:
[root@ganbing ~]# docker run -d --name influxdb --net monitor -p 8083:8083 -p 8086:8086 tutum/influxdb
參數說明:
-d :後臺運行此容器;
--name :啓運容器分配名字influxdb;
--net : 把容器加入到新的網絡monitor;
-p :映射端口,8083端口爲infuxdb後臺控制端口,8086端口是infuxdb的數據端口;
tutum/influxdb:經過這個容器來運行的,默認會在docker官方倉庫pull下來;
查看influxdb容器是否啓動:
[root@ganbing ~]# docker ps -l CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 30b9789e680d tutum/influxdb "/run.sh" 22 seconds ago Up 21 seconds 0.0.0.0:8083->8083/tcp, 0.0.0.0:8086->8086/tcp influxdb
從上圖能夠看到,在Query Templates選項中提供了經常使用的操做模板,可根據這些模版來管理influxdb,下面咱們就來建立數據庫和數據庫用戶。
CREATE USER "root" WITH PASSWORD '123456' WITH ALL PRIVILEGES
CREATE DATABASE "cadvisor"
運行cadvisor容器:
$docker run -d \ --name=cadvisor \ --net monitor \ -p 8080:8080 \ --mount type=bind,src=/,dst=/rootfs,ro \ --mount type=bind,src=/var/run,dst=/var/run \ --mount type=bind,src=/sys,dst=/sys,ro \ --mount type=bind,src=/var/lib/docker/,dst=/var/lib/docker,ro \ google/cadvisor \ -storage_driver=influxdb \ -storage_driver_db=cadvisor \ -storage_driver_host=influxdb:8086
參數說明:
-d :後臺運行此容器;
--name :啓運容器分配名字cadvisor;
--net : 把容器加入到新的網絡monitor;
-p :映射端口8080;
--mout:把宿主機的相文目錄綁定到容器中,這些目錄都是cadvisor須要採集的目錄文件和監控內容;
-storage_driver:須要指定cadvisor的存儲驅動、數據庫主機、數據庫名;
google/cadvisor:經過cadvisor這個鏡像來運行容器,默認會在docker官方倉庫把鏡像pull下來;
查看cadvisor容器:
[root@ganbing ~]# docker ps -l CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 90871ba5be7e google/cadvisor "/usr/bin/cadvisor -…" 51 seconds ago Up 50 seconds 0.0.0.0:8080->8080/tcp cadvisor
運行granafa容器:
[root@ganbing ~]# docker run -d --name grafana --net monitor -p 3000:3000 grafana/grafana
這裏的參數比較簡單,跟上面都差很少,不作詳細解釋。
查看運行結果:
[root@ganbing ~]# docker ps -l CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a90e03e2017a grafana/grafana "/run.sh" 17 seconds ago Up 16 seconds 0.0.0.0:3000->3000/tcp grafana
訪問granfa,經過ip+3000端口的方式訪問,默認帳戶密碼(admin/admin):
新建New dashboard,以下圖:
到這裏cAdvisor+InfluxDB+Grafana容器監控系統就部署完成了,至於其它grafana的監控項配置不是本文的重點,就不在這裏一一介紹其它監控項怎麼玩了,你們若是感興趣能夠參考一些官方資料或者百度一些資料參閱,都是圖形化的界面操做,多點、多玩、多測兩個就搞明白了。
監控沒有最好、最優的監控方案,須要根據企業環境的自身特色結合每一個監控產品的優點來達到監控的目的。一個企業完整的監控體系包括如下幾個組成部分:
喜歡個人文章,請點擊最上方右角處的《關注》支持一下!