容器监控的方案有不少,有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的监控项配置不是本文的重点,就不在这里一一介绍其它监控项怎么玩了,你们若是感兴趣能够参考一些官方资料或者百度一些资料参阅,都是图形化的界面操做,多点、多玩、多测两个就搞明白了。
监控没有最好、最优的监控方案,须要根据企业环境的自身特色结合每一个监控产品的优点来达到监控的目的。一个企业完整的监控体系包括如下几个组成部分:
喜欢个人文章,请点击最上方右角处的《关注》支持一下!