Docker进阶-容器监控cAdvisor+InfluxDB+Granfana
概述
前面文章介紹使用docker compose組合應用并利用scale快速對容器進行擴容。
由于docker compose啟動的服務都在同一臺宿主機上,對于一個宿主機上運行多個容器應用時,容器的運行情況如:CPU使用率、內存使用率、網絡狀態、磁盤空間等一系列隨時間變化的時序數據信息,都是需要去了解,因此監控是必須的。
容器監控方案選擇
對于容器的監控方案可謂多種多樣,本身自帶命令docker stats命令,Scout,Data Dog,Sysdig Cloud,Sensu Monitoring Framework,CAdvisor等。
通過docker stats命令可以很方便的看到當前宿主機上所有容器的CPU,內存以及網絡流量等數據。但是docker stats命令的缺點就是統計的只是當前宿主機的所有容器,而獲取的監控數據是實時的,沒有地方存儲,也沒有報警功能。
docker stats而Scout、Sysdig Cloud、Data Dog雖然都提供了較完善的服務,但是它們都是托管的服務而且都收費,Sensu Monitoring Framework集成度較高,也免費,但是部署過于復雜。綜合考慮,我們選擇了CAdvisor做容器監控工具。
CAdvisor谷歌出品,優點是開源產品,監控指標齊全,部署方便,而且有官方的docker鏡像。缺點是集成度不高,默認只在本地保存2分鐘數據。不過可以加上InfluxDB存儲數據,對接Grafana展示圖表,比較便利地搭建好了容器監控系統,數據收集和圖表展示效果良好,對系統性能也幾乎沒有什么影響。
CAdvisor
CAdvisor是一個容器資源監控工具,包括容器的內存,CPU,網絡IO,磁盤IO等監控,同時提供了一個WEB頁面用于查看容器的實時運行狀態。CAdvisor默認存儲2分鐘的數據,而且只是針對單物理機。不過,CAdvisor提供了很多數據集成接口,支持InfluxDB,Redis,Kafka,Elasticsearch等集成,可以加上對應配置將監控數據發往這些數據庫存儲起來。
CAdvisor功能主要有兩點:
- 展示Host和容器兩個層次的監控數據。
- 展示歷史變化數據。
InfluxDB
InfluxDB是用Go語言編寫的一個開源分布式時序、事件和指標數據庫,無需外部依賴。
前面說到,CAdvisor默認只在本機保存最近2分鐘的數據,為了持久化存儲數據和統一收集展示監控數據,需要將數據存儲到InfluxDB中。InfluxDB是一個時序數據庫,專門用于存儲時序相關數據,很適合存儲CAdvisor的數據。而且,CAdvisor本身已經提供了InfluxDB的集成方法,啟動容器時指定配置即可。
InfluxDB主要功能:
- 基于時間序列,支持與時間有關的相關函數(如最大、最小、求和等);
- 可度量性:你可以實時對大量數據進行計算;
- 基于事件:它支持任意的事件數據;
InfluxDB主要特點:
- 無結構(無模式);
- 可以是任意數量的列;
- 可拓展的;
- 支持min,max,sum,count,mean,median等一系列函數,方便統計;
- 原生的HTTP支持,內置HTTP API;
- 強大的類SQL語法;
- 自帶管理界面,方便使用
Granfana
Grafana是一個開源的數據監控分析可視化平臺,支持多種數據源配置(支持的數據源包括InfluxDB,MySQL,Elasticsearch,OpenTSDB,Graphite等)和豐富的插件及模板功能,支持圖表權限控制和報警。
Grafan主要特性:
- 靈活豐富的圖形化選項
- 可以混合多種風格
- 支持白天和夜間模式
- 多個數據源
CAdvisor+InfluxDB+Granfana
CAdvisor:負責收集容器的隨時間變化的數據
InfluxDB:負責存儲時序數據
Grafana:負責分析和展示時序數據
安裝部署
部署InfluxDB服務
docker run -d --name influxdb -p 8086:8086 \ -v /data/influxdb:/var/lib/influxdb \ --hostname=influxdb \ influxdb說明:
- --name:啟運容器分配名字influxdb
- -p:映射端口,8083端口為influxdb管理端口,8086端口是influxdb的數據端口
- -v:掛載數據 -d:后臺運行此容器
- influxdb:通過這個容器來運行的,默認會在docker官方倉庫pull下來
1、瀏覽器訪問influxdb的管理端,http://ip:8083
2、創建test的數據庫與root用戶,這個用于后期配granfa
docker exec it influxdb influxCREATE DATABASE "test" CREATE USER "root" WITH PASSWORD 'root' WITH ALL PRIVILEGES部署CAdvisor服務
谷歌的cadvisor可以用于收集Docker容器的時序信息,包括容器運行過程中的資源使用情況和性能數據。
docker run --volume=/:rootfs:ro --volume=/var/run:/var/run:ro\ --volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker:ro\ --volume=/dev/disk/:/dev/disk:ro --volume=/cgroup:/cgroup:ro \ --publish=8080:8080 --detach=true --privileged=true --name=cadvisor \ google/cadvisor:latest\ -storage_driver=influxdb-storage_driver_host=influxdb:8086\ -storage_driver_db=test-storage_driver_user=root\ -storage_driver_password=root說明:
- -d:后臺運行此容器
- --name:啟動容器分配名字cadvisor
- -p:映射端口8080
- --mount:把宿主機的相關目錄綁定到容器中,這些目錄都是cadvisor需要采集的目錄文件 和監控內容
- -storage_driver:需要指定cadvisor的存儲驅動、數據庫主機、數據庫名
通過ip:8080端口訪問測試一下
部署Granfana服務
grafana是一款開源的時序數據分析工具,而且界面專業簡單。
docker run -d -p 3000:3000 \ -v /data/grafana:/var/lib/grafana \ --link=influxdb:influxdb\ --name grafana grafana/grafana注意:如果使用-v把數據掛載出來會出現容器啟動失敗,錯誤為mkdir:cannot create directory '/var/lib/grafana/plugins':Permission denied,此時可以使用docker run --entrypoint "id" grafana/grafana得到uid,gid,groups(默認是472);
接著使用chown -R 472:472 /data/grafana/修改目錄權限就可以啟動成功。
通過ip:3000端口來訪問grafana的web服務,第一次訪問需要修改admin用戶密碼,默認用戶名/密碼為admin/admin
docker-compose快速部署
version: '3.1'volumes:grafana_data: {}services:influxdb:image: tutum/influxdb:0.9#image: tutum/influxdb#image: influxdbrestart: always#user: environment:- PRE_CREATE_DB=cadvisorports:- "8083:8083"- "8086:8086"expose:- "8090"- "8099"volumes:- ./data/influxdb:/datacadvisor:#image: google/cadvisor:v0.29.0image: google/cadvisorlinks:- influxdb:influxsrvcommand: -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_host=influxsrv:8086restart: alwaysports:- "8080:8080"volumes:- /:/rootfs:ro- /var/run:/var/run:rw- /sys:/sys:ro- /var/lib/docker/:/var/lib/docker:rografana:#image: grafana/grafana:2.6.0user: "104"image: grafana/grafanauser: "104"#user: "472"restart: alwayslinks:- influxdb:influxsrvports:- "3000:3000"volumes:- grafana_data:/var/lib/grafanaenvironment:- HTTP_USER=admin- HTTP_PASS=admin- INFLUXDB_HOST=influxsrv- INFLUXDB_PORT=8086- INFLUXDB_NAME=cadvisor- INFLUXDB_USER=root- INFLUXDB_PASS=root啟動docker-compose文件
docker-compose up查看三個服務容器是否啟動
瀏覽grafana服務,http://ip:3000
登陸grafana服務
瀏覽influxdb服務,http://ip:8083/
配置grafana工具
1、配置數據源
選擇influxdb數據源
具體配置如下
配置完成后,如下圖
2、配置面板
選擇面板類型
選擇圖形
配置查詢條件
配置完后,效果如下圖
grafana支持查詢條件,可以從influxdb中了解
瀏覽cAdvisor服務,http://ip:8080/
轉載于:https://www.cnblogs.com/loveyous/p/11381463.html
總結
以上是生活随笔為你收集整理的Docker进阶-容器监控cAdvisor+InfluxDB+Granfana的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 类型
- 下一篇: Groovy 1.5.7 出现java.