目录
4、CAdvisor + InfluxDB + Grafana
3.1.3.1 容器监控
由于docker compose启动的服务都在同一台宿主机上,对于一个宿主机上运行多个容器应用时,
就需要监控容器的:CPU使用率、内存使用率、网络状态、磁盘空间......一系列随时间变化的时序数据信息
1、docker starts:只能监控当前宿主机的所有容器,而且监控数据是实时的,没有地方存储,没有报警
2、而Scount、Sysdig Cloud、Data Dog虽然都提供了较完善的服务,但是他们都是托管服务,而且是收费的
3、Sensu Monitoring Framework集成度较高、免费,但部署过于复杂
所以我们选择CAdvisor做容器监控工具。
1、CAdvisor
CAdvisor包括容器的内存、CPU、网络IO、磁盘IO等,同时提供一个WEB页面用于查看容器的实时运行状态。
CAdvisor默认存储2分钟的数据,而且只是针对单物理机。
不过CAdvisor提供了很多数据集成接口,支持InfluxDB、Redis、Kafka、Elasticsearch等集成,可以加上对应配置将监控数据发往这些数据库存储起来。
1.1、CAdvisor的优点、缺点
优点:开源、监控指标齐全、部署方便、有官方的docker镜像
缺点:集成度不高、默认只在本地保存2分钟数据
1.2、CAdvisor功能主要有两点
1、展示Host和容器两个层次的监控数据
2、展示历史变化数据
2、InfluxDB
是用go语言编写的一个开源分布式时序、事件和指标数据库,无需外部依赖
在启动容器时指定配置,CAdvisor就可以存储数据到InfluxDB
2.1、InfluxDB主要功能
1、基于时间序列:支持与时间有关的相关函数(eg:最大、最小、求和)
2、可度量性:你可以实时对大量数据进行计算
3、基于事件:它支持任意的事件数据
2.2、InfluxDB主要特点
1、无结构(无模式)
2、可以是任意数量的列
3、可拓展的
4、支持min、max、sum、count、mean、median等一系列函数,方便统计
5、原生的HTTP支持,内置HTTP API
6、强大的类SQL语法
7、自带管理界面,方便使用
3、Grafana
是一个开源的数据监控分析可视化平台,支持多种数据源配置(eg:InfluxDB、MySQL、Elasticsearch、OpenTSDB、Graphite等)
和丰富的插件及模板功能,支持图表权限控制和报警。
3.1、Grafana主要特性
1、灵活丰富的图形化选项
2、可以混合多种风格
3、支持白天和夜间模式
4、多个数据源
4、CAdvisor + InfluxDB + Grafana
CAdvisor:负责收集容器随时间变化的数据
InfluxDB:负责存储时序数据
Grafana:负责分析和展示时序数据
5、安装部署
5.1、部署InfluxDB服务
说明:
1、--name:启动容器,并分配一个名字influxdb
2、-p:映射端口,8083端口为influxdb管理端口,8086端口是influxdb的数据端口
3、-v:挂载数据
4、-d:后台运行此容器
5、influxdb:通过这个容器来运行的,默认会在docker官方仓库拉取下来
1、浏览器访问influxdb的管理端,http://ip:8083
2、创建test的数据库与root用户,这个用于后期配granfa
5.2、部署CAdvisor服务
谷歌的cadvisor可以用于收集docker容器的时序信息,包括容器运行过程中的资源使用情况和性能数据
可以在docker hub的官网查看CAdvisor各个参数的意思
说明:
1、-d:后台运行此容器
2、--name:启动容器,并分配一个名字cadvisor
3、-p:映射端口8080
4、--mount:把宿主机的相关目录绑定到容器中,这些目录都是cadvisor需要采集的目录文件和监控内容
5、-storage_driver:需要指定cadvisor的存储驱动、数据库主机、数据库名
运行完以上docker命令后:
1、可以通过ip+8080端口访问测试一下,第一次访问如下页面有点慢
5.3、部署Granfana服务
grafana是一款开源的时序数据分析工具,而且界面专业易用
注意:如果使用-v把数据挂载出来会出现容器启动失败,
错误为mkdir:cannot create directory '/var/lib/grafana/plugins':Permission denied,
此时可以使用docker run --entrypoint "id" grafana/grafana得到uid、gid、groups(默认是472)
接着使用chown -R 472:472 /data/grafana/修改目录权限就可以启动成功了。
Granfana部署成功后,可以通过ip+3000端口来访问grafana的web服务,第一次访问需要修改admin用户密码,
默认用户名/密码:admin/admin
6、docker-compose快速部署
docker-compose.yml文件本地路径:E:\meWork\study\project\subject-3\subject-3-docker\docker-compose.yml
文件内容如下图:
用docker-compose启动3个服务(InfluxDB、CAdvisor、Granfana):docker-compose up
3.1.3.2 日志监控
1、docker日志
1.1、日志处理机制
当启动一个容器的时候,这个容器其实是以docker daemon的一个子进程运行的,docker daemon可以拿到容器进程的标准输出,拿到标准输出后,会通过自身的一个LogDriver模块来处理,LogDriver支持的方式很多,可以写到本地的文件(默认方式),可以发送到syslog等。
docker默认收集应用程序的标准输出存储到一个json.log文件中,文件格式如下图:
以一行作为一条JSON数据存储。docker的这种日志存储方式是可以配置的,
具体参数可以在执行run启动容器的时候通过log-driver进行配置,具体配置请参考官方log-driver:https://docs.docker.com/config/containers/logging/configure/#supported-logging-drivers
1.2、Docker Logging Driver
docker默认使用json-file driver 作为log driver,而gelf则是我们需要使用的log driver。
当容器多了,或者采用类似swarm集群部署docker的时候,各种日志分散存在各个json.log文件中,当查找问题或者进行相关统计的时候,分散的日志对我们来说是非常不友好的。我们需要一个能够集中管理docker日志的工具:graylog
1.3、Graylog
用graylog作为docker的日志收集平台的原因:
1、docker原生支持graylog协议,直接将日志发送到graylog(通过gelf协议)
2、graylog官方提供了将graylog部署在docker的支持
1.4、Graylog部署
1、创建一个目录用来部署graylog,假设目录为/root/graylog,以下所有操作都是在/root/graylog中进行的。
2、初始化目录和配置文件
3、修改下载完的graylog.conf中的root_timezone为GMT+0800中国时区
root_timezone = ETC/GMT-8
4、新建docker-compose.yml供docker-compose快速启动完整服务
5、启动整个服务
docker-compose up
如果启动好了的话,会看到graylog webserver started的终端输出消息。
访问http://{server}:9000,用户名/密码:admin/admin
1.5、Graylog系统配置
1、input配置
graylog的日志收集通过定义input对象来完成,在graylog的web管理界面按照如下图片进行input对象配置,
选择GELF UDP协议来新建一个输入器(input):
保存后,点击Start Input就开始收集日志了。
2、docker配置
如果docker通过命令行启动,可以在run命令中加上如下参数:
eg:
如果通过docker-compose命令,则可以在docker-compose.yml中加入相关配置,以nginx容器为例:
3.1.3.3 资源管理
1、Docker Swarm
Docker Swarm是docker官方三剑客项目之一,提供docker容器集群服务,是docker官方对容器云生态进行支持的核心方案
使用它,用户可以将多个docker主机封装为单个大型的虚拟docker主机,快速打造一套容器云平台。
注意:docker1.12.0+ Swarm mode已经内嵌入docker引擎,成为了docker子命令docker swarm,绝大多数用户已经
开始使用Swarm mode,docker引擎API已经删除Docker Swarm。
1.1、基本概念
Swarm是使用SwarmKit构建的docker引擎内置(原生)的集群管理和编排工具。
2、Swarm集群的2个概念
使用Swarm集群之前需要了解的几个概念:节点、服务和任务
2.1、节点
运行docker的主机可以主动初始化一个Swarm集群或者加入一个已存在的Swarm集群,这样这个运行docker的主机就成为一个Swarm集群的节点(node)。
节点分为:管理节点(manager)、工作节点(worker)
管理节点:用于Swarm集群的管理,docker swarm命令基本只能在管理节点执行。
工作节点:是任务执行节点,管理节点将服务(service)下发至工作节点执行。
2.2、服务和任务
任务(Task):是Swarm中的最小的调度单位,目前来说就是一个单一的容器。
服务(Services):是指一组任务的集合,服务定义了任务的属性。
服务有两种模式:
replicated services:按照一定规则在各个工作节点上运行指定个数的任务。
global services:每个工作节点上运行一个任务
这两种模式通过docker service create的--mode参数指定。
容器、任务、服务的关系,如下图:
3、创建Swarm集群
创建一个包含:一个管理节点、两个工作节点,的最小Swarm集群。
3.1、初始化集群
使用docker swarm init在本机初始化一个Swarm集群。
docker swarm init --advertise-addr 192.168.100.249
如果你的docker主机有多个网卡,拥有多个IP,必须使用--advertise-addr指定IP。
执行docker swarm init命令的节点自动成为管理节点。
3.2、增加工作节点
将上一步创建管理节点时,输出的加入swarm集群的命令,复制到另外两台服务器上执行
3.3、查看集群
在管理节点使用docker node ls查看集群
docker node ls
4、部署服务
使用docker service命令来管理Swarm集群中的服务,该命令只能在管理节点运行。
4.1、新建服务
1、在创建好的Swarm集群中运行一个名为nginx服务。
docker service create --replicas 3 -p 80:80 --name nginx nginx:latest
2、使用浏览器,输入任意节点IP,可看到nginx默认页面。
4.2、查看服务
1、查看当前Swarm集群运行的服务
docker service ls
2、查看某个服务的详情
docker service ps nginx
3、查看某个服务的日志
docker service logs nginx
4.3、删除服务
从Swarm集群移除某个服务:docker service rm nginx
5、资源管理
portainer:是Docker的图形化管理工具,管理swarm集群
提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作(上传下载镜像、创建容器)
事件日志显示、容器控制台操作、Swarm集群和服务等集中管理和操作、登录用户管理和控制
基本能满足中小型单位对容器管理的全部需求。
5.1、portainer集群运行
1、下载portainer镜像
2、安装portainer
5.2、portainer配置
设置管理员账号密码、查看swarm集群资源使用情况
3.1.3.4 快速扩容
1、命令方式
1、在创建好的Swarm集群中运行一个名为nginx服务,并使用--replicas参数指定启动的副本数。
docker service create --replicas 3 -p 80:80 --name nginx nginx:latest
2、或者
2、portainer方式
可以使用portainer的方式在web界面上创建服务并指定副本数,同时可以随时动态增减副本数
由于swarm兴起不久,普及率还没有k8s高,swarm使用比较容易,可以结合官方文档进一步学习。