大家好,我是SuieKa。一个在学计算机网络方面的小白,也是在校大二学生,学以致用,实操记载,博文若有毛病,请一定留言哟
本博文讲讲容器的监控系统怎么搭建与使用,上手前先了解三个容器镜像,我主要以这三个构建监控平台系统。
1、InfluxDB
官网:https://www.influxdata.com/
InfluxDB是一个分布式的时间序列数据库,它由Go写成,用来存储cAdvisor收集的系统资源数据(IOE)
InfluxDB被广泛应用于存储系统的监控数据,IoT行业的实时数据等场景。
对常见关系型数据库(MySQL)的基础概念对比
概念 | MySQL | InfluxDB |
---|---|---|
数据库(同) | database | database |
表(不同) | table | measurement |
列(不同) | column | tag(带索引的,非必须)、field(不带索引)、timestemp(唯一主键) |
tag set:不同的每组tag key和tag value的集合;
field set:每组field key和field value的集合;
retention policy:数据存储策略(默认策略为autogen)InfluxDB没有删除数据操作,规定数据的保留时间达到清除数据的目的;
series:共同retention policy,measurement和tag set的集合。
2、cAdvisor
官网:https://axibase.com/
cAdvisor(Container Advisor)为容器用户提供了对其运行容器的资源使用和性能特征的理解。 它是一个运行守护程序,用于收集,聚合,处理和导出有关正在运行的容器的信息。 具体而言,对于每个容器,它保留资源隔离参数,历史资源使用和完整历史资源使用的直方图。 此数据按容器和机器范围导出。
cAdvisor是Google开源的工具,用于监控Docker主机和容器系统资源,通过图形页面实时显示数据,但不存储;它通过宿主机/proc、/sys、/var/lib/docker等目录下文件获取宿主机和容器运行信息。
cadvisor不仅可以搜集一台机器上所有运行的容器信息,还提供基础查询界面和http接口,方便其他组件如Prometheus进行数据抓取,或者cadvisor + influxdb + grafna搭配使用。
cAdvisor可以对节点机器上的资源及容器进行实时监控和性能数据采集,包括CPU使用情况、内存使用情况、网络吞吐量及文件系统使用情况
Cadvisor使用Go语言开发,利用Linux的cgroups获取容器的资源使用信息,在K8S中集成在Kubelet里作为默认启动项,官方标配。
3、Grafana
官网:https://grafana.com/
同样,Grafana是一款用Go语言开发的开源数据可视化工具,可以做数据监控和数据统计,带有告警功能。目前使用grafana的公司有很多,如paypal、ebay、intel等。
Grafana支持许多不同的数据源。每个数据源都有一个特定的查询编辑器,该编辑器定制的特性和功能是公开的特定数据来源。 官方支持以下数据源:Graphite,Elasticsearch,InfluxDB,Prometheus,Cloudwatch,MySQL和OpenTSDB等。
每个数据源的查询语言和能力都是不同的。你可以把来自多个数据源的数据组合到一个仪表板,但每一个面板被绑定到一个特定的数据源,它就属于一个特定的组织。
Grafana的7大特点:
1、可视化:快速和灵活的客户端图形具有多种选项。面板插件为许多不同的方式可视化指标和日志。
2、报警:可视化地为最重要的指标定义警报规则。Grafana将持续评估它们,并发送通知。
3、通知:警报更改状态时,它会发出通知。接收电子邮件通知。
4、动态仪表盘:使用模板变量创建动态和可重用的仪表板,这些模板变量作为下拉菜单出现在仪表板顶部。
5、混合数据源:在同一个图中混合不同的数据源!可以根据每个查询指定数据源。这甚至适用于自定义数据源。
6、注释:注释来自不同数据源图表。将鼠标悬停在事件上可以显示完整的事件元数据和标记。
7、过滤器:过滤器允许您动态创建新的键/值过滤器,这些过滤器将自动应用于使用该数据源的所有查询。
它们之间关系:
cAdvisor容器数据采集->InfluxDB容器数据存储->Grafana可视化展示
好了。我们就来构建这样的监控平台
1、操作系统版本和docker版本
[21:21:40 root@wang-tuxing ~]#cat /etc/redhat-release
CentOS Linux release 8.1.1911 (Core)
[21:21:54 root@wang-tuxing ~]#docker -v
Docker version 19.03.8, build afacb8b
2、搭建influxdb (使用docker一条命令解决战斗)
使用docker直接拉取安装镜像
先检查两个端口是否被占用,因为需要使用,也可指其他端口
[08:35:42 root@wang-tuxing ~]#netstat -nltup | grep 8083
[08:35:55 root@wang-tuxing ~]#netstat -nltup | grep 8086
[08:45:55 root@wang-tuxing ~]#netstat -nltup | grep 8081
[21:36:33 root@wang-tuxing ~]#docker run -d -p 8083:8083 -p 8086:8086 --name influxdb tutum/influxdb
Unable to find image 'tutum/influxdb:latest' locally
latest: Pulling from 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 tutum/influxdb:latest
d4652e3f491d10eef3636c7e8bb8f06b6448b0be090d6531d3158be6c0e4587e
查看进程是否跑起来
[22:00:15 root@wang-tuxing ~]#docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d4652e3f491d tutum/influxdb "/run.sh" 14 seconds ago Up 13 seconds 0.0.0.0:8083->8083/tcp, 0.0.0.0:8086->8086/tcp influxdb
客户端访问influxDB:http://192.168.1.102:8083/
若不能正常访问请关闭防火墙,或者放行8083端口
可以创建一个名叫cadvisor的数据库
直接回车就创建了
可以创建一个名叫cadvisor的用户及密码
.
写好后直接回车就创建好了
Show Databases 显示数据库
Create Database 创建数据库
Drop Database 删除数据库
Show Measurements 显示测量
Show Tag Keys 显示标签键
Show Tag Values 显示标签值
Show Retention Policies 显示保留政策
Create Retention Policy 创建保留政策
Drop Retention Policy 删除保留政策
Show Continuous Queries 显示连续查询
Create Continuous Query 创建连续查询
Drop Continuous Query 删除连续查询
Show Users 显示用户
Create User 创建用户
Create Admin User 创建管理员用户
Drop User 删除用户
Show Stats 显示统计
Show Diagnostics 显示诊断
3、搭建cadvisor
[08:38:08 root@wang-tuxing ~]#docker run -d \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--link influxdb:influxdb \
-p 8081:8080 \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:rw \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--link influxdb:influxdb \
-p 8081:8080 \
--name=cadvisor \
google/cadvisor:latest \
-storage_driver=influxdb \
-storage_driver_db=cadvisor \
-storage_driver_host=influxdb:8086
Unable to find image 'google/cadvisor:latest' locally
latest: Pulling from google/cadvisor
ff3a5c916c92: Pull complete
44a45bb65cdf: Pull complete
0bbe1a2fe2a6: Pull complete
Digest: sha256:815386ebbe9a3490f38785ab11bda34ec8dacf4634af77b8912832d4f85dca04
Status: Downloaded newer image for google/cadvisor:latest
c6b52ac4b39a4d547278d3949e5ace77d55d2415fce70ad9f3bbd8a4fcd47b6f
[08:49:03 root@wang-tuxing ~]#docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c6b52ac4b39a google/cadvisor:latest "/usr/bin/cadvisor -…" 9 minutes ago Up 9 minutes 0.0.0.0:8081->8080/tcp cadvisor
–link可以用来链接2个容器,使得源容器(被链接的容器)和接收容器(主动去链接的容器)之间可以互相通信,并且接收容器可以获取源容器的一些数据,如源容器的环境变量。
–volume 数据持久化 数据卷 或挂载
直接客户端访问:http://192.168.1.102:8081/
总使用量
每个核心的使用量
使用分类
不多说,可以看到当打开时,以下有的是动态图,很清晰
这里还可以监控网卡
查看宿主机的容器(点击Docker Containers)
这是刚刚pull的镜像
查询单个容器就直接点击容器查询
下面就会有监控内容
3、安装grafana
[09:06:49 root@wang-tuxing ~]#docker run -d \
-p 3000:3000 \
-e INFLUXDB_HOST=influxdb \
-e INFLUXDB_PORT=8086 \
-e INFLUXDB_NAME=cadvisor \
-e INFLUXDB_USER=cadvisor \ ####INFLUXDB创建的用户
-e INFLUXDB_PASS=password \ ####INFLUXDB创建用户的密码
--link influxdb:influxsrv \
--name grafana \
grafana/grafana
a36d42eaecd1c7a2ae9b120a751200f6b7813448b028ef278e04ea8e66f265e2
[09:07:24 root@wang-tuxing ~]#docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a36d42eaecd1 grafana/grafana "/run.sh" 20 seconds ago Up 18 seconds 0.0.0.0:3000->3000/tcp grafana
-e的作用是指定容器内的环境变量
客户端访问:http://192.168.1.102:3000/
初始用户admin,密码admin
会有提醒修改密码
添加数据源
像前面提到过,数据源支持有很多,我在这里使用InfluxDB
最后点击保存和测试
添加图表
选择 visualization 直观的、形象显示
里面有很多图表选择,比如选择第一个
设置 title为容器内存
influxDB数据库中查询到的内容 cpu 内存 流量
选择 default----memory_usage
监控出图
可以根据筛选容器,来监控具体的项目
这里可以摸索的设置项还有很多,比如一些坐标自定义、显示策略自定义,甚至我们还可以自定义报警策略等等