Docker 监控系统说明

系统说明

1
2
3
CentOS:  7.4 | X86_64    
Docker:  18.06 | CE
Monitor: 基于 docker 容器搭建监控系统

Docker 监控组件

1
2
3
cAdvisor: 用于数据采集, 对应镜像:google/cadvisor 
InfluxDB: 用于数据存储, 对应镜像:tutum/influxdb (带有 web 管理界面)
Grafana:  用于数据展示, 对应镜像:grafana/grafana

Docker 监控系统部署过程

1
2
3
4
5
6
1. 创建自定义网络 `monitor`(自定义网络名称), 用于将后期容器加入此网络中, 即实现容器互联
    > Note: 推荐使用自定义网络实现容器互联,而不是使用 --link 参数
2. 准备 docker 镜像
3. 创建 influxdb 容器, 创建数据库用户和数据库
4. 创建 cadvisor 容器
5. 创建 grafana 容器,配置 grafana 监控页面(Dashboard)

开始部署

创建自定义网络

1
2
3
4
5
6
# 默认创建 bridge 网络
$ docker network create monitor
ccbb8f8e0b0f28cc9039104ee2a55f9eb2cd4451c1446946b5d11386e4dd6a0c

$ docker network ls
ccbb8f8e0b0f        monitor             bridge              local

准备 docker 镜像

拉去镜像前先配置加速器,否则 pull 过程会及其缓慢且容易中断… 233333~~~ (Note: 这里给出中科大的镜像加速站点:https://docker.mirrors.ustc.edu.cn/)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# Step1: 配置加速[optional]

$ vim /lib/systemd/system/docker.service
# 找到 ExecStart=/usr/bin/dockerd
# 添加 --registry-mirror=<加速地址>
ExecStart=/usr/bin/dockerd --registry-mirror=https://docker.mirrors.ustc.edu.cn/

$ systemctl daemon-reload
$ systemctl restart docker

# Step2: 拉去镜像
$ docker pull google/cadvisor
$ docker pull tutum/influxdb
$ docker pull grafana/grafana

创建 influxdb 容器

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 启动容器,基镜像采用 tutum/influxdb
$ docker run --name influxdb --net monitor --restart always -p 8083:8083 -p 8086:8086 -d tutum/influxdb

# 参数说明:
#   --name      启运容器分配名字influxdb
#   --net       把容器加入到新的网络 monitor
#   --restart   保证容器实例挂掉或者服务器重启后能够自动重启
#   -p          映射端口,8083端口为infuxdb的webd端控制端口,8086端口是infuxdb的数据端口
#   -d          后台运行此容器

# 查看运行结果
$ docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                  PORTS                                            NAMES
26e4aa121715        tutum/influxdb      "/run.sh"                1 second ago        Up Less than a second   0.0.0.0:8083->8083/tcp, 0.0.0.0:8086->8086/tcp   influxdb

创建数据库用户

open host:8083

1
2
3
4
5
# 创建 cadvisor 数据库:cadvisor; 用户 root; 密码 <xxx>(写入自己的密码)
Query: CREATE USER "root" WITH PASSWORD "<xxx>" WITH ALL PRIVILEGES

# 输入完成,回车,即可完成操作
# Note:All PRIVILEGES 指给 root 给与所有特权

创建数据库

1
2
3
# 创建用于存储 cadvisor 采集到的数据的数据库:cadvisor

Query: CREATE DATABASE "cadvisor"

创建 cadvisor 容器

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# 启动容器,基镜像采用 google/cadvisor
$ docker run --name cadvisor --net monitor --restart always -p 8080:8080 --volume=/:/rootfs:ro --volume=/var/run:/var/run:rw --volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker:ro --volume=/cgroup:/cgroup:ro --privileged=true --userns=host -d google/cadvisor -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_host=influxdb:8086

# 参数说明:
#   --volume    把宿主机目录挂载到容器中,这些目录都是cadvisor需要采集的目录文件和监控内容 [:ro 表示只读权限]
#   -storage_driver         指定 cadvisor 的存储驱动
#   -storage_driver_db      数据库名称
#   -storage_driver_host    数据库主机地址
# [可选用的参数]
#   -storage_driver_user        指定用户名, 默认是root
#   -storage_driver_password    指定指定密码, 默认是root

# 查看运行结果
$ docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                  PORTS                                            NAMES
430ec6291596        google/cadvisor     "/usr/bin/cadvisor -…"   1 second ago        Up Less than a second   0.0.0.0:8080->8080/tcp                           cadvisor

cAdvisor 应用容器启动成功后,通过 Web 浏览器访问地址 http://docker-host-ip:8080,便可以查看cAdvisor监控工具所收集到的Docker主机和容器的资源统计信息

验证 cAdvisor 是否已经向 InfluxDB 存入数据

  • 打开 http://host:8083/ 的 InfluxDB 管理界面
  • 点击右上角 Database 切换到 cadvisor 数据库
  • 然后在输入框输入 SHOW MEASUREMENTS 可以看到已经创建了很多个表

创建 grafana 容器

1
2
3
4
5
6
7
# 启动容器,基镜像采用 grafana/grafana
$ docker run --name grafana --net monitor --restart always -p 3000:3000 -d grafana/grafana

# 查看运行结果
$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                  PORTS                                            NAMES
6fcd1a9da386        grafana/grafana     "/run.sh"                1 second ago        Up Less than a second   0.0.0.0:3000->3000/tcp                           grafana

Grafana 平台配置及展示

通过 Web 浏览器访问地址 http://docker-host-ip:3000, 登录 Grafana 管理平台. 默认账户密码(admin/admin)

添加数据源 Add data source

新建面板 New dashboard

See Also

Thanks to the authors 🙂