10min手写(一):服务器内存监控系统

 

本文作者shengxinjing (woniuppp) · GitHub ,授权发布

本文需要有一定的 Python和前端基础,如果没基础的,请关注我后续的基础教程系列博客

项目地址,可以看到具体的代码,喜欢请加个星星

视频链接

录制中间网出问题了,重启了一下,所以有两部分

本文的目的在于,尽可能用简单的代码,让大家了解内存监控的原理
主题思路

  • 获取内存信息
  • 存储信息
  • 展现
  • 扩展
    • 加主机名,moitor部署在多台机器,不直接插数据库
    • 通过http请求的方式,一台机器起flask专门存数据monitor

69d970fa8ac7a8a35e8aa0db05f24742_b

第一步,我们需要获取内存信息

其实所有的监控项,包括内存数据,都是从文件中读取的,大家执行以下 cat /proc/meminfo就可以看到关于内存的信息,我们关注的是前四行,总内存,空闲内存,缓冲和缓存大小

计算内存占用量公式:

(总内存-空闲内存-缓冲-缓存)/1024Mb

代码呼之欲出 monitor.py

用with打开文件,可以自动关闭,比直接open优雅那么一丢丢


执行文件 Python monitor.py,每一秒打印一条内存信息

我们可以写个很搓的测试代码,占用一点内存,看看数据会不会变
执行下面代码,能看到内存使用量明显多了几M

获取内存数据done!

第二部存储数据库

我们选用mysql

新建表格,我们需要两个字段,内存和时间 sql呼之欲出,简单粗暴

我们的 monitor.py就不能只打印内存信息了,要存储数据库啦,引入mysql模块,代码如下

比之前的多了拼接sql和执行的步骤,具体过程见视频,大家到数据库里执行一下下面的sql,就能看到我们辛辛苦苦获取的内存数据啦

我们的数据库里数据越来越多,怎么展示呢

我们需要flask
我们看下文件结构

flask_web就是我们的web服务代码,template下面的html,就是前端展示的文件,static下面是第三方库

flask_web的代码如下

  • 提供两个路由
    • 根目录渲染文件index.html
    • /data路由去数据库插数据,返回json,供画图使用

前端index.html
highstock的demo页面,copy过来,具体过程见视频

具体观察数据结构的过程,见视频和demo链接,我们做的 就是把数据库里的数据,拼接成前端画图需要的数据,展现出来

这时候前端就能看到图表啦

11

我们并不仅限于此,如果想实时的看到内存,应该怎么搞呢

  • 查询数据时候增加一个时间戳当限制条件,再次查询时,只返回两次查询之间的增量数据
  • 前端动态添加增量结点数据到图表中
  • 代码呼之欲出

python

前端,3秒查一次增量数据

done!两个文件都搞定,double kill!
效果

最终代码直接下载那个木看也行

监控文件monitor.py

flask

前端

代码没有特别注意细节,希望大家喜欢,欢迎指出。

运维开发交流QQ群:238757010
欢迎大家关注公共号,高品质运维开发

22

文章分类 Reboot分享, 前端, 技术博客, 未分类
One comment on “10min手写(一):服务器内存监控系统
  1. 美剧天堂说道:

    我很想研究这个代码可以用在哪里?但是我还是看不懂

发表评论

电子邮件地址不会被公开。

在线交流

数百位业内高手和同行在等你交流
Reboot运维开发分享