现在开发模式

现在开发模式大部分开发者都要负责自己编写的程序运维工作的,当然现在很流行 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 傻瓜式图形化操作了,本文就介绍到这里了。

便宜 VPS vultr
最后修改:2023 年 07 月 05 日
如果觉得我的文章对你有用,请随意赞赏 🌹 谢谢 !