软件需要显示服务器的资源信息(CPU、内存、网络、硬盘等),但是软件是在Docker容器中运行。
目前方案
通过ssh在主机上远程运行ps、free等指令,获取相应的信息。这种方案需要代码配置主机的IP,以及用户名和密码,一方面对于安全性来说不好,另一方面容器和主机通过IP进行了耦合,所以想看看有没有其他的方案。
要求:
- 开源
- 可以本地部署,也可以容器部署
- 在容器中部署,可以监控主机的资源
- 对系统资源占用的越小越好
- 需要支持ARM架构
zabbix
Zabbix:企业级开源监控解决方案
功能非常齐全,手册非常详细。
server没有windows版本,agent有windows版本;
但是zabbix感觉有些重,需要部署多个容器。
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开发的,psutil可以在容器中获取主机信息,参考: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/”硬编码改为变量,有些犯懒了,不想改。
可以考虑使用psutil修改原来的代码,这样可以不用保存密码和主机IP,应该也能解决问题。
也可以考虑把对应的文件从主机映射到容器中,例如:如果要检测主机的启动时间-v /proc/uptime:/proc/uptime:ro
但是有些文件如果从主机映射到容器,可能会影响容器的运行,这个就需要一个一个测试了。
netdata
Learn Netdata
netdata基本功能开源,高级功能收费,部署较为简单(一个容器即可),对系统的资源占用可以根据开启的功能优化,
计划使用netdata作为系统资源监控方案
CPU:As a general rule, for modern hardware and VMs, the total CPU consumption of a standalone Netdata installation, including all its components, should be below 5 - 15% of a single core. For example, on 8 core server it will use only 0.6% - 1.8% of a total CPU capacity, depending on the CPU characteristics.
Memory:The memory footprint of Netdata is mainly influenced by the number of metrics concurrently being collected. Expect about 150MB of RAM for a typical 64-bit server collecting about 2000 to 3000 metrics.
Disk:By default, Netdata should not use more than 1GB of disk space, most of which is dedicated for storing metric data and metadata. For typical installations collecting 2000 - 3000 metrics, this storage should provide a few days of high-resolution retention (per second), about a month of mid-resolution retention (per minute) and more than a year of low-resolution retention (per hour).
How to optimize the Netdata Agent’s performance | Learn Netdata
上面的网址中有netdata对系统资源占用的评估,以及优化的说明
netdata好像还没有windows的版本,但是有windows的exporter,Windows Monitoring
- 设置数据采集频率 Reduce the data collection frequency,Reduce collection frequency
- 设置数据保存次数 Running Netdata on embedded devices
- 关闭不需要的采集器和插件 Disable a collector or plugin,Collectors
- 关闭报警和提示 Disable a specific alert,Turn of all alerts and notifications,是关掉部分,还是全部,还没有想好
- 系统是多机部署时,采用分布式部署 How metrics streaming works
- Use memory mode ram or save for the child nodes
- Disable health checks on the child nodes
- Disable machine learning on the child nodes
- 降低数据保留的内存使用 Change how long Netdata stores metrics
- 使用反向代理 Running Netdata behind a reverse proxy
- 关闭dashboard的数据压缩 Disable/lower gzip compression for the dashboard
- 开启KSM Enable KSM in kernel,对ksm不是很了解,需要测试一下对其他服务的影响
这是我的设置: