python服务端开发调试日志系统_运维开发:python websocket网页实时显示远程服务器日志信息 | linux系统运维...

摘要

用websocket技术,在运维工具部署环境的时候,实时展现部署过程中的信息,或者在浏览器中实时显示程序日志给开发人员看,可以不使用ajax加载服务器日志的形式了。本次使用到的模块有:bottle,bottle-websocket,subprocess.Popen,利用shell中的tailf命令获取最新的日志,再返回给websocket客户端。

功能:用websocket技术,在运维工具的浏览器上实时显示远程服务器上的日志信息

一般我们在运维工具部署环境的时候,需要实时展现部署过程中的信息,或者在浏览器中实时显示程序日志给开发人员看。你还在用ajax每隔段时间去获取服务器日志?out了,试试用websocket方式吧

我用bottle框架,写了个websocket服务端,浏览器连接到websocket server,再用python subprocess获取远程服务器的日志信息,subprocess,就是用Popen调用shell的shell命令而已,这样可以获取到实时的日志了,然后再send到websocket server中,那连接到websocket server的浏览器,就会实时展现出来了

用二台服务器来实现这个场景,A服务器是websocket服务端,B服务器是日志端

A服务器是我浏览器本机,websocket服务端也是这台机,IP是:192.168.1.221

B服务器是要远程查看日志的服务器,我这里用:192.168.1.10

以下是A服务器的websocket servet的python代码:

#!/usr/bin/env python

#coding=utf-8

# __author__ = '戴儒锋'

# http://www.linuxyw.com

"""

执行代码前需要安装

pip install bottle

pip install websocket-client

pip install bottle-websocket

"""

from bottle import get, run

from bottle.ext.websocket import GeventWebSocketServer

from bottle.ext.websocket import websocket

users = set()   # 连接进来的websocket客户端集合

@get('/websocket/', apply=[websocket])

def chat(ws):

users.add(ws)

while True:

msg = ws.receive()  # 接客户端的消息

if msg:

for u in users:

u.send(msg) # 发送信息给所有的客户端

else:

break

# 如果有客户端断开连接,则踢出users集合

users.remove(ws)

run(host='0.0.0.0', port=8000, server=GeventWebSocketServer)

记得安装bottle、websocket-client 、bottle-websocket 模块,服务端允许所有的IP访问其8000端口

websocket服务端除了用以上的方法外,还可以用这下面的方法实现:

在电脑桌面,写一个简单的HTML5  javascripts页面,随便命名了,如web_socket.html,这个页面使用了websocket连接到websocket服务端:

html>

#msg{

width:400px; height:400px; overflow:auto; border:2px solid #000000;background-color:#000000;color:#ffffff;

}

实时日志

$(document).ready(function() {

/* !window.WebSocket、window.MozWebSocket检测浏览器对websocket的支持*/

if (!window.WebSocket) {

if (window.MozWebSocket) {

window.WebSocket = window.MozWebSocket;

} else {

$('#msg').prepend("

你的浏览器不支持websocket

");

}

}

/* ws = new WebSocket 创建WebSocket的实例 注意设置对以下的websocket的地址哦*/

ws = new WebSocket('ws://192.168.1.221:8000/websocket/');

/*

ws.onopen  握手完成并创建TCP/IP通道,当浏览器和WebSocketServer连接成功后,会触发onopen消息

ws.onmessage 接收到WebSocketServer发送过来的数据时,就会触发onmessage消息,参数evt中包含server传输过来的数据;

*/

ws.onopen = function(evt) {

$('#msg').append('

websocket连接成功');

}

ws.onmessage = function(evt) {

$('#msg').prepend('

' + evt.data + '');

}

});


版权声明:本文为weixin_39862985原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。