python 如何實現遠端tail f?

時間 2021-06-03 05:36:10

1樓:37丫37

django channels寫個也不複雜,這裡有關於channels的介紹,也有實現tailf的例子

Django使用Channels實現WebSocket--上篇

2樓:guyskk

tail -f是不會結束的,所以你要開新執行緒去讀取日誌並寫入django response;並且response返回後不能關閉,因為瀏覽器要一直讀這個response,這裡要用django stream response。除了Websocket,也可以了解一下 Server send event(SSE)。

3樓:YPSheng

你可以在伺服器上寫乙個指令碼,使用讓日誌內容時時刻刻通過呼叫介面傳輸到你的web端或者其他地方儲存起來。至於介面就簡單實現乙個可以接受資料並儲存就行了

4樓:王鑫

沒必要websocket實時顯示的吧。

上策:你應該考慮下現成的東西kibana免費,最新的kibana還有利用機器學習來報警(可惜太花裡胡哨,只能在理想環境用),日誌易付費。算是國內做的不錯了,都是基於elasticsearch搜尋日誌,還有語法支援。

中策:基於現成的自動化平台開發,例如爛大街的ansible+django這種標準範例,寫起來就是坑有點多。

下策:自己寫啦。ssh有ssh的好處,agent有agent的好處。

以前我想用websocket來做遠控,後來還是覺得工具簡單就好。對於日誌收集,檢視,我更推薦採取agent方式。

5樓:

考慮下呼叫shell指令碼來執行命令,乙個指令碼後台執行出乙個pid號,然後資料庫儲存pid號,終止就殺掉pid就好。最好寫些Python類專門用來生成定製化shell指令碼和對shell指令碼執行的狀態控制,來控制複雜點的觸發邏輯處理。

6樓:波羅學

如果只是讓大佬看tail -f的日誌,寫個bat指令碼就行了吧。為什麼要通過web?好處有什麼?公司有網路限制嗎?測試開發機賬戶密碼要求比較嚴格?

還想問個問題,大佬會有這個需求?web看tail -f看日誌?我有點理解不了,tail -f給的資訊量太少了吧,全量資訊看不了,而且業務發生錯誤時,我們連搜尋都無法做到。

這滿屏刷刷的感覺,是因為看著比較爽嗎?如果大佬要看,最好是能幫助分析的工具或是已經分析出來的結果。

建議你好好和大佬們溝通一下,一定要結合實際需求開發,不然功能做出來,可能並不一定有人使用,那對自己也是個打擊。如果確實要做,提供三套思路,分別是:

也就是你的思路。如果只是看tail -f的日誌,我覺得,寫的指令碼就行了,bat指令碼或python指令碼。如果一定要ssh + web瀏覽也可以,但限制會比較多。

主要是因為tail是別人寫的,一些我們需要的功能或許是沒有,比如無法做到實時,每次只能手動重新整理頁面,還有檔案讀取不受控制,比如我想向上讀取,也做不到。

純粹自己寫,對自己也是個提公升。通過web實時檢視日誌,主要涉及兩部分,讀取和觸發。

讀取即為日誌讀取,要分全量和增量兩方面來看,第一次讀取採用全量讀取,當然不一定是全部讀取出來,你可以設定乙個比較大的範圍,比如讀取最後的500行。而增量獲取,就是每次獲取資料後,記錄下最新讀取到的位置,下次從這個位置向後讀取資料,並進行拼接。如果要考慮,瀏覽器記憶體占用,前段還需經常丟棄一些老的資料。

介面如何觸發?可以使用你說的websocket實現,也可以使用ajax定時讀取,簡單使用而且工作量小。不過這種方式會存在讀取不實時的問題。

websocket的資料讀取的觸發方式更靈活些,比如可以固定時間讀取或檔案增量超過固定大小讀取,也可以把兩者結合起來。如果實時性要求比較高,python中有檔案狀態監控的包,pynotify或watchdog。宣告,我都沒用過,你可以都用下看看。

為什麼不嘗試用一下開源的日誌收集分析平台,比如elk。建議你可以去了解一下。它可以做非常詳細的分析。

基本的日誌檢視是必須支援的,還有資料過濾查詢、報表製作、監控等。當然主要是用在上線業務會更好。

如果說這種方式的缺點,那就是,學習成本有點高。如果之前沒有接觸,估計使用會比較困難。

Python 如何實現月份相加?

奚衡 受邀答題,自己DIY了乙個計算這個的函式,思路大致 1 計算出這段指定時間的當天時間凌晨時間和疊加月後的凌晨時間 2 求出相差的天數 3 最後再加天數再指定的時間內疊加即可 usr bin env python coding utf 8 from datetime import datetim...

python如何實現列表交叉合併

蓋世小猛男 all list length1 len res list length2 len res list2 if length1 length2 length length2 elif length1 length2 length length1 else length length1 fo...

如何用python實現行列互換?

程式設計小白一枚,使用python 3.6 笨辦法 b fori inrange len a 0 row forj inrange len a row.a j i b.row print b 以上寫成一句 print row i for rowina fori inrange len a 0 用函式...