运维开发:pythonwebsocket网页实时显示远程服务器日志信息_第1页
运维开发:pythonwebsocket网页实时显示远程服务器日志信息_第2页
运维开发:pythonwebsocket网页实时显示远程服务器日志信息_第3页
运维开发:pythonwebsocket网页实时显示远程服务器日志信息_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

运维开发:pythonwebsocket⽹页实时显⽰远程服务器⽇志信息功能:⽤websocket技术,在运维⼯具的浏览器上实时显⽰远程服务器上的⽇志信息⼀般我们在运维⼯具部署环境的时候,需要实时展现部署过程中的信息,或者在浏览器中实时显⽰程序⽇志给开发⼈员看。你还在⽤ajax每隔段时间去获取服务器⽇志?out了,试试⽤websocket⽅式吧我⽤bottle框架,写了个websocket服务端,浏览器连接到websocketserver,再⽤pythonsubprocess息,subprocess,就是⽤Popen调⽤shell的shell命令⽽已,这样可以获取到实时的⽇志了,然后再send到websocketserverwebsocketserver获取远程服务器的⽇志信中,那连接到的浏览器,就会实时展现出来了⽤⼆台服务器来实现这个场景,A服务器是websocket服务端,B服务器是⽇志端A服务器是我浏览器本机,websocket服务端也是这台机,IP是:21B服务器是要远程查看⽇志的服务器,我这⾥⽤:0以下是A服务器的websocketserve的python代码:1.#!/usr/bin/envpython2.#coding=utf-83.#__author__戴儒锋'='4.#5.6."""7.执⾏代码前需要安装8.pipinstallbottle9.pipinstallwebsocket-client10.pipinstallbottle-websocket11."""12.frombottleimportget,run13.frombottle.ext.websocketimportGeventWebSocketServer14.frombottle.ext.websocketimportwebsocket15.16.users=set()连接进来的we#bsocket客户端集合17.@get('/websocket/',apply=[websocket])18.defchat(ws):19.users.add(ws)20.whileTrue:4.25.26.msg=接客ws.receive()户端的消息ifmsg:#foruinusers:发送信息给所u.send(msg)有的客户端else:#break27.断开连接#,则踢出28.users.remove(ws)29.run(host='',port=8000,server=GeventWebSocketServer)users集合记得安装bottle、websocket-clien、bottle-websocket模块,服务端允许所有的IP访问其8000端⼝websocket服务端除了⽤以上的⽅法外,还可以⽤这下⾯的⽅法实现:

⾸页亲,你迷路了!亲,你迷路了!亲,该⽹页可能搬家了!输⼊搜索内容在电脑桌⾯,写⼀个简单的HTML5javascripts页⾯,随便命名了,如web_socket.html,这个页⾯使⽤了websocket连接到websocket服务端:1.<!DOCTYPEhtml>2.<html>3.<head>4.</head>.9.<style>#msg{width:400px;height:400px;overflow:auto;border:2pxsolid#000000;color:#ffffff;}</style>10.</head>11.12.<body>0.<p>实时⽇志</p><divid="msg"></div><scriptsrc="/jquery/1.9.1/jquery.min.js"></script><script>$(document).ready(function(){/*!window.WebSocket、window.MozWebSocket检测浏览器对websocket的⽀持*/if(!window.WebSocket){if(window.MozWebSocket){window.WebSocket=window.MozWebSocket;}else{$('#msg').prepend("<p>你的浏览器不⽀持websocket</p>");}}/*ws=newWebSocket创建WebSocket的实例注意设置对以下的websocket的地址哦*/ws=newWebSocket('ws://21:8000/websocket/');/*ws.onopen握⼿完成并创建TCP/IP通道,当浏览器和WebSocketServer连接成功后,会触发onopen消息ws.onmessage接收到WebSocketServer发送过来的数据时,就会触发onmessage消息,参数evt中包含server传输过来的数据;*/ws.onopen=function(evt){$('#msg').append('<li>websocket连接成功</li>');}ws.onmessage=function(evt){$('#msg').prepend('<li>'+evt.data+'</li>');}});41.</script>42.</body>43.</html>注意:WebSocket('ws://21:8000/websocket/');这⾥的21⼀定要改成你的websocket服务端IP,切记到这⾥,就搞定浏览器连接到websocket服务端的场景了,现在要A服务器⾥写⼀段代码,去采集B服务器的实时信息了,其实采集原理很简单,就是使⽤shell中的tailf命令,实时显⽰最新的信息已,我们在这段脚本中,使⽤subprocess.Popen()来远程查看⽇志信息:python代码如下:1.#!/usr/bin/python2.#encoding=utf-83.4.importsubprocess5.importtime6.fromwebsocketimportcreate_connection7.8.#配置远程服务器的IP,帐号,密码,端⼝等,因我做了双机密钥信任,所以不需要密码9.r_user="root"10.r_ip="0"11.r_port=2212.r_log="/tmp/web_socket.log"#远程服务器要被采集的⽇志路径13.14.#websocket服务端地址15.ws_server="ws://21:8000/websocket/"16.17.#执⾏的shell命令(使⽤ssh远程执⾏)18.cmd="/usr/bin/ssh-p{port}{user}@{ip}/usr/bin/tailf{log_path}".format(user=r_user,ip=r_ip,port=r_port,log_path=r_log)19.20.deftailfLog():0."""获取远程服务器实时⽇志,并发送到websocket服务端"""popen=subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)print('连接成功')ws=create_connection(ws_server)#创建websocket连接whileTrue:line=popen.stdout.readline().strip()#获取内容ifline:ws.send(line)#把内容发送到websocket服务端printtime.time()31.if__name__=='__main__':32.tailfLog()⽂章最后再解析subprocess.Popen的原理和功能执⾏websocket服务端脚本和上⾯这个websocket客户端采集脚本,再打开⽤浏览器打开上⾯的html5页⾯后,环境就基本部署好了,双websocket客户端连接到websocket服务端中上⾯脚本指定的r_log="/tmp/web_socket.log"⽇志路径,我们需要⽣成这个⽇志⽂件,并不停地往⾥⾯写⼊⽇志,这样才能在浏览器中实时显⽰效果(真实场景中,可以指定服务器某⽇志,如apache,nginx⽇志等)我们在B服务器写⼀段python代码,然后每隔⼀秒就往r_log="/tmp/web_socket.log"⽇志中写⼊内容:python代码如下:1.#!/usr/bin/envpython2.#coding=utf-83.4.importtime5.importrandom6.log_path='/tmp/web_socket.log'7.while1:8.9.withopen(log_path,'a')asf:f.write('[%s]%s\n'%(time.ctime(),random.random()))time.sleep(1)10.脚本写⼊的内容概是:[TueJul2618:30:412016]0.527242649654[TueJul2618:30:422016]0.21080845298[TueJul2618:30:432016]

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论