现在开发模式
现在开发模式大部分开发者都要负责自己编写的程序运维工作的,当然现在很流行 DevOps ,现在运维已经不是上古时代了,现在运维大部分有自动化工具来帮助开发者运维,例如自动化流水线... 使用 Docker 来部署应用已经很方便了。但是应用的性能指标监测和运维也需要有工具解决,本文讲解 Docker 系统化运维管理工具 Portainer , Portainer 是一款图形化界面的 Docker 运维管理工具,如果容器数量不多的话可以使用这个,如果容器很多建议还是使用 Kubernetes 。本文后面还会讲解容器服务性能指标监控图形展示解决方案 CIG (CAdvisor、InfluxDB、Granfana) 。
Portainer
Portainer 是 Docker 的图形化管理工具,提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作:包括上传下载镜像、创建容器等操作、事件日志显示、容器控制台操作、 Swarm 集群和服务等集中管理和操作、登录用户管理和控制等功能,功能十分全面,基本能满足中小型单位对容器管理的全部需求。
首先要在 Docker 所在的宿主机环境中安装 Portainer ,由于本身也需要存储一些数据,我首先还有创建一个数据卷用来存储 Portainer 数据如下:
sudo docker volume create portainer_data
然后拉取 Portainer 镜像并且运行容器:
sudo docker run -d -p 8000:8000 -p 9000:9000 --name portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:2.9.3
然后浏览器访问打开配置好的端口即可访问到图形化界面:
有了 Portainer 我们就不需要再通过手动敲命令去管理我们的服务了,并且图形化的操作起来很方便,这里就介绍到这里。
指标监控
服务部署在容器里面那么就需要对这些服务运行状态进行监控,虽然 Portainer 提供了一些关于容器的性能指标图形显示,但是很难做到定制化展示,展示的数据也是实时的,没有地方存储,没有健康指标过线预警等功能,下面我要介绍就是通过 CAdvisor 来采集容器端的数据,然后把数据存储到 influxDB 中持久化存储,再通过 Granfana 进行展示,架构图如下:
CAdvisor 是一个容器资源监控工具,包括容器的内存, CPU 、网络 IO 、磁盘 IO 等监控,同时提供了一个图形页面用于查看容器的实时运行状态,CAdvisor
默认存储2
分钟的数据,而且只是针对单物理机,不过 CAdvisor 提供了很多数据集成接口,支持 InfluxDB 、 Redis、Kafka 、Elasticsearch 等集成,可以加上对应配置将监控数据发往这些数据库存储起来。
InfluxDB 是一种时序数据库,用来存放监控数据, InfluxDB 是用 Go 语言编写的一个开源分布式时序、事件和指标数据库,无需外部依赖。
Grafana 是一个开源的数据监控分析可视化平台,支持多种数据源配置(如 InfluxDB 、 MySQL 、 Elasticserach 、 OpenTSDB 、 Graphite 等)和丰富的插件及模板功能,支持图表权限控制和报警。
千言万语一句话,全部由 Docker-Compose 一键部署,跑起来看看效果,下面是自动化的 compose 文件里面配置了各个组件依赖关系:
version: '3.1' #必须是3.0以上才能运行docker-compose
volumes:
grafana_data: {} #实现了grafana数据的挂载
services: #表示我们要启动的服务,即要docker run的内容,多个实例服务
influxdb:
image: influxdb:1.8
restart: always
environment:
- PRE_CREATE_DB=cadvisor #预先创建一个数据库,创建一个数据库一样
ports:
- "8083:8083" #对外是8083
- "8086:8086" #内部即8086
volumes:
- ./data/influxdb:/data #从A-B即influxdb服务,拉取的镜像,安装的环境,暴露的端口,下面的cadvisor,grafana都是一样的
cadvisor:
# 注意架构
image: klo2k/cadvisor:v0.38.8
#image: google/cadvisor:latest
links:
- influxdb:influxsrv
command: -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_host=influxsrv:8086 #这就是相当于mysql选择的那个驱动
restart: always
ports:
- "8088:8088"
volumes:
- /:/rootfs:ro
- /var/run:/var/run:rw
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro #四个容器数据卷
grafana:
user: "104"
image: grafana/grafana
user: "104"
restart: always #因为有restart,所以如影随形,随着docker启动,就启动
links:
- influxdb:influxsrv
ports:
- "3000:3000"
volumes:
- grafana_data:/var/lib/grafana
environment:
- HTTP_USER=admin
- HTTP_PASS=admin
- INFLUXDB_HOST=influxsrv
- INFLUXDB_PORT=8086
- INFLUXDB_NAME=cadvisor
- INFLUXDB_USER=root
- INFLUXDB_PASS=root
编写完成之后记住文件名一定要为 docker-compose.yml
,然后检测一下语法错误 sudo docker-compose config -q
,然后执行 sudo docker-compose up -d
后台启动这些服务,如下图:
然后就是 Garfana 傻瓜式图形化操作了,本文就介绍到这里了。