容器的监控方案其实有很多,有docker自身的docker stats命令、有Scout、有Data Dog等等,本文主要和大家分享一下比较经典的容器开源监控方案组合:cAdvisor+InfluxDB+Grafan

一、概念

1). InfluxDB是什么
nfluxDB是用GO语言编写的一个开源分布式时序、事件和指标数据库,无需外部的依赖,类似的数据库有Elasticsearch、Graphite等等 InfluxDB主要的功能:
基于时间序列:支持与时间有关的相关函数(如最大、最小、求和等)
可度量性:可以实时对大量数据进行计算
基于事件:它支持任意的事件数据 InfluxDB的主要特点:
无结构(无模式):可以是任意数量的列
可拓展的
支持min, max, sum, count, mean, median 等一系列函数,方便统计
原生的HTTP支持,内置HTTP API
强大的类SQL语法
自带管理界面,方便使用 2). cAdvisor是什么
它是Google用来监测单节点的资源信息的监控工具。Cadvisor提供了一目了然的单节点多容器的资源监控功能。Google的Kubernetes中也缺省地将其作为单节点的资源监控工具,各个节点缺省会被安装上Cadvisor
cAvisor是利用docker status的数据信息,了解运行时容器资源使用和性能特征的一种工具
cAdvisor的容器抽象基于Google的lmctfy容器栈,因此原生支持Docker容器并能够“开箱即用”地支持其他的容器类型。
cAdvisor部署为一个运行中的daemon,它会收集、聚集、处理并导出运行中容器的信息。
这些信息能够包含容器级别的资源隔离参数、资源的历史使用状况、反映资源使用和网络统计数据完整历史状况的柱状图。 cAdvisor功能:
展示Host和容器两个层次的监控数据
展示历史变化数据 温馨提示:
由于 cAdvisor 提供的操作界面略显简陋,而且需要在不同页面之间跳转,并且只能监控一个 host,这不免会让人质疑它的实用性。
但 cAdvisor 的一个亮点是它可以将监控到的数据导出给第三方工具,由这些工具进一步加工处理。
我们可以把 cAdvisor 定位为一个监控数据收集器,收集和导出数据是它的强项,而非展示数据 3). Grafana是什么
Grafana是一个可视化面板(Dashboard),有着非常漂亮的图表和布局展示,功能齐全的度量仪表盘和图形编辑器,支持Graphite、zabbix、InfluxDB、Prometheus和OpenTSDB作为数据源 Grafana主要特性:
灵活丰富的图形化选项;
可以混合多种风格;
支持白天和夜间模式;
支持多个数据源; 温馨提示:
在这套监控方案中:InfluxDB用于数据存储,cAdvisor用户数据采集,Grafana用于数据展示

二、单节点部署

温馨提示:
服务器信息:
主机IP:192.168.15.129
主机名:master1
docker版本:18.06.1-ce

1. 下载镜像(可做可不做,在创建容器的时候会如果本地没有会自动下载)

# 下载镜像
[root@master1 ~]# docker pull tutum/influxdb
[root@master1 ~]# docker pull google/cadvisor
[root@master1 ~]# docker pull grafana/grafana # 查看镜像
[root@master1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
grafana/grafana latest 7038dbc9a50c 7 days ago 223MB
google/cadvisor latest 75f88e3ec333 10 months ago 62.2MB
tutum/influxdb latest c061e5808198 2 years ago 290MB

2. 创建InfluxDB容器

# 创建InfluxDB容器
[root@master1 ~]# docker run -itd -p 8083:8083 -p 8086:8086 --name influxdb tutum/influxdb 参数详解:
-itd:已交互模式运行容器,并分配伪终端,并在后台启动容器
-p:端口映射 8083端口为influxdb后台控制端口,8086端口是influxdb的数据端口
--name:给容器起个名字
tutum/influxdb:以这个镜像运行容器(本地有使用本地,没有先去下载然后启动容器) # 查看容器
[root@master1 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f01c5e754bc0 tutum/influxdb "/run.sh" 3 seconds ago Up 2 seconds 0.0.0.0:8083->8083/tcp, 0.0.0.0:8086->8086/tcp influxdb

配置InfluxDB

登录InfluxDB的8083端口,也是管理平台设置管理员用户名密码,并添加数据库

登录URL:http://192.168.15.129:8083

设置管理员用户名密码,并添加数据库

3. 创建cadvisor容器

# 创建cadvisor容器
[root@master1 ~]# docker run -itd --name cadvisor -p 8080:8080 --mount type=bind,src=/,dst=/rootfs,ro --mount type=bind,src=/var/run,dst=/var/run --mount type=bind,src=/sys,dst=/sys,ro --mount type=bind,src=/var/lib/docker/,dst=/var/lib/docker,ro google/cadvisor -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_user=root -storage_driver_password=root -storage_driver_host=192.168.15.129:8086 参数详解:
-itd:已交互模式运行容器,并分配伪终端,并在后台启动容器
-p: 端口映射 8080为cadvisor的管理平台端口
--name:给容器起个名字
--mout:把宿主机的相文目录绑定到容器中,这些目录都是cadvisor需要采集的目录文件和监控内容
google/cadvisor:以这个镜像运行容器(本地有使用本地,没有先去下载然后启动容器)
-storage_driver:需要指定cadvisor的存储驱动这里是influxdb
-storage_driver_db:需要指定存储的数据库
-storage_driver_user:influxdb数据库的用户名(测试可以加可以不加)
-storage_driver_password:influxdb数据库的密码(测试可以加可以不加)
-storage_driver_host:influxdb数据库的地址和端口 # 查看容器
[root@master1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7c2005bb79d1 google/cadvisor "/usr/bin/cadvisor -…" 3 seconds ago Up 2 seconds 0.0.0.0:8080->8080/tcp cadvisor
2fa150d3c52b tutum/influxdb "/run.sh" 10 minutes ago Up 10 minutes 0.0.0.0:8083->8083/tcp, 0.0.0.0:8086->8086/tcp influxdb

查看cadvisor管理平台
登录URL:http://192.168.15.129:8080

登录数据库查看有没有把采集的数据写入(SHOW MEASUREMENTS执行这个命令)

得到上面的结果说明已经采集到数据并且写入到数据库了

4. 创建grafana容器

# 创建grafana容器
[root@master1 ~]# docker run -itd --name grafana -p 3000:3000 grafana/grafana 参数详解:
-itd:已交互模式运行容器,并分配伪终端,并在后台启动容器
-p: 端口映射 3000为grafana的管理平台端口
--name:给容器起个名字
grafana/grafana:以这个镜像运行容器(本地有使用本地,没有先去下载然后启动容器) # 查看容器
[root@master1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
57f335665902 grafana/grafana "/run.sh" 2 seconds ago Up 1 second 0.0.0.0:3000->3000/tcp grafana
7c2005bb79d1 google/cadvisor "/usr/bin/cadvisor -…" 15 minutes ago Up 15 minutes 0.0.0.0:8080->8080/tcp cadvisor
2fa150d3c52b tutum/influxdb "/run.sh" 25 minutes ago Up 25 minutes 0.0.0.0:8083->8083/tcp, 0.0.0.0:8086->8086/tcp influxdb

配置granfana
登录URL:http://192.168.15.129:3000
默认用户名:admin
默认密码:admin
温馨提示:
首次登录会提示修改密码才可以登录,我这里修改密码为admin

得到上面的结果表示整个监控已经部署完成并可以对基础监控进行实施监控,具体需要监控什么,grafana怎么样排版,怎样起名字,根据个人的业务需求来进行设置即可 

三、Swarm多节点部署

刚刚上面的例子是在一台主机上监控一台主机的容器信息,这里我们要使用Swarm的集群部署多台主机容器之间的监控
温馨提示:
主机IP:192.168.15.129 主机名:master1 角色:Swarm的主 granfana容器 influxdb容器 cadvisor容器
主机IP:192.168.15.130 主机名:node1 角色:Swarm的node节点 cadvisor容器
主机IP:192.168.15.131 主机名:node2 角色:Swarm的node节点 cadvisor容器

1. 准备工作

# 创建InfluxDB的宿主机目录挂载到容器
[root@master1 ~]# mkdir -p /opt/influxdb # 下载镜像(可做可不做,在创建容器的时候会如果本地没有会自动下载)
[root@master1 ~]# docker pull tutum/influxdb
[root@master1 ~]# docker pull google/cadvisor
[root@master1 ~]# docker pull grafana/grafana # 查看镜像
[root@master1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
grafana/grafana latest 7038dbc9a50c 7 days ago 223MB
google/cadvisor latest 75f88e3ec333 10 months ago 62.2MB
tutum/influxdb latest c061e5808198 2 years ago 290MB

2. 编写创建容器的yml文件

# 编写docker-compose.yml文件
[root@master1 ~]# mkdir test
[root@master1 test]# cat docker-compose.yml
version: '3.7' services:
influx:
image: tutum/influxdb
ports:
- "8083:8083"
- "8086:8086"
volumes:
- "/opt/influxdb:/var/lib/influxdb"
deploy:
replicas: 1
placement:
constraints: [node.role==manager] grafana:
image: grafana/grafana
ports:
- "3000:3000"
depends_on:
- "influx"
deploy:
replicas: 1
placement:
constraints: [node.role==manager] cadvisor:
image: google/cadvisor
ports:
- "8080:8080"
hostname: '{{.Node.Hostname}}'
command: -logtostderr -docker_only -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_host=influx:8086
volumes:
- /:/rootfs:ro
- /var/run:/var/run:rw
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
depends_on:
- influx
deploy:
mode: global volumes:
influx:
driver: local
grafana:
driver: local

3. 创建Swarm集群

# 在master1上执行
[root@master1 test]# docker swarm init --advertise-addr 192.168.15.129
Swarm initialized: current node (xtooqr30af6fdcu51jzdv79wh) is now a manager. To add a worker to this swarm, run the following command:
# 这里已经提示使用下面的命令在node节点上执行就可以加入集群(前提docker服务一定是启动的)
docker swarm join --token SWMTKN-1-3yyjydabd8v340kptius215s29rbsq8tviy00s08g6md1y25k2-81tp7lpv114a393g4wlgx4a30 192.168.15.129:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions. # 在node1和node2上执行
[root@node1 ~]# docker swarm join --token SWMTKN-1-3yyjydabd8v340kptius215s29rbsq8tviy00s08g6md1y25k2-81tp7lpv114a393g4wlgx4a30 192.168.15.129:2377
This node joined a swarm as a worker [root@node2 ~]# docker swarm join --token SWMTKN-1-3yyjydabd8v340kptius215s29rbsq8tviy00s08g6md1y25k2-81tp7lpv114a393g4wlgx4a30 192.168.15.129:2377
This node joined a swarm as a worker. # 在master1上查看集群主机
[root@master1 test]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
xtooqr30af6fdcu51jzdv79wh * master1 Ready Active Leader 18.06.1-ce
y24c6sfs3smv5sd5h7k66x8zv node1 Ready Active 18.06.1-ce
k554xe59lcaeu1suaguvxdnel node2 Ready Active 18.06.1-ce

4. 创建集群容器

# 创建集群容器
[root@master1 test]# docker stack deploy -c docker-compose.yml swarm-monitor
Creating network swarm-monitor_default
Creating service swarm-monitor_cadvisor
Creating service swarm-monitor_influx
Creating service swarm-monitor_grafana # 查看创建的容器
[root@master1 test]# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
wn36f7be6i5a swarm-monitor_cadvisor global 3/3 google/cadvisor:latest *:8080->8080/tcp
ufn3lqbhbww3 swarm-monitor_grafana replicated 1/1 grafana/grafana:latest *:3000->3000/tcp
lf0z6dp1u8sn swarm-monitor_influx replicated 1/1 tutum/influxdb:latest *:8083->8083/tcp, *:8086->8086/tcp # 查看容器的服务
[root@master1 test]# docker service ps swarm-monitor_cadvisor
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
vy1kqg5u8x3f swarm-monitor_cadvisor.k554xe59lcaeu1suaguvxdnel google/cadvisor:latest node2 Running Running about a minute ago
a08b5bysra3d swarm-monitor_cadvisor.y24c6sfs3smv5sd5h7k66x8zv google/cadvisor:latest node1 Running Running about a minute ago
kkca4kyojgr2 swarm-monitor_cadvisor.xtooqr30af6fdcu51jzdv79wh google/cadvisor:latest master1 Running Running 59 seconds ago [root@master1 test]# docker service ps swarm-monitor_grafana
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
klyjl7rxzmoz swarm-monitor_grafana.1 grafana/grafana:latest master1 Running Running about a minute ago [root@master1 test]# docker service ps swarm-monitor_influx
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
pan5yvwq7b79 swarm-monitor_influx.1 tutum/influxdb:latest master1 Running Running about a minute ago

5. 访问web测试
1) 访问influxdb并创建数据库
登录InfluxDB的8083端口,并添加数据库
登录URL:http://192.168.15.129:8083

2) 访问cadvisor
登录URL:http://192.168.15.129:8080
登录数据库查看有没有把采集的数据写入

3) 访问grafana并配置
登录URL:http://192.168.15.129:3000
默认用户名:admin
默认密码:admin
温馨提示:
首次登录会提示修改密码才可以登录,我这里修改密码为admin

这个动图比较长 主要是对grafana的配置操作,注意里面的alpine_test容器不是和集群一块创建的是我单独创建的  

做到以上的效果,说明已经部署成功了,具体的配置方案就是因需求而异了

cAdvisor+InfluxDB+Grafana 监控Docker的更多相关文章

  1. cAdvisor+Prometheus+Grafana监控docker

    cAdvisor+Prometheus+Grafana监控docker 一.cAdvisor(需要监控的主机都要安装) 官方地址:https://github.com/google/cadvisor ...

  2. 使用cAdvisor+Influxdb+Grafana监控系统

      今天准备开始研究研究当前非常流行的Grafana+Influxdb监控系统,两者都是非常轻量级的应用但是功能却异常强大,可以说Grafana在作图显示方面真的毫不逊色与Cacti. 组件介绍 cA ...

  3. 7、Docker监控方案(cAdvisor+InfluxDB+Grafana)

    一.组件介绍 我们采用现在比较流行的cAdvisor+InfluxDB+Grafana组合进行Docker监控. 1.cAdvisor(数据采集) 开源软件cAdvisor(Container Adv ...

  4. docker容器监控:cadvisor+influxdb+grafana

    cadvisor+influxdb+grafana可以实现容器信息获取.存储.显示等容器监控功能,是目前流行的docker监控开源方案. 方案介绍 cadvisor Google开源的用于监控基础设施 ...

  5. docker监控方案实践(cadvisor+influxdb+grafana)

    一.概要 1.1 背景 虚拟化技术如今已经非常热门,如果你不知道什么是虚拟化,那你应该了解虚拟机.虚拟化技术如同虚拟机一样,用于将某些硬件通过软件方式实现"复制",虚拟出" ...

  6. (原)ubuntu下cadvisor+influxdb+grafana+supervisord监控主机和docker的containers

    ubuntu下cadvisor+influxdb+grafana+supervisord监控主机和docker的containers(运行在主机上) 适用于类ubuntu系统.amd64. 1. in ...

  7. 使用Telegraf + Influxdb + Grafana 监控SQLserver服务器的运行状况

    使用Telegraf + Influxdb + Grafana 监控SQLserver服务器的运行状况 前言 本文在Debian9下采用Docker的方式安装Telegraf + Influxdb + ...

  8. 在Marathon 上部署 cAdvisor + InfluxDB + Grafana Docker监控

    关于 Docker 容器的监控,google cAdvisor 是个很好的工具,但是它默认只显示实时数据,不储存历史数据.为了存储和显示历史数据.自定义展示图,可以把将cAdvisor与InfluxD ...

  9. 容器监控:cadvisor+influxdb+grafana

    cAdvisor:Google开源的工具,用于监控Docker主机和容器系统资源,通过图形页面实时显示数据,但不存储:它通过宿主机/proc./sys./var/lib/docker等目录下文件获取宿 ...

随机推荐

  1. Python-IDLE实现清屏

    1.将下面文件复制到命名为ClearWindow.py的文件下,移动到 …Python\Python36-32\Lib\idlelib下. ############################## ...

  2. python3.4连接mysql5.7数据库增删改查

    #!/usr/bin/env python # -*- coding:utf-8 -*- # __author__ = "blzhu" """ pyt ...

  3. AngularJS实战之Controller之间的通信

    我们时常会在不同controller之间进行通信,接下来就介绍三种controller之间的通信方式 一.使用$on.$emit和$broadcast进行controller通信 虽然AngularJ ...

  4. GPS 编程笔记

    1.在GPS系统内,经纬度的显示方式一般都可以根据自己的爱好选择,一般有"hddd.ddddd"(度.度),"hddd*mm.mmm"(度.分. 分),&quo ...

  5. linux systemctl 常用用法简介

    主要介绍systemctl的几个功能如下: 1.查看某个服务的状态 2.关闭某个服务 3.开启某个服务 4.设置某个为开机自启动 5.关闭某个服务为开机不启动 6.查看所有开启启动的服务 1.查看某个 ...

  6. 基于脚本的nodemanager管理器

    Step 6: Configure Node Manager on the Managed Servers虚拟机环境: 管理服务器IP:192.168.227.10  AdminServer 受管服务 ...

  7. Alpha阶段敏捷冲刺(六)

    1.站立式会议 提供当天站立式会议照片一张 2.每个人的工作 (有work item 的ID),并将其记录在码云项目管理中: 昨天已完成的工作. 祁泽文:查找了单词统计的方法. 徐璐琳:通过" ...

  8. java锁类型

    转载链接在每个锁类型后边 线程锁类型 1.自旋锁 ,自旋,jvm默认是10次吧,有jvm自己控制.for去争取锁 锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchroni ...

  9. Hdu1054 Strategic Game(最小覆盖点集)

    Strategic Game Problem Description Bob enjoys playing computer games, especially strategic games, bu ...

  10. 创建Pods私有库

    Pods私有库创建步骤 创建私有 Spec Repo 创建Pod项目工程文件 创建podspec文件 本地测试podsspec文件 向Spec Repo提交podspec Pod库使用 更新维护pos ...