通过调用docker的api接口,获取数据、处理、展示,这里不做介绍。
Google的 cAdvisor 是另一个知名的开源容器监控工具。
只需在宿主机上部署cAdvisor容器,用户就可通过Web界面或REST服务访问当前节点和容器的性能数据(CPU、内存、网络、磁盘、文件系统等等),非常详细。
默认cAdvisor是将数据 缓存在内存 中,数据展示能力有限;它也提供不同的持久化存储后端支持,可以将监控数据保存、汇总到Google BigQuery、InfluxDB或者Redis之上。
新的Kubernetes版本里,cadvior功能已经被集成到了kubelet组件中
需要注意的是, cadvisor的web界面,只能看到单前物理机上容器的信息 ,其他机器是需要访问对应ip的url, 数量少时,很有效果 ,当 数量多时,比较麻烦 ,所以需要把cadvisor的数据进行汇总、展示,就看【 cadvisor+influxdb+grafana 】
Cadvisor :将数据, 写入InfluxDB
InfluxDB :时序数据库,提供 数据的存储 ,存储在指定的目录下
Grafana :提供了WEB控制台, 自定义查询指标 ,从InfluxDB查询数据,并 展示 。
此组合 仅是监控Docker,不含kubernetes
Heapster :在k8s集群中 获取metrics和事件数据 , 写入InfluxDB ,heapster收集的数据比cadvisor多,却全,而且存储在influxdb的也少。
InfluxDB :时序数据库,提供 数据的存储 ,存储在指定的目录下。
Grafana :提供了WEB控制台, 自定义查询指标 ,从InfluxDB查询数据,并 展示 。
Cadvisor,只需要 在kubelet命令中,启用Cadvisor,和配置相关信息 ,即可。
不需要作为pod或是命令启动
--cadvisor-port=4194 --storage-driver-db="cadvisor" --storage-driver-host="localhost:8086"
1)、Influxdb必须是 0.8.8版本 的,否则,Cadvisor的日志会出现:
E0704 14:29:14.163238 05655 memory.go:94] failed to write stats to influxDb - Server returned (404): 404 page not found
http://blog.csdn.net/llqkk/article/details/50555442
说是Cadvisor不支持Influxdb的0.9版本 ,所以这里使用0.8.8的,【ok了】
不同版本的Cadvisor和Influxdb对照表(测试ok):
Cadvisor版本 | Influxdb版本 |
0.7.1 | 0.8.8 |
0.23.2 | 0.9.6(以上) |
【 Cadvisor和Influxdb的版本不对应,就可以在Cadvisor看到404的报错 】
2)、influxdb的 数据 ,需要 定期清理 ,单台Cadvisor,半天的数据就有600M
#单位: 【小时:h】 、 【天:d】
#删除一小时 内 :
delete from /^stats.*/ where time > now() - 1h
#删除一小时 外 :
delete from /^stats.*/ where time < now() - 1h
3)、关于influxdb可用性的问题,可以写脚本, 定期检查是否有相关的数据库和表 ,没有就出现创建
#检查是否有某个库
curl -G 'http://192.168.16.100:8086/db?u=root&p=root&q=list+databases&pretty=true'
curl -G 'http://192.168.16.100:8086/db?u=root&p=root&q=show+databases&pretty=true'
#检查某库中的表【points部分】
curl -G 'http://192.168.16.100:8086/db/cadvisor/series?u=root&p=root&q=list+series&pretty=true'
# 创建库 :
库名:cadvisor
curl "http://www.perofu.com:8086/db?u=root&p=root" -d "{/"name/": /"cadvisor/"}"
Grafana的数据检索,很需要花功夫,可以查看官网相关的语句,也可以直接借用其他人的模板
Influxdb查询语句:
https://docs.influxdata.com/influxdb/v0.8/api/query_language/
对于较大规模的k8s集群,heapster目前的 cache方式会吃掉大量内存 。
因为要定时获取整个集群的容器信息, 信息存储在内存 会成为问题,再加上heaspter要支持api获取临时metrics。
如果将heapster以pod方式运行,很容易出现OOM。所以目前建议 关掉cache,并以standalone的方式独立出k8s平台,建议每个node都单独运行容器
heapster最大的好处是其抓取的 监控数据可以按pod,container,namespace等方式分组 ,
这样就能进行监控信息的隐私化,即每个k8s的用户只能看到自己的应用的资源使用情况。
heapster收集的数据比cadvisor多,却全,而且存储在influxdb的也少 ,虽是Google的,但是作用却不尽相同
Heapster容器单独启动 时,会 连接influxdb ,并 创建 k8s 数据库
heapster收集的数据metric的分类有两种,【grafana搜索时,要注意】
1)、 cumulative :聚合的是【 累计值 】,包括cpu使用时间、网络流入流出量,
2)、 gauge :聚合的是【 瞬时值 】,包括内存使用量
描述 | 分类 | |
cpu/limit | cpu预设值,yaml文件可设置 | 瞬时值 |
cpu/node_reservation | kube节点的cpu预设值,类似cpu/limit | 瞬时值 |
cpu/node_utilization | cpu利用率 | 瞬时值 |
cpu/request | cpu请求资源,yaml文件可设置 | 瞬时值 |
cpu/usage | cpu使用 | 累计值 |
cpu/usage_rate | cpu使用速率 | 瞬时值 |
filesystem/limit | 文件系统限制 | 瞬时值 |
filesystem/usage | 文件系统使用 | 瞬时值 |
memory/limit | 内存限制,yaml文件可设置 | 瞬时值 |
memory/major_page_faults | 内存主分页错误 | 累计值 |
memory/major_page_faults_rate | 内存主分页错误速率 | 瞬时值 |
memory/node_reservation | 节点内存预设值 | 瞬时值 |
memory/node_utilization | 节点内存使用率 | 瞬时值 |
memory/page_faults | 内存分页错误 | 瞬时值 |
memory/page_faults_rate | 内存分页错误速率 | 瞬时值 |
memory/request | 内存申请,yaml文件可设置 | 瞬时值 |
memory/usage | 内存使用 | 瞬时值 |
memory/working_set | 内存工作使用 | 瞬时值 |
network/rx | 网络接收总流量 | 累计值 |
network/rx_errors | 网络接收错误数 | 不确定 |
network/rx_errors_rate | 网络接收错误数速率 | 瞬时值 |
network/rx_rate | 网络接收速率 | 瞬时值 |
network/tx | 网络发送总流量 | 累计值 |
network/tx_errors | 网络发送错误数 | 不确定 |
network/tx_errors_rate | 网络发送错误数速率 | 瞬时值 |
network/tx_rate | 网络发送速率 | 瞬时值 |
uptime | 容器启动时间,毫秒 | 瞬时值 |
下篇,将带来【 Docker监控——Cadvisor+InfluxDB+Grafana搭建过程 】,敬请期待!
著作权归perofu所有 ,严禁转载!!!