一、開始的話
使用python簡單的實(shí)現(xiàn)websocket服務(wù)器,可以在瀏覽器上實(shí)時(shí)顯示遠(yuǎn)程服務(wù)器的日志信息。
之前做了一個(gè)web版的發(fā)布系統(tǒng),但沒實(shí)現(xiàn)在線看日志,每次發(fā)布版本后,都需要登錄到服務(wù)器上查看日志,非常麻煩,為了偷懶,能在頁面點(diǎn)幾下按鈕完成工作,所以這幾天查找了這方面的資料,實(shí)現(xiàn)了這個(gè)功能,瞬間覺的看日志什么的,太方便了,以后也可以給開發(fā)們查日志,再也不用麻煩運(yùn)維了,廢話少說,先看效果吧。
二、代碼
在實(shí)現(xiàn)這功能前,看過別人的代碼,發(fā)現(xiàn)很多都是只能在web上顯示本地的日志,不能看遠(yuǎn)程主機(jī)上的日志,有些能看遠(yuǎn)程日志的是引用了其他框架(例如bottle,tornado)來實(shí)現(xiàn)的,而且所有這些都是重寫thread的run方法來實(shí)現(xiàn)的,由于本人技術(shù)太菜,不知道怎么改成自己需要的樣子,而且我是用django這個(gè)web框架的,不想引用太多框架,搞的太復(fù)雜,所以用python來實(shí)現(xiàn)websocket服務(wù)器。由于技術(shù)問題,代碼有點(diǎn)粗糙,不過能實(shí)現(xiàn)功能就行,先將就著用吧。
執(zhí)行下面命令啟動(dòng)django和websocketserver
nohup python manage.py runserver 10.1.12.110 & nohup python websocketserver.py &
啟動(dòng)websocket后,接收到請(qǐng)求,起一個(gè)線程和客戶端握手,然后根據(jù)客戶端發(fā)送的ip和type,去數(shù)據(jù)庫查找對(duì)應(yīng)的日志路徑,用paramiko模塊ssh登錄到遠(yuǎn)程服務(wù)器上tail查看日志,再推送給瀏覽器,服務(wù)端完整代碼如下: