社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  docker

打造高逼格、可视化的Docker容器监控系统平台

运维 • 5 年前 • 527 次点击  

来自:民工哥技术之路(微信号:jishuroad)

为什么需要监控??

对于一个物理机上运行多个容器应用时,容器的运行情况如:CPU使用率、内存使用率、网络状态、磁盘空间等信息,都是需要去了解的,因此监控是必须的。对于容器的监控方案可谓多种多样,本身自带命令docker stats。
[root@docker ~]# docker stats
CONTAINER      CPU %    MEM USAGE / LIMIT    MEM %      NET I/O         BLOCK I/O    PIDS
bd96d72ed9c7   0.04%  14.97 MiB / 7.64 GiB  0.19%    8.22 MB / 805 MB   0 B / 0 B      9
665563143eb7   0.01%  18.12 MiB / 7.64 GiB   0.23%  19.7 MB / 18.5 MB   0 B / 39.4 MB  8
f2304dad5855  0.18%  98.45 MiB / 7.64 GiB   1.26%   1.07 GB / 9.97 MB   0 B / 2.13 GB  9
今天民工哥要介绍的是一款开源方案cAdvisor+InfluxDB+Grafana。

组件简介

cAdvisor:用于数据采集

cadvisor谷歌公司自己用来监控他们基础设施的一款工具,这个工具厉害之处不仅能监控docker容器的实时信息,而且还能将你的cadvisor这容器所在的主机的系统的实时信息,但是由于cadvisor只是能监控到实时的信息而不能保存。


InfluxDB:用于数据存储

InfluxDB 是用Go语言编写的一个开源分布式时序、事件和指标数据库,无需外部依赖。所以我们要使用influxdb将这些实时监控到的信息存放起来。

InfluxDB主要特色功能
  • 基于时间序列,支持与时间有关的相关函数(如最大,最小,求和等);

  • 可度量性:你可以实时对大量数据进行计算;

  • 基于事件:它支持任意的事件数据;

InfluxDB主要特点
  • 无结构(无模式)

  • 可以是任意数量的列

  • 可拓展的;

  • 支持min, max, sum, count, mean, median 等一系列函数,方便统计

  • 原生的HTTP支持,内置HTTP API

  • 强大的类SQL语法

  • 自带管理界面,方便使用

  • 参考文章:https://www.influxdata.com/products/


Grafana: 用于数据展示

Grafana是一个可视化面板(Dashboard),有着非常漂亮的图表和布局展示,功能齐全的度量仪表盘和图形编辑器,支持Graphite、zabbix、InfluxDB、Prometheus和OpenTSDB作为数据源。

Grafana主要特性:
  • 灵活丰富的图形化选项

  • 可以混合多种风格

  • 支持白天和夜间模式

  • 多个数据源。


安装布署过程

首先得有docker环境,这个就不用介绍了吧,请参考前面的文章

Docker容器技术入门(一)

1、部署influxDB服务

[root@master ~]# docker run -d --name influxdb -p 8086:8086 tutum/influxdb
Unable to find image 'tutum/influxdb:latest' locally
Trying to pull repository docker.io/tutum/influxdb ...
latest: Pulling from docker.io/tutum/influxdb
a3ed95caeb02: Pull complete
23efb549476f: Pull complete
aa2f8df21433: Pull complete
ef072d3c9b41: Pull complete
c9f371853f28: Pull complete
a248b0871c3c: Pull complete
749db6d368d0: Pull complete
db2492acfcc3: Pull complete
b7e7d2e12d53: Pull complete
4272a53eef10: Pull complete
9b2fefdb5321: Pull complete
Digest: sha256:5b7c5e318303ad059f3d1a73d084c12cb39ae4f35f7391b79b0ff2c0ba45304b
Status: Downloaded newer image for docker.io/tutum/influxdb:latest
f384db08ffc78e01fc27bf4c35dc6503b0fd2473cd8d5114b4d8a5475f928b53
说明:
  • -d :后台运行此容器

  • --name :启运容器分配名字influxdb

  • -p :映射端口,8083端口为infuxdb管理端口,8086端口是infuxdb的数据端口

  • tutum/influxdb:通过这个容器来运行的,默认会在docker官方仓库pull下来

查看容器
[root@master ~]# docker ps
CONTAINER ID      IMAGE          COMMAND      CREATED           STATUS                   PORTS                      NAMES
f2304dad5855   tutum/influxdb   "/run.sh"   4 seconds ago   Up 4 seconds  0.0.0.0:8083->8083/tcp, 0.0.0.0:8086->8086/tcp   influxdb

现在可以通过浏览器去访问influxdb的管理端了

接下来创建cadvisor的数据库与用户,这个用于后期配置granfa

回车直接创建完成如下图

创建管理用户

创建完成如下图

同时也是可以使用CLI命令行界面来创建的,命令一样

2、布署cadvisor服务

[root@master ~]# docker run -d 
--name=cadvisor
-p 8082:8080
-v /:/rootfs,ro
-v /var/run:/var/run
-v /sys:/sys,ro
-v /var/lib/docker/:/var/lib/docker,ro
google/cadvisor
-storage_driver=influxdb
-storage_driver_db=cadvisor
-storage_driver_host=influxdb:8086

Unable to find image 'google/cadvisor:latest' locally
Trying to pull repository docker.io/google/cadvisor ...
latest: Pulling from docker.io/google/cadvisor
ab7e51e37a18: Pull complete
a2dc2f1bce51: Pull complete
3b017de60d4f: Pull complete
Digest: sha256:9e347affc725efd3bfe95aa69362cf833aa810f84e6cb9eed1cb65c35216632a
Status: Downloaded newer image for docker.io/google/cadvisor:latest
a212dc33c9424b6e36485334511e6317bdebc06977b9af374b81b0cab113e724
说明:
  • -d :后台运行此容器

  • --name :启运容器分配名字cadvisor

  • -p :映射端口8082:8080(由于环境8080端口被占用,cadvisor默认端口是8080不建议修改)

  • -v:把宿主机的目录映射到容器中,这些目录都是cadviso需要采集的目录文件和监控内容

  • -storage_driver:需要指定cadvisor的存储驱动、数据库主机、数据库名

  • google/cadvisor:通过cadvisor这个镜像来运行容器,默认会在docker官方仓库把镜像pull下来;

查看cadvisor容器:
[root@master ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                   NAMES
a212dc33c942        google/cadvisor     "/usr/bin/cadvisor..."   2 minutes ago       Up 2 minutes        0.0.0.0:8082->8080/tcp                 cadvisor

现在可以通过浏览访问cadisor的管理页面

cadvisor的基础图形功能也酷炫的

测试是否写入influxdb数据库

3、布署granafa

[root@master ~]# docker run -d --name grafana -p 3000:3000 grafana/grafana
Unable to find image 'grafana/grafana:latest' locally
Trying to pull repository docker.io/grafana/grafana ...
latest: Pulling from docker.io/grafana/grafana
f2aa67a397c4: Pull complete
89573effc7c8: Pull complete
b55c103da375: Pull complete
Digest: sha256:364bec4a39ecbec744ea4270aae35f6554eb6f2047b3ee08f7b5f1134857c32c
Status: Downloaded newer image for docker.io/grafana/grafana:latest
665563143eb74e5e2e76b7a1533cbf67a68590d355b0b22d453eac07e0e0b616
[root@master ~]# docker ps
CONTAINER ID      IMAGE             COMMAND        CREATED          STATUS              PORTS                  NAMES
665563143eb7  grafana/grafana       "/run.sh"   48 seconds ago    Up 47 seconds    0.0.0.0:3000->3000/tcp     grafana

访问WEB管理端

用户名:密码 admin:admin

添加数据源

之后保存并测试连接

新建New dashboard

这里随便选择一个容器做为测试使用,实际环境可根据实际环境填写

保存返回到HOME界面后,如下图

最终的效果图如下



●编号190,输入编号直达本文

●输入m获取文章目录

推荐↓↓↓
 

Linux学习

更多推荐18个技术类微信公众号

涵盖:程序人生、算法与数据结构、黑客技术与网络安全、大数据技术、前端开发、Java、Python、Web开发、安卓开发、iOS开发、C/C++、.NET、Linux、数据库、运维等。


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/gKmdU2RaMl
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/20831
 
527 次点击