既然是对Docker的容器进行监控,我们就不自己单独搭建cAdvisor、InfluxDB、Grarana了,本文中这三个实例,主要以Docker容器方式运行。
本文中的案例会有四台机器,他们的Host和IP地址如下,四台机器的集群搭建可以参考<Centos7的安装、Docker1.12.3的安装,以及Docker Swarm集群的简单实例>
cAdvisor 为Docker容器用户提供了了解运行时容器资源使用和性能特征的工具。cAdvisor的容器抽象基于Google的lmctfy容器栈,因此原生支持Docker容器并能够“开箱即用”地支持其他的容器类型。cAdvisor部署为一个运行中的daemon,它会收集、聚集、处理并导出运行中容器的信息。这些信息能够包含容器级别的资源隔离参数、资源的历史使用状况、反映资源使用和网络统计数据完整历史状况的柱状图。
InfluxDB 是一个开源分布式时序、事件和指标数据库。使用 Go 语言编写,无需外部依赖。其设计目标是实现分布式和水平伸缩扩展。
其主要特色功能
-
基于时间序列,支持与时间有关的相关函数(如最大,最小,求和等)
-
可度量性:你可以实时对大量数据进行计算
-
基于事件:它支持任意的事件数据
InfluxDB的主要特点
-
无结构(无模式):可以是任意数量的列
-
可拓展的
-
支持min, max, sum, count, mean, median 等一系列函数,方便统计
-
原生的HTTP支持,内置HTTP API
-
强大的类SQL语法
-
自带管理界面,方便使用
Graphite 是一款开源的监控绘图工具。可以实时收集、存储、显示时间序列类型的数据(time series data),有些类似Kibana的东西。
以下是官方的说明
- 用于可视化大型测量数据的开源程序,他提供了强大和优雅的方式去创建、共享、浏览数据。dashboard中显示了你不同metric数据源中的数据。
- 常用于因特网基础设施和应用分析,但在其他领域也有机会用到,比如:工业传感器、家庭自动化、过程控制等等。
- 有热插拔控制面板和可扩展的数据源,目前已经支持Graphite、Cloudwatch、Prometheus、InfluxDB、Elasticsearch。
在以前, swarm集群需要一个额外的存储(consul, etcd etc). 来同步网络配置, 保证所有容器在同一个网段中. 在已经内置了这个存储, 集成了的支持。
下面我们创建一个名为logging的overlay网络,用于后面的容器间相互通信。
在列表中,可以看到网络的是,表示在整个集群是生效的。如果是在多台主机的集群中,网络在没有被使用的时候,只会在manage节点出现,使用后会自动同步到其他节点。
我们第一个先安装 ,在用于收集swarm性能数据
用于Influxdb数据读写,用于数据库管理界面
对服务进行约束,指定在机器上运行,更多约束介绍参考<Centos7的安装、Docker1.12.3的安装,以及Docker Swarm集群的简单实例>
挂载一个类型为volume的目录到容器上,实现数据持久化。在上运行命令可以查看目录的情况,运行命令,可以查看目录的详细信息
InfluxDB容器创建成功后,可以通过http://10.0.0.31:8083/打开管理界面。点击右上角的齿轮图标,登录到InfluxDB数据库,默认用户名是,密码是,然后点击进行保存
创建数据库,用于收集存储的性能数据,在输入框输入然后按回车,执行命令。
在输入框输入,可以看到我们刚才创建的数据库
创建cAdvisor容器,并连接到InfluxDB。
在集群中的每个节点创建一个服务,能够收集每一台机器的docker性能数据
挂载本地docker socket用于监控docker性能
指定存储驱动,使cadvisor将数据存储到数据库中,更多存储插件,请参考这里
InfluxDB数据库的地址
数据库名称
如果要指定用户名可以用参数,默认是
如果要指定密码可以用参数,默认是
运行以后,可以通过http://10.0.0.31:8080/查看到Docker运行的机器和容器情况。
验证是否已经向存入数据。打开http://10.0.0.31:8083/的管理界面,点击右上角切换到数据库,然后在输入框输入可以看到已经创建了很多个表。
假如我们要查询CPU数据,可以在输入框输入,可以看到结果集如下:
安装,连接到容器
默认的用户名和密码是/
也可以通过参数来指定一个admin用户名的密码
运行起容器后,通过浏览器打开http://10.0.0.31:3000,输入用户名,密码进行登录
点击左上角图标, 选择, 然后点击,添加完以上信息后,点击,会看到提示,如下图
在Name输入
在Type选择
在Url输入
在Database输入
在User输入
在Password输入
现在是比较有趣的部分,让我们来用绘制,存储到的数据图表。
点击左上角的图标,鼠标移动到菜单,在展开的菜单中,点击。然后在切换的页面中,点击。
在接下来的页面中,点击图形的,在弹出的菜单中选择
在面板中的处,输入
在面板的 选择,点击右侧的
其中是的nodeID,通过可以获取到
在面板,->->->, ->->,最后点击右侧的进行关闭,就可以看到状态了。
鼠标移到屏幕左侧的三个小点,点击,创建一个绘图,点击图形的,在弹出的菜单中选择,在面板的输入。
在面板选择数据源。
query的内容如下:
注意替换
是选择监控的容器名称,示例中只监控运行在机器上的和服务
在面板,->->->, ->->,最后点击右侧的进行关闭,就可以看到状态了,到现在我们已经产生两个给图如下:
点击屏幕上的,继续创建一个绘图,点击图形的,在弹出的菜单中选择,在面板的输入。
在面板选择数据源,query如下:
在面板,->->->, ->->,最后点击右侧的进行关闭。
鼠标移到屏幕左侧的三个小点,点击,创建一个绘图,点击图形的,在弹出的菜单中选择,在面板的输入。
在面板选择数据源,query如下:
在面板, ->->->, ->->->,最后点击右侧的进行关闭。
最终效果图如下:
其他更多想法,可以根据上面的实例,在where条件中,选择不同的主机,不同的容器进行特定指标的监控。
https://github.com/google/cadvisor
https://www.brianchristner.io/how-to-setup-docker-monitoring/
https://github.com/vegasbrianc/docker-monitoring
http://docs.grafana.org/reference/graph/
博文作者:迦壹 博客地址:[cAdvisor0.24.1+InfluxDB0.13+Grafana4.0.2搭建Docker1.12.3 Swarm集群性能监控平台](http://idoall.org/blog/post/lion/cAdvisor0.24.1-InfluxDB0.13-Grafana4.0.2%E6%90%AD%E5%BB%BADocker1.12.3-Swarm%E9%9B%86%E7%BE%A4%E6%80%A7%E8%83%BD%E7%9B%91%E6%8E%A7%E5%B9%B3%E5%8F%B0) 转载声明:可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明,谢谢合作!