本人作为学校实验室服务器管理员,应老师要求,研发一套可以监控6台服务器的分布式性能监控系统,命名为Monitor。Monitor可以实时监控各服务器节点的运行时信息,包括:CPU最近1/5/15分钟的平均负载、CPU状态信息、CPU平均使用率、CPU软中断信息、内存使用信息和网络流入流出统计信息。
- 采用gRPC实现多台服务器的分布式监控。
- 相比于top命令的优势是信息更全面(包含CPU的每个核信息),能够更好地发现问题并进行性能优化。
- 采用Docker构建整个项目环境,易于在多台服务器上部署环境与编译项目。
- 各个模块耦合性低,方便扩展。
- docker模块:用Dockerfile指定相应的CMake、gRPC、proto等源码和依赖,构建整个项目环境。编写容器操作脚本指令,用于开启容器并进入docker运行环境。
- monitor模块:采用工厂模式,通过构造Monitor的抽象类定义接口。每3s监控一次/proc目录下的系统“运行时”信息,包括:CPU最近1/5/15分钟的平均负载、CPU状态信息、CPU平均使用率、CPU软中断信息、内存使用信息和网络流入流出统计信息。并为了模拟出真实的性能问题,使用stress工具进行模拟压测,分析相应时刻服务器的cpu状况和中断情况。由于代码的低耦合特性,后续可以扩展更多系统监控。
- gRPC模块:通过gRPC框架,构建出相应的Server与Client。Server在所要监控的服务器部署,负责信息采集;Client端用来监控和展示。并为了降低耦合性,项目每个模块相互独立,只通过调用gRPC服务来进行远程连接。
- protobuf模块:使用protobuf序列化协议,构建出整个项目的数据结构。