docker监控方案的最佳实践(cadvisor+influxdb+grafana)

一 背景

虚拟化技术如今已经非常热门,如果你不知道什么是虚拟化,那你应该了解虚拟机。虚拟化技术如同虚拟机一样,用于将某些硬件通过软件方式实现"复制",虚拟出"硬件系统" 并且能够对该虚拟的硬件系统实现一系列骚操作。

docker作为出色的虚拟化技术,其技术发展壮大的同时,使用docker部署主机和服务的情况越来越多。可虚拟化终究是虚拟化,它需要依托与真实的主机之上,所以面对日益庞大的docker服务群应用,也要做好有效的监控。

本文对docker不做详细介绍,主要讲解使用cadvisor+influxdb+grafana三大开源框架组成的docker服务群监控方案。


二 监控方案参考

1、使用docker自带的命令 docker stats

2、Scout

3、Data Dog

4、Sensu Monitoring Framework

5、开源解决方案cadvisor+influxdb+grafana

(有兴趣可以百度一下)


三 cadvisor+influxdb+grafana介绍

框架名称 特点、作用 角色
cadvisor Google开源的用于监控基础设施应用的工具,可以零配置运行在docker主机上来监控Docker主机以及Docker容器。其为但节点监控,只能监控一个主机。多节点监控可参考Google的Kubernetes。 作为docker服务的监控数据收集器,提供给influxdb
influxdb InfluxDB 是用Go语言编写的一个开源分布式时序、事件和指标数据库,无需外部依赖、提供管理界面。提供基于时间序列,基于事件的可度量的实时计算功能。 作为数据存储器以及分析函数支持,与elk中elasticsearch作用类似,但此数据库偏向存储实时数据。
grafana Grafana可视化大型测量数据的开源程序,有灵活丰富的图形化选项,可以混合多种风格,多个数据源例如Graphite、zabbix、InfluxDB、Prometheus、mysql和OpenTSDB 详见配置页面。 作为数据分析的可视化展示,与influxdb配合实现监控目的。与elk中kibana类似,但此可视化偏向实时监控数据展示。

架构图:


docker多节点监控

备注:每个docker主机上均部署多个tomcat容器,以及docker主机的监控服务cadvisor。
influxdb以及grafana根据监控压力配置。

数据流向: docker主机+docker容器-->cadvisor-->influxdb-->granfana-->web页面

四 搭建

为了简化,将三大框架部署同一台并且使用docker进行三大框架的部署,为啥呢?为了展现 docker的方便。

1、环境准备

安装docker环境 :centos7下安装docker 以及简单使用

启动docker:

service docker start ## or restart

2、创建虚拟网卡(为了网络环境隔离)

docker network create docker-monitor  #为docker主机创建一个网卡名为docker-monitor
备注:容器启动可以设置使用改网卡 即使用 --net 网卡名指定   若不指定则默认使用docker主机默认网卡docker0  其后所有步骤不需指定 --net 


3、部署influxdb

docker run -d --name influxdb --net docker-monitor -p 8083:8083 -p 8086:8086 tutum/influxdb
备注:-d:守护线程运行
     --name:容器名influxdb
     --net:加入到网络docker-monitor
     -p:   主机端口(自己分配):容器端口  8083为infuxdb后台控制端口,8086是infuxdb的数据端口 
     tutum/influxdb:默认会在docker官方仓库pull下来influxdb镜像

验证启动

http://docker主机的ip:容器映射出来host

添加管理员角色,创建数据库(作为后续存储)

CREATE USER "root" WITH PASSWORD 'root' WITH ALL PRIVILEGES ##创建管理员角色 root 密码 root 供使用
CREATE DATABASE "cadvisor"                                  ##创建数据库 cadvisor 用于接收cadvisor的监控数据



4、部署cadvisor

docker run --privileged=true --net docker-monitor --volume=/:/rootfs:ro --volume=/var/run:/var/run:rw --volume=/sys:/sys:ro --volume=/var/lib/docker:/var/lib/docker:ro --volume=/sys/fs/cgroup:/sys/fs/cgroup:ro -p 8087:8080 --detach=true --name=cadvisor google/cadvisor -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_host=influxdb:8086
备注:上诉语句请勿换行
docker run 
--privileged=true           :设置挂载目录权限为最大 否则挂载出错
--net docker-monitor        :设置加入docker-monitor网络
--volume=/:/rootfs:ro       :将容器/rootfs目录挂载到docker /
--volume=/var/run:/var/run:rw :将容器/var/run 挂载到docker /var/run
--volume=/sys:/sys:ro         :rw表示读写  ro表示只读
--volume=/var/lib/docker:/var/lib/docker:ro 
--volume=/sys/fs/cgroup:/sys/fs/cgroup:ro 
-p 8087:8080                  :设置cadvisor端口映射  由于8080被我使用oracle  我分配8087
--detach=true                 :是否后台运行容器服务
--name=cadvisor google/cadvisor :容器服务名 为cadvisor  从docker默认仓库 下载google/cadvisor镜像
-storage_driver=influxdb        :绑定存储驱动 为 influxdb
-storage_driver_db=cadvisor     :数据库为  cadvisor  请对应
-storage_driver_host=influxdb:8086 :绑定数据库管理地址  容器名:容器端口

验证启动

http://docker主机的ip:容器映射出来host  本来为8080 修改为8087



5 部署grafana

docker run -d --name grafana --net docker-monitor -p 3000:3000   grafana/grafana
备注:docker run 
-d                    :后台运行
--name grafana        :容器别名
--net docker-monitor  :加入docker-monitor网络
-p 3000:3000          :端口映射
grafana/grafana       :默认docker仓库下载grafana镜像

验证启动


http://docker主机的ip:容器映射出来host   默认帐号admin admin

五 简单使用

以记录本教程三大框架的内存实时监控数据展示为例

1、登录grafana

2、设置数据源

home主页
左到右分别是
安装grafana 添加数据源 添加面板 设置用户权限 安装插件


备注:数据源有多种,influxdbd对实时时序数据有良好的存储方案。可以业务场景切换


3、设置添加面板

回到主页进行添加

4、如图添加面板中的图表


备注:grafana新建面板类似与一个图表的展示页面  其图表需要进行添加和编辑

以graph为例,添加后编辑显示


备注:此图表用于显示 grafana使用内存的是实时情况

查询内容可以根据业务摸索
图标的坐标坐标,换算亦可以设置
请自行摸索

保存面板


备注:可添加多个,以及使用混合模式    将cadvisor与influxdb在同一图标展示


执行效果


六  总结思考

1、使用docker进行部署服务,省去了大量操作,且docker还有dockerfile等技术可以对环境部署进行批量化操作

2、对应docker监考,本架构可以满足基本的监控。因为influxdb为设计用于时序以及注重实时,其存储持久性有所取舍。

3、cadvisor监控与docker融合好,但是其为单节点监控,占据一定的docker主机空间。

4、docker监考实属非功能性设计,如果不使用docker监控方案就另行设计。

5、grafana可以进行汉化,后续提供。

猜你喜欢

转载自blog.csdn.net/qq_22211217/article/details/80867801