kubernetes+docker监控之简介

kubernetes+docker监控

   Docker的监控原则:根据docker官方声明,一个容器不建议跑多个进程,因此不建议在容器中使用agent进行监控(zabbix等),agent应该运行在宿主机,经过cgroup或是docker api获取监控数据。node

 

一、监控分类介绍:

 

①、自行开发:

  经过调用docker的api接口,获取数据、处理、展现,这里不作介绍。git

  例如:github

   1)、爱奇艺参照cadvisor开发的dadvisor,数据写入graphite等同于cadvisor+influxdb,爱奇艺的dadvisor并无开源web

②、Docker——cadvisor:

    Google的 cAdvisor 是另外一个知名的开源容器监控工具。docker

    只需在宿主机上部署cAdvisor容器,用户就可经过Web界面或REST服务访问当前节点和容器的性能数据(CPU、内存、网络、磁盘、文件系统等等),很是详细。数据库

    默认cAdvisor是将数据缓存在内存中,数据展现能力有限;它也提供不一样的持久化存储后端支持,能够将监控数据保存、汇总到Google BigQuery、InfluxDB或者Redis之上。后端

    新的Kubernetes版本里,cadvior功能已经被集成到了kubelet组件中api

    须要注意的是,cadvisor的web界面,只能看到单前物理机上容器的信息,其余机器是须要访问对应ip的url,数量少时,颇有效果,当数量多时,比较麻烦,因此须要把cadvisor的数据进行汇总、展现,就看【cadvisor+influxdb+grafana缓存

 

③、Docker——Cadvisor+InfluxDB+Grafana:

    Cadvisor   :将数据,写入InfluxDB网络

    InfluxDB   :时序数据库,提供数据的存储,存储在指定的目录下

    Grafana   :提供了WEB控制台,自定义查询指标,从InfluxDB查询数据,并展现

此组合仅是监控Docker,不含kubernetes

 

④、Kubernetes——Heapster+InfluxDB+Grafana:

    Heapster:在k8s集群中获取metrics和事件数据写入InfluxDB,heapster收集的数据比cadvisor多,却全,并且存储在influxdb的也少。

    InfluxDB:时序数据库,提供数据的存储,存储在指定的目录下。

    Grafana:提供了WEB控制台,自定义查询指标,从InfluxDB查询数据,并展现

 

二、Cadvisor+Heapster+InfluxDB+Grafana的注意事项:

①、Cadvisor注意事项:

    Cadvisor,只须要在kubelet命令中,启用Cadvisor,和配置相关信息,便可。

    不须要做为pod或是命令启动

--cadvisor-port=4194 --storage-driver-db="cadvisor" --storage-driver-host="localhost:8086"

 

②、InfluxDB注意事项:

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注意事项:

    Grafana的数据检索,很须要花功夫,能够查看官网相关的语句,也能够直接借用其余人的模板

    Influxdb查询语句:

https://docs.influxdata.com/influxdb/v0.8/api/query_language/

 

④、Heapster注意事项:

    对于较大规模的k8s集群,heapster目前的cache方式会吃掉大量内存

    由于要定时获取整个集群的容器信息,信息存储在内存会成为问题,再加上heaspter要支持api获取临时metrics。

    若是将heapster以pod方式运行,很容易出现OOM。因此目前建议关掉cache,并以standalone的方式独立出k8s平台, 建议一套K8s,只运行一套heapster容器(heapster1.0版本后内部分为event和metric两个进程)。

    heapster最大的好处是其抓取的监控数据能够按pod,container,namespace等方式分组

这样就能进行监控信息的隐私化,即每一个k8s的用户只能看到本身的应用的资源使用状况。

    heapster收集的数据比cadvisor多,却全,并且存储在influxdb的也少,虽是Google的,可是做用却不尽相同

    Heapster容器单独启动时,会链接influxdb,并建立k8s数据库

heapster收集的数据metric的分类有两种,【grafana搜索时,要注意】

    1)、cumulative :聚合的是【累计值】,包括cpu使用时间、网络流入流出量,

    2)、gauge :聚合的是【瞬时值】,包括内存使用量

参考:https://github.com/kubernetes/heapster/blob/master/docs/storage-schema.md

 

描述

分类

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全部 ,严禁转载!!!

相关文章
相关标签/搜索