首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

第六章 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)

下一篇
举报
领券