随着docker容器云的广泛应用,大量的业务软件运行在容器中,这使得对docker容器的监控越来越重要,具体监控指标总结如下:
首先是容器本身资源使用情况:cpu,内存,网络,磁盘
然后物理机的资源使用情况:cpu,内存,网络,磁盘
物理机上容器镜像情况,名字,大小,版本。
现下较为流行的监控工具有DockerStats、CAdvisor、Scout、Data Dog以及Sensu。应用场景的不同,各监控工具的优缺点体现的也有所不同。
docker stats是docker本身提供的用于监控容器资源使用情况,直接输入命令行即可查看,还可提供远程api接口,易于操作,但没有图形界面。CAdvisor可提供数据的可视化界面,并且可监控容器所在宿主机中的资源使用情况,只监控于单一主机。Scout可聚合多主机容器的监控,并且可以提供告警,但无法显示容器的详细信息,更多的是偏向于主机资源的监控,为收费项目。Datadog监控功能较为强大,可以获得运行和停止的容器计数以及镜像数量等,可整合集群主机数据和容器数据,使用成本也较大。Sensu监控部署较为复杂。
Metricbeat是elastic下的项目,在5.1及之后的版本中支持对docker的监控,需与EK配合使用。
本文介绍使用cadvisor实现对容器环境的监控。
CAdvisor是谷歌开发的用于分析运行中容器的资源占用和性能指标的开源工具。CAdvisor是一个运行时的守护进程,负责收集、聚合、处理和输出运行中容器的信息。
一、安装运行:
直接使用容器方式运行cadvisor,docker pull google/cadvisor
docker run --volume=/:/rootfs:ro--volume=/var/run:/var/run:rw --volume=/sys:/sys:ro--volume=/var/lib/docker/:/var/lib/docker:ro --publish=8080:8080 --detach=true--name=cadvisor google/cadvisor:latest
三个-volume不可少,否则不能和docker建连;8080为暴露的端口。
CAdvisor提供一些运行时参数供用户配置使用:
--storage_duration保存时间段长度内的数据到内存,默认为2min即保存2min的数据;
cAdvisor stores the latest historical datain memory. How long of a history it stores can be configured with the--storage_duration flag.
--allow_dynamic_housekeeping依据容器的活跃程度,动态的读取容器数据
Housekeeping is the periodic actionscAdvisor takes. During these actions, cAdvisor will gather container stats.These flags control how and when cAdvisor performs housekeeping.
Dynamic housekeeping intervals let cAdvisorvary how often it gathers stats. It does this depending on how active thecontainer is.
--global_housekeeping_interval检测是否有新容器的时间周期
Global housekeeping is a singularhousekeeping done once in cAdvisor. This typically does detection of newcontainers.
--housekeeping_interval统计每个容器数据的时间周期,默认每1秒取次数据,取统计到的最近的60个数据;
Per-containerhousekeeping is run once on each container cAdvisor tracks. This typically getscontainer stats.二、显示输出
Cadvisor可看到的数据有:
宿主机:cpu,memory,network,filesystem,processes
Docker:docker信息(docker info),运行中的容器信息(cpu,memory,network,filesystem,processes),镜像信息(docker images),如下为示图:
图2.1内存仪表盘进程
图2.1网络曲线图
图2.3 镜像信息
Cadvisor的数据可以直接导出到本地文件,存储驱动可以设置为stdout,将容器运行于前台,到输出导入指定文件即可:
docker run --volume=/:/rootfs:ro --volume=/var/run:/var/run:rw--volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker:ro--publish=8080:8080 --detach=false --name=cadvisor-stdout google/cadvisor:latest -storage_driver=stdout>> data
可查看cadvisor数据格式为,这里截取一段:
cName=/ host=localhost:8086 /dev/sdb.fs_usage=37773312cpu_cumulative_usage=201224226731 memory_usage=1497456640 tx_errors=0fs_summary.fs_limit=72656642048 /dev/mapper/docker-253:0-67236849-5ce1d8d13dea65deb01f8fdaa9726ba5feddf9740cf9f9fd9eb157669a0781af.fs_usage=83841024/dev/mapper/cl-root.fs_usage=3487477760 /dev/sdb.fs_limit=10434662400/dev/sda1.fs_limit=1063256064 memory_working_set=1272279040 tx_bytes=8784fs_summary.fs_usage=3754168320/dev/mapper/docker-253:0-67236849-5ce1d8d13dea65deb01f8fdaa9726ba5feddf9740cf9f9fd9eb157669a0781af.fs_limit=10725883904/dev/mapper/cl-root.fs_limit=50432839680 rx_bytes=10800 rx_errors=0/dev/sda1.fs_usage=145076224
CAdvisor支持输出状态信息到InfluxDB数据库进行存储和读取,kafka等,都是通过-storage_driver来配置,具体支持的项有:
使用时具体配置,可直接参考官网文档:https://github.com/google/cadvisor/tree/master/docs/storage