Docker容器监控之 CAdvisor+InfluxDB+Granfana
需要了解
- 本文章主要讲述在 华为云Flexus X 实例上搭建开源的容器管理平台,使用的Web UI界面来简化和优化容器及集群的管理和监控
- 选择合适的云服务器: 本文采用的是 华为云服务器 Flexus X 实例(推荐使用)
- 连接方式: 本文通过本地shell 方式,通过
弹性IP
远程连接至服务器,进行部署搭建- 操作系统版本: Huawei Cloud EulerOS 2.0
- Docekr版本: Docker v27.1.1
- Docekr-compose版本: Docker Compose v2.29.1
- 服务器购买链接:华为云服务器 Flexus X 实例
- Docekr搭建可参考文章: 华为FlexusX与Docker+Nginx的高效整合之路
- 详细购买配置实例可参考文章: 快速部署华为云Flexus X实例,开启您的云端之旅
- 部署期间所需资料文件都可私信进行获取
原生命令
查看正在运行的容器
[root@flexusx-251f ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3a888d70efa6 swr.cn-north-4.myhuaweicloud.com/cloud-wzs/portainer/portainer-ce:latest "/portainer" 3 hours ago Up 3 hours 0.0.0.0:8000->8000/tcp, :::8000->8000/tcp, 0.0.0.0:9443->9443/tcp, :::9443->9443/tcp, 9000/tcp portainer
实时显示Docker容器的资源使用情况
[root@flexusx-251f ~]# docker stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
3a888d70efa6 portainer 0.00% 23.55MiB / 11.53GiB 0.20% 597kB / 937kB 0B / 1.27MB 7
e837cf780e7d blog 0.01% 268.7MiB / 11.53GiB 2.28% 68.3MB / 22.4MB 0B / 76.3MB 13
b08207cf4067 Mysql-db 0.02% 205.8MiB / 11.53GiB 1.74% 3.63MB / 33.7MB 0B / 92.7MB 33
通过
docker stats
命令可以很方便的看到当前宿主机上的所有容器的cpu,内存以及网络流量等数据。一般适用于小公司
docker stats
统计结果只是当前宿主机的全部容器,数据资料是实时的 ,没有地方存储,没有健康指标、过线预警等功能
容器监控三剑客
CAdvisor
CAdvisor是一个容器资源监控工具,包括CPU、网络IO、磁盘IO等监控,同时提供了一个WEB页面用于查看容器的实时运行状态。CAdvisor默认存储两分钟的数据,而且只是针对单核物理机。不过CAdvisor==提供了很多数据集成接口== ,支持InfluxDB、Redis、Kafka、Elasticsearch等集成,可以加上对应配置将监控数据发往这些数据库存储起来。
CAdvisor功能主要有两点:
- 展示Host 和 容器 两个层次的监控数据
- 展示历史变化数据
InfluxDB
InfluxDB使用Go语言编写的一个开源分布式时序、时间和指标数据库,无需外部依赖。
CAdvisor默认只能在本机保存最近两分钟的数据,为了持久化数据存储和统一收集展示监控数据,需要将数据存储到InfluxDB中。InfluxDB是一个时序数据库,专门用于数据时序相关数据,很适合存储CAdvisor的数据。而且,CAdvisor本身已经提供了InfluxDB的集成方法,启动容器时指定配置即可。
InfluxDB主要功能:
- 基于时间序列,支持与时间有关的相关函数(如最大、最小、求和等)
- 可度量性:可以实时对大量数据进行计算
- 基于实践:支持任意的实践数据
Granfana
Grafana是一个开源的数据监控分析可视化平台,支持多种数据源配置(支持的数据源包括InfluxDB、MySQL、Elasticsearch、OpenTSDB、Graphite等)和丰富的插件及模版功能,支持图表权限控制和报警。
Grafana主要特性:
- 灵活丰富的图像化选项
- 可以混合多种风格
- 支持白天和夜间模式
- 多个数据源
搭建流程
拉取镜像(由于网络原因,我已经提前将镜像上传至华为云镜像仓库,可直接进行拉取)
[root@flexusx-251f ~]# docker pull swr.cn-north-4.myhuaweicloud.com/cloud-wzs/tutum/influxdb:latest
[root@flexusx-251f ~]# docker pull swr.cn-north-4.myhuaweicloud.com/cloud-wzs/google/cadvisor:latest
[root@flexusx-251f ~]# docker pull swr.cn-north-4.myhuaweicloud.com/cloud-wzs/grafana/grafana:latest
我们通过
docker-compose
容器编排一套带走
# 查看版本
[root@flexusx-251f ~]# docker-compose --version
Docker Compose version v2.29.1
创建文件夹,编写yaml文件,以下是yaml文件内容
[root@flexusx-251f ~]# mkdir cig
[root@flexusx-251f ~]# cd cig/
[root@flexusx-251f cig]# vim docker-compose.yml
[root@flexusx-251f cig]# cat docker-compose.yml
# 指定Compose文件的版本
version: '2.29.1'
# 定义要使用的卷
volumes:
grafana_data: {} # 创建一个名为grafana_data的卷,用于Grafana的数据持久化
# 定义服务(容器)
services:
# InfluxDB服务
influxdb:
image: swr.cn-north-4.myhuaweicloud.com/cloud-wzs/tutum/influxdb:latest # 使用tutum提供的InfluxDB 0.9版本镜像
restart: always # 容器总是重启,无论退出状态如何
environment:
- PRE_CREATE_DB=cadvisor # 在InfluxDB启动时预创建名为cadvisor的数据库
ports:
- "8083:8083" # 将容器的8083端口映射到宿主机的8083端口(InfluxDB的Web管理界面)
- "8086:8086" # 将容器的8086端口映射到宿主机的8086端口(InfluxDB的HTTP API)
volumes:
- ./data/influxdb:/data # 将宿主机的./data/influxdb目录挂载到容器的/data目录,用于数据持久化
# cAdvisor服务
cadvisor:
image: swr.cn-north-4.myhuaweicloud.com/cloud-wzs/google/cadvisor:latest # 使用google提供的cAdvisor最新版本镜像
links:
- influxdb:influxsrv # 将influxdb服务链接到cadvisor,并在cadvisor中设置别名influxsrv
command: -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_host=influxsrv:8086 # 设置cAdvisor的存储驱动为InfluxDB,并指定数据库和主机
restart: always # 容器总是重启
ports:
- "8081:8080" # 将容器的8080端口映射到宿主机的8081端口(cAdvisor的Web界面)
volumes:
- /:/rootfs:ro # 将宿主机的根文件系统挂载为只读,供cAdvisor监控
- /var/run:/var/run:rw # 挂载宿主机的/var/run目录为读写,供cAdvisor访问某些运行时数据
- /sys:/sys:ro # 挂载宿主机的/sys目录为只读,供cAdvisor获取系统信息
- /var/lib/docker/:/var/lib/docker:ro # 挂载宿主机的Docker数据目录为只读,供cAdvisor监控Docker容器
# Grafana服务
grafana:
user: "104" # 设置容器内运行用户为UID 104(可能需要确保UID在宿主机上存在或配置正确)
image: swr.cn-north-4.myhuaweicloud.com/cloud-wzs/grafana/grafana:latest # 使用grafana提供的Grafana最新版本镜像
restart: always # 容器总是重启
links:
- influxdb:influxsrv # 将influxdb服务链接到grafana,并在grafana中设置别名influxsrv
ports:
- "3000:3000" # 将容器的3000端口映射到宿主机的3000端口(Grafana的Web界面)
volumes:
- grafana_data:/var/lib/grafana # 将之前定义的grafana_data卷挂载到容器的/var/lib/grafana目录,用于Grafana的数据持久化
environment:
- GF_SECURITY_ADMIN_USER=admin # 设置Grafana的管理员用户名为admin
- GF_SECURITY_ADMIN_PASSWORD=admin # 设置Grafana的管理员密码为admin
- INFLUXDB_HOST=influxsrv # 设置Grafana连接InfluxDB的主机名为influxsrv(通过links别名)
- INFLUXDB_PORT=8086 # 设置Grafana连接InfluxDB的端口为8086
- INFLUXDB_DB=cadvisor # 设置Grafana要连接的InfluxDB数据库为cadvisor
- INFLUXDB_USER=root # 设置Grafana连接InfluxDB的用户名为root(注意:实际部署时可能需要更改)
- INFLUXDB_PASS=root # 设置Grafana连接InfluxDB的密码为root(注意:实际部署时强烈建议更改)
运行docker-compose
[root@flexusx-251f cig]# docker-compose up
[root@flexusx-251f ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
504ad3c17d38 swr.cn-north-4.myhuaweicloud.com/cloud-wzs/grafana/grafana:latest "/run.sh" 42 seconds ago Up 42 seconds 0.0.0.0:3000->3000/tcp, :::3000->3000/tcp cig-grafana-1
d46793983d47 swr.cn-north-4.myhuaweicloud.com/cloud-wzs/google/cadvisor:latest "/usr/bin/cadvisor -…" 42 seconds ago Up 42 seconds 0.0.0.0:8081->8080/tcp, :::8081->8080/tcp cig-cadvisor-1
c72b95d62bc4 swr.cn-north-4.myhuaweicloud.com/cloud-wzs/tutum/influxdb:latest "/run.sh" 42 seconds ago Up 42 seconds 0.0.0.0:8083->8083/tcp, :::8083->8083/tcp, 0.0.0.0:8086->8086/tcp, :::8086->8086/tcp cig-influxdb-1
放行安全组
放行端口3000,8081,8083
测试访问
CAdvisor收集服务
浏览器访问:http://localhost:8081
可以看到CPU、网络IO、磁盘IO等监控的可视化
influxdb存储服务
浏览器访问:
http://localhost:8083
grafana展现服务
浏览器访问:
http://localhost:3000
我们在docker-compose中指定过账号密码
进去需要修改新密码,在这我们将密码修改为 Huawei12#$
配置步骤
配置数据源
添加数据库
选择influxdb数据源
配置数据库文件
http://InfluxDB:8086
配置面板panel
至此,容器监控三剑客搭建成功
关闭和开启一定要在对应yaml文件路径下
[root@flexusx-251f ~]# cd cig/
[root@flexusx-251f cig]# docker-compose stop
WARN[0000] /root/cig/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion
[+] Stopping 3/3
✔ Container cig-grafana-1 Stopped 0.1s
✔ Container cig-cadvisor-1 Stopped 0.1s
✔ Container cig-influxdb-1 Stopped 10.1s
[root@flexusx-251f cig]# docker-compose ls
NAME STATUS CONFIG FILES
总结
标签:容器,InfluxDB,grafana,华为,828,Docker,Grafana,root,docker From: https://blog.csdn.net/weixin_62782025/article/details/141825072在华为云Flexusx实例上搭建容器监控三剑客(CAdvisor+InfluxDB+Grafana),实现了容器环境的全面监控与可视化分析。CAdvisor提供容器资源使用详情,InfluxDB高效存储时间序列数据,Grafana则将这些数据转化为直观图表。Flexusx实例的强大性能保障了监控系统的稳定运行,提升了运维效率与故障响应速度。此方案助力用户轻松掌握容器状态,优化资源配置,确保应用持续稳定运行。
现在华为云828刚好有活动,如果此服务器和业务也满足你的需求,那赶紧购买部署起来吧!