功能:用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.2.222
B服務器是要遠程查看日志的服務器,我這里用:192.168.2.224
以下是在A服務器的操作(Python2)
安裝:
pip install bottle
pip install websocket-client
pip install bottle-websocket
websocket servet的python代碼:
1 #!/usr/bin/env python
2 #-*- coding:utf-8 -*-
3 from bottle importget, run4 from bottle.ext.websocket importGeventWebSocketServer5 from bottle.ext.websocket importwebsocket6 users = set() #連接進來的websocket客戶端集合
7 @get('/websocket/', apply=[websocket])8 defchat(ws):9 users.add(ws)10 whileTrue:11 msg = ws.receive() #接客戶端的消息
12 ifmsg:13 for u inusers:14 u.send(msg) #發送信息給所有的客戶端
15 else:16 break
17 #如果有客戶端斷開連接,則踢出users集合
18 users.remove(ws)19 run(host='0.0.0.0', port=8000, server=GeventWebSocketServer)
記得安裝bottle、websocket-client?、bottle-websocket?模塊,服務端允許所有的IP訪問其8000端口
websocket服務端除了用以上的方法外,還可以用這下面的方法實現:
http://www.linuxyw.com/831.html
在電腦桌面,寫一個簡單的HTML5 ?javascripts頁面,隨便命名了,如test.html,這個頁面使用了websocket連接到websocket服務端:
1
2
3
4
5
6 #msg{
7 width:400px; height:400px; overflow:auto; border:2px solid #000000;background-color:#000000;color:#ffffff;
8 }9
10
11
12
實時日志
13
14
15
16 $(document).ready(function() {17 /* !window.WebSocket、window.MozWebSocket檢測瀏覽器對websocket的支持*/
18 if(!window.WebSocket) {19 if(window.MozWebSocket) {20 window.WebSocket =window.MozWebSocket;21 } else{22 $('#msg').prepend("
你的瀏覽器不支持websocket
");23 }24 }25 /* ws = new WebSocket 創建WebSocket的實例 注意設置對以下的websocket的地址哦*/26 ws = new WebSocket('ws://192.168.2.222:8000/websocket/');27 /*
28 ws.onopen 握手完成并創建TCP/IP通道,當瀏覽器和WebSocketServer連接成功后,會觸發onopen消息29 ws.onmessage 接收到WebSocketServer發送過來的數據時,就會觸發onmessage消息,參數evt中包含server傳輸過來的數據;30 */
31 ws.onopen =function(evt) {32 $('#msg').append('
websocket連接成功');33 }34 ws.onmessage =function(evt) {35 $('#msg').prepend('' + evt.data + '');36 }37 });3839
40