软件需要显示服务器的资源信息(CPU、内存、网络、硬盘等),但是软件是在Docker容器中运行。
目前方案
通过ssh在主机上远程运行ps、free等指令,获取相应的信息。这种方案需要代码配置主机的IP,以及用户名和密码,一方面对于安全性来说不好,另一方面容器和主机通过IP进行了耦合,所以想看看有没有其他的方案。
zabbix
在容器中部署zabbix,但是agent需要映射主机路径
docker run --name zabbix-agent -v /:/rootfs -v /var/run:/var/run -v /sys:/sys -v /var/lib/docker/:/var/lib/docker:ro -p 10050:10050 -d zabbix/zabbix-agent:latest
但是zabbix感觉有些重,需要部署4个容器
glances
nicolargo/glances: Glances an Eye on your system. A top/htop alternative for GNU/Linux, BSD, Mac OS and Windows operating systems.
glance是python编写的轻量级系统监控,可以命令行交互,也可以web交互,对系统资源的占用非常小。它是基于psutil开发的,pstuil可以在容器中获取主机信息,参考:Allow specifying /proc and other needed folders · Issue #558 · giampaolo/psutil,以及psutil inside docker container reports host stats · Issue #1011 · giampaolo/psutil
但是看了一下glances的代码,发现其中把“/proc”路径写死在代码中
就需要把所有的“/proc/”硬编码改为变量,有些犯懒了,不想改。
netdata
Learn Netdata
netdata基本功能开源,高级功能收费,部署较为简单(一个容器即可),对系统的资源占用可以根据开启的功能优化,
计划使用netdata作为系统资源监控方案
How to optimize the Netdata Agent’s performance | Learn Netdata
上面的网址中有netdata对系统资源占用的评估,以及优化的说明