python web 服務器實時監控 websocket_python 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.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 });38

39

40

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/379060.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/379060.shtml
英文地址,請注明出處:http://en.pswp.cn/news/379060.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

磁盤調度算法

1,假設磁頭當前位于第105道,正在向磁道序號增加的方向移動,現有一個磁道訪問請求序列為:35,45,12,68,100,180,170,195,試用先來先服務…

C# Using用法三則

(1)引用命名空間 using作為引入命名空間指令的用法準則為: using Namespace; 在.NET程序中,最多見的代碼莫過于在程序文件的開頭引入System命名空間,其原由在于System命名空間中封裝了許多最基本最常用的操作&#xff…

iOS開發 工程

一直沒正兒八經的寫過技術文章。今日開個小窗,準備寫點東西。。。完了 1、傳統的MVC結構需要至少M、V、C三個模塊,在實際開發中往往需要添加額外的模塊,添加的模塊當然也大體上屬于這三個模塊之內。以下為較為常用的子模塊。 (1&a…

C++11 std::shared_ptr的std::move()移動語義底層分析

std::shared_ptr的std::move()移動語義底層分析 執行std::move()之前: 執行std::move()之后: 結論:一個淺拷貝 sizeof(std::shared_ptr) 8字節 pss1 : 0x0028fea8 pss2 : 0x0028fea0 (棧是逆增長的) 觀察執行std::m…

一個使用numpy.ones()的矩陣| 使用Python的線性代數

Ones Matrix - When all the entries of a matrix are one, then it is called as ones matrix. It may be of any dimension (MxN). 一個矩陣 -當矩陣的所有條目均為1時,則稱為一個矩陣。 它可以是任何尺寸( MxN )。 Properties: 特性: The determina…

python去掉字符串最外側的引號_瘋狂Python講義第二章讀書筆記

本章講解變量和簡單類型2.1 從注釋講起單行注釋使用#,#后面的代碼被注釋掉不會運行,如:# print(123) 注釋掉后123不會輸出。多行注釋使用""" """,三個雙引號,雙引號中的內容注釋掉&…

Xpath[轉]

Xpath[轉] XPath 是一門在 XML 文檔中查找信息的語言。XPath 可用來在 XML 文檔中對元素和屬性進行遍歷。 XPath 是 W3C XSLT 標準的主要元素,并且 XQuery 和 XPointer 同時被構建于 XPath 表達之上。 因此,對 XPath 的理解是很多高級 XML 應用的基礎。 …

【轉】深入分析 ASP.NET Mvc 1.0 – 1. 深入MvcHandler

MvcHandler是一個mvc程序真正開始的地方,因為你可以直接看到并調試它的源碼。 MvcHandler的主要代碼如下:protected internal virtual void ProcessRequest(HttpContextBase httpContext) {AddVersionHeader(httpContext);// Get the controller typestring control…

C++11 右值引用與常量左值引用保存臨時變量(函數返回值)的底層分析

右值引用保存臨時變量(函數返回值)的問題 :臨時變量是右值 1、普通變量接收函數返回值: 2、右值引用變量接收函數返回值: 3、用const int& 和右值引用是一樣的效果,只是const int& 就不可以修改…

JavaScript中的位置協議屬性

JavaScript | 位置協議屬性 (JavaScript | Location protocol property) A protocol by definition simply implies a set or working rules that must be adhered to. A network protocol thus defines rules for communication between network devices. You must be familia…

axure源文件_Axure教程:實現網易云音樂有聲播放效果

為了方便講解,我們首先在桌面新建一個文件夾,命名為音樂。1、將自己想要演示播放的MP3音樂文件放在這個文件夾里面。2、給播放頁添加一個中繼器,隨便命名,我給它命名為【音樂地址鏈接器】,用來鏈接播放本地音樂文件。并…

2012年終總結

工作: 原來的文章也寫過,今年年初的時候,因為一些原因,成了另外一家公司的員工,但辦公地點還是在原來的公司。 這是一家外包公司,技術實力當然是比較強的,不過自己對于編程方面的興趣止不住的一…

PYTHON解析PE的模塊

RT,從GOOGLE CODE上找的。。雖然拿PYTHON解析PE的意義不大還有點麻煩…… 示例代碼: #coding:gbk import sys import pefile #from struct import * import structdef main():pe pefile.PE("ccalc.exe")pe.print_info()if __name__ "__…

ffplay分析(從啟動到讀取數據線程插入到字幕、音頻、視頻解碼前的隊列操作)

《ffplay的數據結構分析》 《ffplay分析(視頻解碼線程的操作)》 《ffplay分析(音頻解碼線程的操作)》 《ffplay 分析(音頻從Frame(解碼后)隊列取數據到SDL輸出)》 《ffplay分析 (視頻從Frame(解…

python3和python2 優勢_python3和python2的區別

1.性能Py3.0運行 pystone benchmark的速度比Py2.5慢30%。Guido認為Py3.0有極大的優化空間,在字符串和整形操作上可以取得很好的優化結果。Py3.1性能比Py2.5慢15%,還有很大的提升空間。2.編碼Py3.X源碼文件默認使用utf-8編碼,這就使得以下代碼…

并發進程同步

P是荷蘭語Proberen(測試)的首字母。為阻塞原語,負責把當前進程由運行狀態轉換為阻塞狀態,直到另外一個進程喚醒它。也就是不好的一方面。 V是荷蘭語Verhogen(增加)的首字母。為喚醒原語,負責把一…

寄存器和pin_16x2 LCD的PIN圖和寄存器

寄存器和pinIn these years the LCD is finding widespread use. It has replaced the LEDs or other multi-segment LEDs.This is due to the following reasons: 近年來, LCD正在廣泛使用。 它已替換LED或其他多段LED,原因如下: The decli…

【Java IO知識】讀取中文亂碼問題解決

讀取文件主要是要設置讀取的輸入流如InputStreamReader時要設置讀取的解碼格式,要和文件本身的編碼格式相同,這樣讀取出來的才不會亂碼。 InputStreamReader reader new InputStreamInputReader(input, "編碼格式"); ANSI是"gbk" 注:必須是在讀取的時候就…

ffplay分析(視頻解碼線程的操作)

《ffplay的數據結構分析》 《ffplay分析(從啟動到讀取線程的操作)》 《ffplay分析(音頻解碼線程的操作)》 《ffplay 分析(音頻從Frame(解碼后)隊列取數據到SDL輸出)》 《ffplay分析 (視頻從Fram…

【轉】.NET深入學習筆記(4):深拷貝與淺拷貝(Deep Copy and Shallow Copy)

今天繼續利用準備WSE安全開發文章的空閑時間,完善《.NET深入學習筆記》系列(基本都是.Net重要的知識點,我都做了詳細的總結,是什么、為什么、和怎么實現)。想必很多人也接觸過這兩個概念。做過C的人對深淺拷貝的概念一…