亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > 建站經驗 > 正文

django+tornado實現實時查看遠程日志的方法

2019-11-02 14:12:31
字體:
來源:轉載
供稿:網友

大致思路:

1.利用tornado提供的websocket功能與瀏覽器建立長連接,讀取實時日志并輸出到瀏覽器

2.寫一個實時讀取日志的腳本,利用saltstack遠程執行,并把實時日志發往redis中。

3.tornado讀取redis中的信息,發往瀏覽器。

此過程用到了redis的發布和訂閱功能。

先看一下tornado中是如何處理的:

import osimport sysimport tornado.websocketimport tornado.webimport tornado.ioloopimport redisimport salt.clientfrom tornado import genfrom tornado.escape import to_unicodefrom logs.utility import get_last_linesfrom logs import settingsclass SubWebSocket(tornado.websocket.WebSocketHandler): """ 此handler處理遠程日志查看 """ def open(self, *args, **kwargs):  print("opened") @gen.coroutine def on_message(self, message):  # 主機名,要查看的日志路徑,運行腳本的命令這些信息從瀏覽器傳過來  hostname, log_path, cmd = message.split("||")  local = salt.client.LocalClient()  r = redis.StrictRedis(host=settings.REDIS_HOST, port=settings.REDIS_PORT,        password=settings.REDIS_PASSWD, db=5)  # 訂閱頻道,服務器和日志路徑確定一個頻道  key = settings.LOG_KEY.format(server=hostname.strip(), log_path=log_path.strip())  channel = r.pubsub()  channel.subscribe(key)  # 異步方式執行命令,遠程運行腳本  local.cmd_async(hostname, "cmd.run", [cmd])  try:   while True:    data = channel.get_message()    if not data:     # 如果讀取不到消息,間隔一定時間,避免無謂的CPU消耗     yield gen.sleep(0.05)     continue    if data["type"] == "message":     line = format_line(data["data"])     self.write_message(line)  except tornado.websocket.WebSocketClosedError:   self.close() def on_close(self):  global FLAG  FLAG = False  print("closed")def format_line(line): line = to_unicode(line) if "INFO" in line:  color = "#46A3FF" elif "WARN" in line:  color = "#FFFF37" elif "ERROR" in line:  color = "red" elif "CRITICAL" in line:  color = "red" else:  color = "#FFFFFF" return "<span >{}</span>".format(color, line)class EchoWebSocket(tornado.websocket.WebSocketHandler): def open(self):  print("WebSocket opened") @gen.coroutine def on_message(self, message):  log = message  print "log file: ", log  try:   with open(log, 'r') as f:    for line in get_last_lines(f):     line1 = format_line(line)     self.write_message(line1)    while True:     line = f.readline()     if not line:      yield gen.sleep(0.05)      continue     self.write_message(format_line(line.strip()))  except tornado.websocket.WebSocketClosedError as e:   print e   self.close() # def check_origin(self, origin): #  print origin, self.request.headers.get("Host") #  # super(EchoWebSocket, self).check_origin() #  return True def on_close(self):  print("WebSocket closed")class Application(tornado.web.Application): def __init__(self):  handlers = [   (r'/log/', MainHandler), # 提供瀏覽頁面,頁面中的JS與服務器建立連接   (r'/log/local', EchoWebSocket), # 處理本地日志實時查看,比較簡單   (r'/log/remote', SubWebSocket), # 處理遠程日志實時查看,稍微復雜  ]  settings = {   "debug": True,   "template_path": os.path.join(os.path.dirname(__file__), "templates"),   "static_path": os.path.join(os.path.dirname(__file__), "static"),  }  super(Application, self).__init__(handlers, **settings)class MainHandler(tornado.web.RequestHandler): def get(self):  # 要查看的日志路徑  log = self.get_argument("log", None)  # hostname實際上是saltstack中這臺機器對應的minion id  hostname = self.get_argument("hostname", None)  # 本地日志還是遠程日志  type = self.get_argument("type", "local")  # 運行讀取實時日志的腳本,參數比較多,后面會有  cmd = self.get_argument("cmd", "")  context = {   "log": log,   "hostname": hostname,   "type": type,   "cmd": cmd,  }  self.render("index.html", **context)
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产www精品| 亚洲精品乱码久久久久久金桔影视| 欧美午夜精品伦理| 91中文精品字幕在线视频| 亚洲精品永久免费精品| 欧美成在线视频| 色青青草原桃花久久综合| 性视频1819p久久| 亚洲在线视频福利| 清纯唯美亚洲激情| 热草久综合在线| 亚洲欧洲午夜一线一品| 精品亚洲一区二区| 久久成人精品视频| 97久久精品视频| 三级精品视频久久久久| 综合av色偷偷网| 国产精品久久久久久婷婷天堂| 国内精品免费午夜毛片| 福利一区福利二区微拍刺激| 日韩av观看网址| 欧美激情一级精品国产| 亚洲少妇激情视频| 爽爽爽爽爽爽爽成人免费观看| 中文精品99久久国产香蕉| 97国产精品人人爽人人做| 欧美综合一区第一页| 中文在线资源观看视频网站免费不卡| 亚洲精品美女免费| 一区二区在线视频播放| 国产成人精品免高潮费视频| 日韩av免费在线播放| 日韩欧美国产一区二区| 国产精品入口尤物| 亚洲精品美女久久久| 国产99视频精品免视看7| 亚洲精品久久视频| 欧美亚洲在线观看| 68精品久久久久久欧美| 91免费在线视频| 久久视频免费观看| 久久久欧美精品| 在线观看中文字幕亚洲| 亚洲精品午夜精品| 久久精品国产2020观看福利| 欧美国产日本高清在线| 欧美午夜xxx| 日韩网站在线观看| 色综合久久悠悠| 欧美日韩国产第一页| 国产精品99久久久久久白浆小说| 法国裸体一区二区| 91久久国产综合久久91精品网站| 日韩欧美在线免费观看| 日韩大陆欧美高清视频区| 亚洲精品720p| 全亚洲最色的网站在线观看| 欧美极品美女电影一区| 97激碰免费视频| 日韩久久精品成人| 国产精品偷伦视频免费观看国产| 欧美激情免费视频| 亚洲精品第一国产综合精品| 精品一区二区三区四区在线| 久久精品国产亚洲7777| 国产成人久久精品| 国产精品免费福利| 97人人模人人爽人人喊中文字| 日韩在线免费视频观看| 2019亚洲男人天堂| 国产综合在线视频| 97精品久久久中文字幕免费| 俺去了亚洲欧美日韩| 日韩美女写真福利在线观看| 亚洲高清在线观看| 久久精品国产一区二区电影| 中文字幕日韩在线播放| 久久久久久久影院| 中文字幕自拍vr一区二区三区| 欧美日韩另类字幕中文| 国产精品亚洲视频在线观看| 色悠悠久久久久| 国产精品入口福利| 亚洲性夜色噜噜噜7777| 国产一区二区丝袜| 亚洲成人网av| 亚洲免费电影在线观看| 国产精品久久久久久久av大片| 亚洲美女在线观看| 91高清视频免费观看| 亚洲一区精品电影| 久久深夜福利免费观看| 青草成人免费视频| 日韩精品久久久久久久玫瑰园| 中文精品99久久国产香蕉| 亚洲一区精品电影| 精品久久久久久| 亚洲激情电影中文字幕| 国产精品福利小视频| 亚洲最大福利网站| 91亚洲国产精品| 成人激情在线播放| 国产日韩欧美91| www.午夜精品| 91av在线不卡| 日韩在线视频国产| 国产成人精品亚洲精品| 欧美日韩国产成人在线| 亚洲三级 欧美三级| 成人a在线视频| 日韩电影大片中文字幕| 91精品91久久久久久| 国产一区二区免费| 欧美老少配视频| 国产精品丝袜白浆摸在线| 国产一区二区三区在线| 色一区av在线| 日韩在线视频二区| 亚洲一区美女视频在线观看免费| 久久精品久久久久久| 亚洲人成在线观看网站高清| 国产成人鲁鲁免费视频a| 国产精品欧美久久久| 亚洲最新av在线网站| 亚洲视频在线免费观看| 欧美激情2020午夜免费观看| 国产精品美女999| 欧美片一区二区三区| 国产97在线视频| 欧美日韩综合视频网址| 中文日韩在线观看| 日韩最新中文字幕电影免费看| 日韩电视剧在线观看免费网站| 两个人的视频www国产精品| 国产精品久久色| 欧美极品少妇xxxxⅹ喷水| 国语自产偷拍精品视频偷| 欧美成人一区在线| 国产欧美中文字幕| 久久久久久欧美| 欧美性精品220| 亚洲成人网在线观看| 91国在线精品国内播放| 亚洲精品视频久久| 亚洲的天堂在线中文字幕| 中文字幕久精品免费视频| 日韩动漫免费观看电视剧高清| 欧美大学生性色视频| 亚洲精品不卡在线| 国产一区欧美二区三区| 日韩中文字幕网| 国产一区二区三区四区福利| 在线看日韩欧美| 91色琪琪电影亚洲精品久久| 日本精品久久电影| 国产精品偷伦视频免费观看国产| 国产精品v片在线观看不卡| 欧美中文字幕在线播放| 日韩人体视频一二区| 欧美电影院免费观看| 欧美精品第一页在线播放| 久热精品视频在线观看一区| 中文字幕日韩av综合精品| 日韩欧美成人精品|