成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

運維高手十分鐘寫了一個內存監(jiān)控系統(tǒng)

系統(tǒng) 系統(tǒng)運維
本文的目的在于盡可能用簡單的代碼,讓大家了解內存監(jiān)控的原理及思想,更容易去理解Nagios、Zabbix、Ganglia監(jiān)控原理。文章按照具體實現(xiàn)的脈絡進行呈現(xiàn),最后還有視頻教程哦!從零敲出來的全過程。

   本文的目的在于,盡可能用簡單的代碼,讓大家了解內存監(jiān)控的原理及思想,更容易去理解Nagios、Zabbix、Ganglia監(jiān)控原理。文章***還有視頻教程哦!從零敲出來的全過程。

  思路分為下面幾塊:

  1.獲取內存監(jiān)控信息

  2.存儲監(jiān)控信息

  3.數(shù)據(jù)展現(xiàn)

  4.后續(xù)擴展

    a.加主機名,monitor部署在多臺機器,不直接插入數(shù)據(jù)庫

    b.增加CPU,Disk監(jiān)控

    c.通過HTTP請求的方式,啟用一個單獨的Flask專門存儲monitor數(shù)據(jù)

  思路圖:  

 

  ***步:獲取內存信息

  我們通過讀取 /proc/meminfo獲取監(jiān)控數(shù)據(jù)MemTotal、MemFree、Buffers、Cached,咱們常用free -m 其實也是讀取的/pro/meminfo的數(shù)據(jù),順便說一下。

  對于操作系統(tǒng)來說,Buffers、Cached是已經被使用的。

  MemFree=total-used

  對于應用程序來說:

  MemFree=buffers+cached+free

  監(jiān)控物理內存使用:

  內存使用=MemTotal-MemFree-Buffers-Cached

  開擼:monitor.py獲取監(jiān)控數(shù)據(jù)。

  1. def getMem(): 
  2. with open('/proc/meminfo'as f: 
  3. total = int(f.readline().split()[1]) 
  4. free = int(f.readline().split()[1]) 
  5. buffers = int(f.readline().split()[1]) 
  6. cache = int(f.readline().split()[1]) 
  7. mem_use = total-free-buffers-cache 
  8. print mem_use/1024 
  9. while True
  10. time.sleep(1) 
  11. getMem() 

  測試:每秒打印一條數(shù)據(jù)。

  1. [www.51reboot.com@teach memory]$ python mointor.py 2920 
  2.  2919 
  3.  2919 
  4.  2919 
  5.  2919 

  希望內存多變好一些,寫了一個很挫的測試代碼。

  1. # test.py 
  2. s = 'www.51reboot.com'*1000000 
  3. for i in s: 
  4. for j in s: 
  5. s.count(j) 

  執(zhí)行python test.py,會發(fā)現(xiàn)內存占用多了幾M,說明咱們的代碼是OK的。

  第二步:存儲監(jiān)控信息(我們用MySQL)

  我們需要兩個字段,內存和時間 sql呼之欲出,簡單粗暴!

  1. create database memory; 
  2. create memory(memory int,time int

  接下來,我們把monitor.py的數(shù)據(jù)存儲到數(shù)據(jù)庫中,這用到了Python MySQLdb模塊。

  1. import time 
  2. import MySQLdb as mysql 
  3. db = mysql.connect(user="reboot",passwd="reboot123",db="memory",host="localhost"
  4. db.autocommit(True
  5. cur = db.cursor() 
  6. def getMem(): 
  7. with open('/proc/meminfo'as f: 
  8. total = int(f.readline().split()[1]) 
  9. free = int(f.readline().split()[1]) 
  10. buffers = int(f.readline().split()[1]) 
  11. cache = int(f.readline().split()[1]) 
  12. mem_use = total-free-buffers-cache 
  13. t = int(time.time()) 
  14. sql = 'insert into memory (memory,time) value (%s,%s)'%(mem_use/1024,t) 
  15. cur.execute(sql) 
  16. print mem_use/1024 
  17. while True
  18. time.sleep(1) 
  19. getMem() 

  暫時告一段落。

  第三步:數(shù)據(jù)展現(xiàn)(Flask框架)

  代碼結構:

  ├── flask_web.py web后端代碼

  ├── mointor.py 監(jiān)控數(shù)據(jù)獲取

  ├── static 靜態(tài)文件,第三方圖表庫

    │ ├── exporting.js

    │ ├── highstock.js

    │ └── jquery.js

  ├── templates

    │ └── index.html 展示前端頁面

  └── test.py 占用內存的測試代碼

  flask_web.py的代碼如下:

  提供兩個路由。

      ◆根目錄渲染文件index.html。

           ◆/data路由去數(shù)據(jù)庫查數(shù)據(jù),返回json,供畫圖使用。

  1. from flask import Flask,render_template,request 
  2. import MySQLdb as mysql 
  3. con = mysql.connect(user='reboot',passwd='reboot123',host='localhost',db='memory'
  4. con.autocommit(True
  5. cur = con.cursor() 
  6. app = Flask(__name__) 
  7. import json 
  8. @app.route('/'
  9. def index(): 
  10. return render_template('index.html'
  11. @app.route('/data'
  12. def data(): 
  13. sql = 'select * from memory' 
  14. cur.execute(sql) 
  15. arr = [] 
  16. for i in cur.fetchall(): 
  17. arr.append([i[1]*1000,i[0]]) 
  18. return json.dumps(arr) 
  19. if __name__=='__main__'
  20. app.run(host='0.0.0.0',port=9092,debug=True

  #p#

前端index.html

  1. <div id="container" style="height: 400px; min-width: 310px"></div> 
  2. <script> 
  3. $(function () { 
  4. // 使用當前時區(qū),否則東八區(qū)會差八個小時 
  5. Highcharts.setOptions({ 
  6. global: { 
  7. useUTC: false 
  8. }); 
  9. $.getJSON('/data'function (data) { 
  10. // Create the chart 
  11. $('#container').highcharts('StockChart', { 
  12. rangeSelector : { 
  13. selected : 1 
  14. }, 
  15. title : { 
  16. text : '內存數(shù)據(jù)' 
  17. }, 
  18. series : [{ 
  19. name : '本機內存'
  20. data : data, 
  21. tooltip: { 
  22. valueDecimals: 2 
  23. }] 
  24. }); 
  25. }); 
  26. }); 
  27. </script> 

  執(zhí)行python flask_web.py,瀏覽器看數(shù)據(jù)www.51reboot.com:9092,出圖了。

 

  我們并不僅限于此,如果想實時的看到內存,應該怎么搞?

  1.查詢數(shù)據(jù)時候增加一個時間戳當限制條件,只返回兩次查詢之間的增量數(shù)據(jù)。

  2.前端動態(tài)添加增量結點數(shù)據(jù)到圖表中。

  修改flask_web.py。

  1. tmp_time = 0 
  2. @app.route('/data'
  3. def data(): 
  4. global tmp_time 
  5. if tmp_time>0: 
  6. sql = 'select * from memory where time>%s' % (tmp_time/1000) 
  7. else
  8. sql = 'select * from memory' 
  9. cur.execute(sql) 
  10. arr = [] 
  11. for i in cur.fetchall(): 
  12. arr.append([i[1]*1000,i[0]]) 
  13. if len(arr)>0: 
  14. tmp_time = arr[-1][0] 
  15. return json.dumps(arr) 

  前端,3秒查一次增量數(shù)據(jù),根據(jù)自己需求調整,修改index.html。

  1. $.getJSON('/data'function (data) { 
  2. // Create the chart 
  3. $('#container').highcharts('StockChart', { 
  4. chart:{ 
  5. events:{ 
  6. load:function(){ 
  7. var series = this.series[0] 
  8. setInterval(function(){ 
  9. $.getJSON('/data',function(res){ 
  10. $.each(res,function(i,v){ 
  11. series.addPoint(v) 
  12. }) 
  13. }) 
  14. },3000) 
  15. }, 
  16. rangeSelector : { 
  17. selected : 1 
  18. }, 
  19. title : { 
  20. text : 'AAPL Stock Price' 
  21. }, 
  22. series : [{ 
  23. name : 'AAPL'
  24. data : data, 
  25. tooltip: { 
  26. valueDecimals: 2 
  27. }] 
  28. }); 
  29. }); 

  done!兩個文件都搞定,double kill!效果。

 

  后邊改了這么多,大家可能糊涂了,現(xiàn)在給出完整代碼:

  完整代碼大家可以從Github下載

  https://github.com/shengxinjing/my_blog/issues/1

  視頻下載地址:http://pan.baidu.com/s/1i4acpP7

  錄屏的時候網出問題了,所以錄了兩個:

  在線視頻1

  在線視頻2

責任編輯:武曉燕 來源: Reboot運維開發(fā)
相關推薦

2022-04-13 22:01:44

錯誤監(jiān)控系統(tǒng)

2020-12-17 06:48:21

SQLkafkaMySQL

2019-04-01 14:59:56

負載均衡服務器網絡

2022-10-12 23:02:49

Calcite異構數(shù)據(jù)框架

2024-06-19 09:58:29

2021-09-07 09:40:20

Spark大數(shù)據(jù)引擎

2022-06-16 07:31:41

Web組件封裝HTML 標簽

2023-04-12 11:18:51

甘特圖前端

2024-01-29 00:20:00

GolangGo代碼

2023-12-28 08:01:17

SpringAPI數(shù)據(jù)

2015-09-06 09:22:24

框架搭建快速高效app

2012-07-10 01:22:32

PythonPython教程

2024-05-13 09:28:43

Flink SQL大數(shù)據(jù)

2023-11-30 10:21:48

虛擬列表虛擬列表工具庫

2009-04-29 17:35:47

LinuxWebMail系統(tǒng)

2025-03-18 12:20:00

編程

2021-03-30 17:51:25

機器人系統(tǒng)聊天

2019-09-16 09:14:51

2009-10-09 14:45:29

VB程序

2023-07-15 18:26:51

LinuxABI
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中国大陆高清aⅴ毛片 | 亚洲精品国产a久久久久久 午夜影院网站 | 国产精品日本一区二区在线播放 | 天天噜天天干 | 国产特一级黄色片 | 精品一区二区久久久久久久网精 | 久久久美女 | 看一级毛片 | 91av在线影院 | 欧美性网 | 九七午夜剧场福利写真 | 国产日韩精品在线 | 欧美综合网 | 欧美日韩一区二区电影 | 精品亚洲一区二区三区四区五区高 | 狠狠骚 | 国产清纯白嫩初高生视频在线观看 | av网站免费| 久久久久成人精品 | 国产欧美精品在线观看 | 亚洲天堂精品一区 | 国产精品久久久99 | 日本黄色一级视频 | 欧美一级二级在线观看 | 黄免费观看 | 99re在线视频观看 | 第四色影音先锋 | 在线视频国产一区 | 精品国产一区二区三区久久影院 | 亚洲欧美国产毛片在线 | 日日日日日日bbbbb视频 | 久久精品女人天堂av | 中文欧美日韩 | 天天澡天天操 | 日日操av| 日韩一区二区不卡 | 一区二区福利视频 | 国产超碰人人爽人人做人人爱 | com.色.www在线观看 | 午夜免费在线电影 | 中文字幕在线网 |