欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Python寫的一個簡單監控系統

系統 1641 0

市面上有很多開源的監控系統:Cacti、nagios、zabbix。感覺都不符合我的需求,為什么不自己做一個呢

用Python兩個小時徒手擼了一個簡易的監控系統,給大家分享一下,希望能對大家有所啟發

首先數據庫建表

建立一個數據庫“falcon”,建表語句如下:

            
CREATE TABLE `stat` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `host` varchar(256) DEFAULT NULL,
 `mem_free` int(11) DEFAULT NULL,
 `mem_usage` int(11) DEFAULT NULL,
 `mem_total` int(11) DEFAULT NULL,
 `load_avg` varchar(128) DEFAULT NULL,
 `time` bigint(11) DEFAULT NULL,
 PRIMARY KEY (`id`),
 KEY `host` (`host`(255))
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
          

首先我們設計一個web服務,實現如下功能:

1.完成監控頁面展示
2.接受POST提交上來的數據
3.提供json數據GET接口

目錄結構如下:

            
web
├── flask_web.py
└── templates
  └── mon.html
[/code]
flask_web.py
[code]
import MySQLdb as mysql
import json
from flask import Flask, request, render_template
app = Flask(__name__)
db = mysql.connect(user="reboot", passwd="reboot123", \
    db="falcon", charset="utf8")
db.autocommit(True)
c = db.cursor()

@app.route("/", methods=["GET", "POST"])
def hello():
  sql = ""
  if request.method == "POST":
    data = request.json
    try:
      sql = "INSERT INTO `stat` (`host`,`mem_free`,`mem_usage`,`mem_total`,`load_avg`,`time`) VALUES('%s', '%d', '%d', '%d', '%s', '%d')" % (data['Host'], data['MemFree'], data['MemUsage'], data['MemTotal'], data['LoadAvg'], int(data['Time']))
      ret = c.execute(sql)
    except mysql.IntegrityError:
      pass
    return "OK"
  else:
    return render_template("mon.html")

@app.route("/data", methods=["GET"])
def getdata():
  c.execute("SELECT `time`,`mem_usage` FROM `stat`")
  ones = [[i[0]*1000, i[1]] for i in c.fetchall()]
  return "%s(%s);" % (request.args.get('callback'), json.dumps(ones))
  

if __name__ == "__main__":
  app.run(host="0.0.0.0", port=8888, debug=True)


          

這個template頁面是我抄的highstock的示例,mon.html

簡單起見我們只展示mem_usage信息到頁面上

            
            
              Highstock Example
            
            
            
            
            
            
            

web展示頁面完成了,運行起來:

Python flask_web.py 監聽在8888端口上

我們需要做一個agent來采集數據,并上傳數據庫

moniItems.py

            
#!/usr/bin/env python
import inspect
import time
import urllib, urllib2
import json
import socket

class mon:
  def __init__(self):
    self.data = {}

  def getTime(self):
    return str(int(time.time()) + 8 * 3600)

  def getHost(self):
    return socket.gethostname()

  def getLoadAvg(self):
    with open('/proc/loadavg') as load_open:
      a = load_open.read().split()[:3]
      return ','.join(a)
  
  def getMemTotal(self):
    with open('/proc/meminfo') as mem_open:
      a = int(mem_open.readline().split()[1])
      return a / 1024
  
  def getMemUsage(self, noBufferCache=True):
    if noBufferCache:
      with open('/proc/meminfo') as mem_open:
        T = int(mem_open.readline().split()[1])
        F = int(mem_open.readline().split()[1])
        B = int(mem_open.readline().split()[1])
        C = int(mem_open.readline().split()[1])
        return (T-F-B-C)/1024
    else:
      with open('/proc/meminfo') as mem_open:
        a = int(mem_open.readline().split()[1]) - int(mem_open.readline().split()[1])
        return a / 1024
  
  def getMemFree(self, noBufferCache=True):
    if noBufferCache:
      with open('/proc/meminfo') as mem_open:
        T = int(mem_open.readline().split()[1])
        F = int(mem_open.readline().split()[1])
        B = int(mem_open.readline().split()[1])
        C = int(mem_open.readline().split()[1])
        return (F+B+C)/1024
    else:
      with open('/proc/meminfo') as mem_open:
        mem_open.readline()
        a = int(mem_open.readline().split()[1])
        return a / 1024
  
  def runAllGet(self):
    #自動獲取mon類里的所有getXXX方法,用XXX作為key,getXXX()的返回值作為value,構造字典
    for fun in inspect.getmembers(self, predicate=inspect.ismethod):
      if fun[0][:3] == 'get':
        self.data[fun[0][3:]] = fun[1]()
    return self.data

if __name__ == "__main__":
  while True:
    m = mon()
    data = m.runAllGet()
    print data
    req = urllib2.Request("http://jb51.net:8888", json.dumps(data), {'Content-Type': 'application/json'})
    f = urllib2.urlopen(req)
    response = f.read()
    print response
    f.close()
    time.sleep(60)


nohup python moniItems.py >/dev/null 2>&1 & 運行起來


          

訪問 http://jb51.net:8888 就可以看到我們的監控數據了:效果圖如下

Python寫的一個簡單監控系統_第1張圖片


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。。?/p>

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产精品九九久久99视频 | 很黄很污的网站 | 奇米影视第七色 | 亚洲国产精品久久久 | 久久免费在线视频 | 一级黄色片武则天 | 色欧美片视频在线观看 | 91日本在线观看亚洲精品 | 久久夜色精品国产亚洲噜噜 | 中文字幕一区二区精品区 | 男女做性无遮挡免费视频 | 日韩天天干 | 国产精品久久 | 五月婷婷狠狠爱 | 国产亚洲欧美另类第一页 | 国产精品亚洲成在人线 | 欧美日韩操 | 99一区二区三区 | 中文一级毛片 | 性xxxx免费观看视频 | 久久精品人人做人人看最新章 | a网站| 国产精品成在线观看 | 久久久99精品免费观看 | 色噜噜亚洲男人的天堂 | 香蕉综合视频 | 四季久久免费一区二区三区四区 | 国内精品免费一区二区三区 | 欧美一级网站 | 日本激情在线视频 | 天天摸天天做天天爽在线 | 99国内精品 | 午夜男人女人爽爽爽视频 | 亚洲一区二区三区免费在线观看 | 免费xx视频 | 美女被网站大全在线视频 | WW.国产人妻人伦精品 | 免费成人在线网站 | 免费xxx8888| 精品欧美一区二区三区精品久久 | 亚洲一区二区三区久久精品 |