0%

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

为什么需要监控??

1
2
3
4
5
6
7
8
9
10
11
12
13
对于一个物理机上运行多个容器应用时,容器的运行情况如:CPU使用率、内存使用率、网络状态、磁盘空间等信息,都是需要去了解的,因此监控是必须的。对于容器的监控方案可谓多种多样,本身自带命令docker stats

root at tiger-ali in ~
$ docker stats

CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
5219998e1a62 0.00% 26.06 MiB / 1.953 GiB 1.30% 41.7 kB / 866 kB 6.36 MB / 201 kB 14
fad0feb2c56a 0.00% 23.62 MiB / 1.953 GiB 1.18% 243 kB / 8.23 MB 3.99 MB / 8.79 MB 9
3b484bc89bca 0.00% 18.37 MiB / 1.953 GiB 0.92% 2.24 MB / 94.8 MB 65.5 kB / 0 B 9
7f27b87e7ddd 0.00% 928 KiB / 1.953 GiB 0.05% 1.12 kB / 0 B 1.49 MB / 0 B 1


一款开源方案cAdvisor+InfluxDB+Grafana

组件简介

cAdvisor:用于数据采集

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

InfluxDB:用于数据存储

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

InfluxDB主要特色功能

1
2
3
4
5
基于时间序列,支持与时间有关的相关函数(如最大,最小,求和等);

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

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

InfluxDB主要特点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
无结构(无模式)

可以是任意数量的列

可拓展的;

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

原生的HTTP支持,内置HTTP API

强大的类SQL语法

自带管理界面,方便使用

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

Grafana: 用于数据展示

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

1
2
3
4
5
6
7
8
9
Grafana主要特性:

灵活丰富的图形化选项

可以混合多种风格

支持白天和夜间模式

多个数据源。



安装布署过程

首先得有docker环境,这个文章有好多,前面的文章也有介绍

部署influxDB服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
root at tiger-ali in ~
$ docker run -d --name influxdb -p 8086:8086 -p 8083:8083 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
1
2
3
4
5
6
7
8
9
说明:

-d :后台运行此容器

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

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

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

查看容器

1
2
3
4
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5219998e1a62 tutum/influxdb "/run.sh" 15 minutes ago Up 15 minutes 0.0.0.0:8083->8083/tcp, 0.0.0.0:8086->8086/tcp influxdb

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

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

创建管理用户

创建完成如下图

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
root at tiger-ali in /tmp 
$ docker exec -it influxdb influx
Visit https://enterprise.influxdata.com to register for updates, InfluxDB server management, and monitoring.
Connected to http://localhost:8086 version 1.0.0
InfluxDB shell version: 1.0.0
> show databases
name: databases
---------------
name
_internal

> show users
user admin



> create database "cadvisor"
> show databases
name: databases
---------------
name
_internal
cadvisor

> CREATE USER admin WITH PASSWORD '123456' WITH ALL PRIVILEGES
> show users
user admin
admin true

布署cadvisor服务

1
2
3
4
5
6
7
8
9
10
11
12
root at tiger-ali in /tmp
$ 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

说明:

1
2
3
4
5
6
7
8
9
10
11
12
-d :后台运行此容器

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

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

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

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

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

查看cadvisor容器:

1
2
3
4
5
6
root at tiger-ali in ~ 
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9b7b5d4228a4 tutum/influxdb "/run.sh" 3 minutes ago Exited (137) About a minute ago influxdb
fad0feb2c56a grafana/grafana "/run.sh" 17 minutes ago Up 17 minutes 0.0.0.0:3000->3000/tcp grafana

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

测试是否写入influxdb数据库

布署granafa

1
2
root at tiger-ali in ~   
$ docker run -d --name grafana -p 3000:3000 grafana/grafana

访问WEB管理端
添加数据源
新建New dashboard