专栏首页跟我一起学Docker第六章 Docker实践 构建容器监控系统
原创

第六章 Docker实践 构建容器监控系统

部署Docker的主机和容器日益增多,对主机和容器的监控显得越来越重要了。本章的Docker的实践就是快速构建一个容器的监控系统,通过界面直观反应应用性能和监控能力,对系统中存在的性能问题能做到一目了然,帮助提升系统的可靠性。

6.1 cAdvisor

6.1.1 cAdvisor 简介

cAdvisor(container advisor)是google公司开发的容器监控工具,作为k8s生态中默认部署的容器监控工具。cAdvisor可以监控当前host主机和容器上的CPU、内存、网络,磁盘等资源的使用情况,作为数据搜集的工具还是有着不错的表现,但是在界面显示方便就表现的不足。

cAdvisor在github上的路径为:https://github.com/google/cadvisor

git clone的地址为:https://github.com/google/cadvisor.git

6.1.2 cAdvisor 安装

cAdvisor使用容器的方式安装,首先查找cadvisor镜像:

root@ubuntu:~# docker search google/cadvisor

这里需要注意下,直接搜索cadvisor的话,可能报:

“Error response from daemon: Get https://index.docker.io/v1/search?q=cadvisor&n=25: net/http: TLS handshake timeou” 的错误。

拉取cadvisor的镜像:

root@ubuntu:~# docker pull google/cadvisor

Status: Downloaded newer image for google/cadvisor:latest

下载的镜像信息:

google/cadvisor latest 75f88e3ec333 12 months ago 62.2MB

6.1.3 cAdvisor 运行

运行cAdvisor容器:

root@ubuntu:~# docker run -d --name=cadvisor --volume=/:/rootfs:ro --volume=/var/run:/var/run:rw --volume=/sys:/sys:ro --volume=/var/lib/docker:/var/lib/docker:ro -p 8080:8080 google/cadvisor

4f8de43c6dd898f7ade138dbd22f232a9f36b94990d474e953716ccfb6bb9962

查看容器运行情况:

root@ubuntu:~# docker ps

4f8de43c6dd8 google/cadvisor "/usr/bin/cadvisor -…" 3 minutes ago Up 3 minutes 0.0.0.0:8080->8080/tcp cadvisor

成功运行容器后,可以通过浏览器访问web访问cadvisor的界面:

http://192.168.131.129:8080/

cAdvisor的界面如下所示:

6.1.4 cAdvisor 使用

6.2 InfluxDB

6.2.1 InfluxDB 简介

InfluxDB是一个当下比较流行的时序数据库,InfluxDB使用 Go 语言编写,无需外部依赖,安装配置非常方便,适合构建大型分布式系统的监控系统。

6.2.2 InfluxDB 安装

influxdb采用容器安装的方式,首先查找influxdb的镜像:

root@ubuntu:~# docker search tutum/influxdb

直接拉取最新的镜像即可:

root@ubuntu:~# docker pull tutum/influxdb

Status: Downloaded newer image for tutum/influxdb:latest

6.2.3 InfluxDB 运行

运行influxdb容器:

root@ubuntu:~# docker run -d --name influxdb -p 8083:8083 -p 8086:8086 tutum/influxdb

fad5d38c897bc49aea888126fee24dda4370df3c43bd739738922a06f2d9c275

查看容器运行情况:

root@ubuntu:~# docker ps

1ae8d94981be tutum/influxdb "/run.sh" 21 minutes ago Up 17 minutes 0.0.0.0:8083->8083/tcp, 0.0.0.0:8086->8086/tcp influxdb

运行成功后,influxdb自带web页面,可以很直观在浏览器的页面进行相关的操作,只需要访问主机IP:8083端口即可。

http://192.168.131.129:8083/

成功访问influxdb的页面如图6-2-1所示:

图 6-2-1 influxdb访问页面

创建用户:

创建数据库:

6.2.4 InfluxDB 操作

数据库操作:

1)显示数据库

> show databases

2)新建数据库

> create database test

3)删除数据库

> drop database test

4)使用数据库

> use xk_name

数据表操作:

1)显示所有表

> SHOW MEASUREMENTS

2)新建表

insert disk_free, hostname=server01 value=442221834240i 1435362189575692182

从表中查询字段

> select * from disk_free

3)删除表

> drop measurement disk_free

数据操作:

增加数据采用insert的方式,要注意的是 InfluxDB的insert中,表名与数据之间用逗号(,)分隔,tag和field之间用 空格分隔,多个tag或者多个field之间用逗号(,)分隔。

> insert disk_free, hostname=server01 value=442221834240i 1435362189575692182

> select * from disk_free

界面操作:

Influxdb界面操作

6.3 Grafana

6.3.1 Grafana 简介

Grafana是一个开源的度量分析与可视化套件。经常被用作基础设施的时间序列数据和应用程序分析的可视化,它在其他领域也被广泛的使用包括工业传感器、家庭自动化、天气和过程控制等。

6.3.2 Grafana 安装

Grafana采用容器的方式进行安装,搜索对应的官方镜像:

root@ubuntu:~# docker search grafana/grafana

直接拉取最新的镜像:

root@ubuntu:~# docker pull grafana/grafana

Status: Downloaded newer image for grafana/grafana:latest

6.3.3 Grafana 运行

运行grafana容器:

root@ubuntu:~# docker run -d --name grafana -p 3000:3000 grafana/grafana

78011134844f69c8671d13cd1a0124105087d69fab2a51fb999152878efac138

查看容器运行情况:

root@ubuntu:~# docker ps

78011134844f grafana/grafana "/run.sh" 48 seconds ago Up 46 seconds 0.0.0.0:3000->3000/tcp grafana

通过浏览器访问grafana的界面:

http://192.168.131.129:3000/

初始默认的用户和密码是:admin/admin

6.3.3 Grafana 配置

配置influxdb数据源

点击“Add data source”配置数据源:

测试连接的连通性:

配置Dashboard

网络流量统计

创建graph,切换编辑模式“Toggle Edit Mode”, 然后输入自定义SQL查询

SELECT derivative("value") AS "value" FROM "interface_rx" WHERE "host" = 'k8sslave04' AND "type" = 'if_octets' AND "instance" = 'eno16777984'

系统负载

SELECT mean("value") FROM "load_longterm" WHERE "host" = 'k8sslave04' AND $timeFilter GROUP BY time($interval) fill(null)

SELECT mean("value") FROM "load_midterm" WHERE "host" = 'k8sslave04' AND $timeFilter GROUP BY time($interval) fill(null)

SELECT mean("value") FROM "load_shortterm" WHERE "host" = 'k8sslave04' AND $timeFilter GROUP BY time($interval) fill(null)

内存用量

SELECT mean("value") FROM "memory_value" WHERE "type_instance" = 'used' AND $timeFilter GROUP BY time($interval) fill(null)

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 第三章 Docker常用命令

    Docker的环境安装完成之后,那就开始我们的Docker之旅吧。如何学习Docker呢?这是一个值得思考的问题,刚开始接触Docker的时候,对D...

    Librant
  • 第五章 Docker源码分析

    用户是使用Docker Client与Docker Daemon建立通信,并发送请求给后者。

    Librant
  • 第八章 Docker三概念

    Docker跟虚拟化的关系:为了降低应用组件环境配置的复杂性和部署、调试,及其在各种平台上迁移带来的低效性。Docker通过容器来打包应用,在迁移应用组件的时候...

    Librant
  • 如何正确理解Docker生态

    只要你出席任何高科技相关的活动,或在过去18个月读取任何科技相关的文章,你就可能听到过Docker,并且了解它是什么以及做什么用。

    Rainbond开源
  • 如何正确理解Docker生态

    Rainbond开源
  • 【分享吧】带你初识Docker

    一、引言 如今,Docker作为业界领先的轻量级虚拟化容器管理引擎,给全球开发者提供了一种新颖、便捷的软件集成测试与部署之道。Docker借助容器技术彻底释放了...

    企鹅号小编
  • Docker生态会重蹈Hadoop的覆辙吗?(转)

    docker最近一年可真是火,不过刚好看到下面这篇文章,觉得还是很有道理的。转载过来研读并思考一下,转载自这里。

    jeremyxu
  • Docker For Test 系列一:docker简介

    Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。

    测试邦
  • Docker 的第二次死亡

    我清楚地看到了 Go 和 Docker 这两种技术的生态圈发展过程。让我收获最大的并不是这些技术本身,而是技术的变迁和行业的发展。从中,我看到了非常具体的各种思...

    崔庆才
  • Docker(5)- docker version 命令详解

    https://www.cnblogs.com/poloyy/category/1870863.html

    小菠萝测试笔记

扫码关注云+社区

领取腾讯云代金券