Web實時日誌輸出檢視管理系統
開發人員無許可權訪問生產伺服器,怎樣檢視日誌來分析問題?
安全管理合規的原因,開發未被授權訪問生產伺服器,但經常會有分析問題檢視日誌的需求. 大家一般是怎樣解決的?
我嘗試用過的,或者是想到的方法主要有如下幾種,但都不太完美,有更好的方案或者工具嗎?
- 開源產品 logio http://logio.org/ 可實時採集日誌通過 web 展示 , 應用多了,日誌多了分類瀏覽不便,無法解決持久儲存的問題
- fluented 同步日誌文字,以文字模式儲存在專用的日誌伺服器.
- 系統管理員手工複製日誌
- jenkins + ansible+shell 指令碼 複製傳輸日誌
- 使用ELK 處理過多行文字,比如 tomcat 的日誌
- 利用linux伺服器系統自帶的rsyslog+php進行日誌採集
- 搭建FTP對映虛擬目錄指向日誌目錄(前提只開讀許可權)
- 考慮 log 實時上傳到雲上或者同步到一臺專門的日誌伺服器上
今天我們要介紹一款實時同步分析日誌的web管理工具Log.io 讓我們一起感受一哈Websocket的魅力。
Node.js中使用Log.io在瀏覽器中實時監控日誌,Log.io等同於tail -f命令,但更強大(web+node展示)
官方介紹:http://logio.org/
GitHub原始碼:https://github.com/NarrativeScience/Log.io
日誌是個好東西,對技術人員來說寫日誌能紀錄成長,分享經驗;對機器來說紀錄日誌能及時發現錯誤,為日後的排錯提供資訊。如果還在一臺機器上用 tail -f 監聽單個日誌或者用 multitail 監聽多個日誌也太 out 了,我們需要一種工具能紀錄上百臺機器、不同型別的日誌,並最好能彙集到一個介面裡方便檢視,最好還是實時的。
log.io 是一個實時日誌監控工具,採用 node.js + socket.io 開發,使用瀏覽器訪問,每秒可以處理超過5000條日誌變動訊息。有一點要指出來的是 log.io 只監視日誌變動並不儲存日誌,和其他的監控工具一樣,log.io 也採用伺服器-客戶端的模式。
log.io 由兩部分組成:server 和 harvester
server 執行在機器 A(伺服器)上監視和紀錄其他機器發來的日誌訊息;
log harvester 執行在機器 B(客戶端)上用來監聽和收集機器 B 上的日誌改動,並將改動傳送給機器 A,每個需要紀錄日誌的機器都需要一個 harvester.
在A和B兩臺機器上同時安裝(第一步到第四步)
一、安裝依賴包
yum install gcc gcc-c++ openssl-devel pkgconfig -y
二、下載 node.js 原始碼,編譯並安裝:
wget http://nodejs.org/dist/v0.8.14/node-v0.8.14.tar.gz tar xf node-v0.8.14/ ./configure make make install
三、安裝NPM
wget https://npmjs.org/install.sh && sh install.shsi
四、安裝 log.io(包含了 log server 和 log harvester)
npm config set unsafe-perm true
npm install -g --prefix=/usr/local log.io
注意:第二部安裝的時候安裝時間較長(基於網路下載軟體包),請耐心等待!!
五、在服務端(A節點)上啟動server
cd node-v0.8.14 log.io-server start
六、在客戶端(B節點)配置
vim /root/.log.io/harvester.conf exports.config = { nodeName: "nodeB", ####修改節點名稱(自定義) logStreams: { nginx_access: [ ####日誌服務的名稱(自定義) "/var/log/nginx/access.log", ###日記儲存路徑 ], nginx_error: [ ####日誌服務的名稱(自定義) "/var/log/nginx/error.log" ###日記儲存路徑 ] }, server: { host: '10.10.0.2', ####log.io Server端的IP port: 28777 ####log.io Server端的埠(預設埠) } }
七、在客戶端(B節點)啟動服務
cd node-v0.8.14 log.io-harvester start
八、通過遊覽器檢視日記實時資訊
附錄Windows部署請參考:https://www.cnblogs.com/loveclumsybaby/p/10622974.html
Log.IO能做什麼
這個軟體的功能非常簡單,對的,非常簡單!不像Zabbix一樣具備非常多的隱藏技能,安裝過程非常簡單.
npm install -g log.io --user "root"
//啟動server
log.io-server
//修改一下配置,主要改伺服器資訊和日誌路徑
vi ~/.log.io/harvester.conf
//啟動採集器
log.io-harvester
//訪問頁面
http://localhost:28778
Paste_Image.png
他就提供了一個看實時日誌的介面(原諒我突然就開啟了吐槽模式,你這會不會也太簡單了一點),不過總的來說,問題還是能解決的,左側的選單思路是節點->應用名這樣的模式,這個倒是挺正派的,一個節點底下會有多份不同的日誌(話說作者不知道有沒考慮過給節點分個組呢),右側的就是應用了,勾選的日誌資訊都會在這裡展現出來,其實單伺服器的話倒是沒什麼問題,但是多伺服器,刷日誌又刷的快的情況下,這個介面就會看的眼花繚亂了。
Log.IO原始碼分析
站在巨人的肩膀上(有現成的就拿來抄)的思想是我一直所堅持的(這才是生產力啊!ヽ( ∀)ノ),先看整體架構,直接上官方架構圖
Paste_Image.png
做法是通過Harvester進行日誌採集,通過TCP送到Server,然後Server通過WebSocket送到web頁面上面。
Harvester的運轉方式
- 記錄指定日誌檔案的Current Position,然後監控日誌檔案的變化(NodeJS本身就挺多這樣的庫的),每當發生Change事件之後,往下讀檔案
- 把變更的檔案通過一定的格式採用TCP協議送到Server端
+log|web_server|my_server01|info|this is log messages
Server的運作方式
Server在接受到Harvester送來的的資訊之後,把字串變成LogObject、LogStream、LogNode等一系列物件
通過Socket.IO這個庫把日誌資訊往外送,Socket.IO這個庫倒是挺簡單易用的,上個官網例子
var io = require('socket.io')(80);
var cfg = require('./config.json');
var tw = require('node-tweet-stream')(cfg);
tw.track('socket.io');
tw.track('javascript');
tw.on('tweet', function(tweet){
io.emit('tweet', tweet);
});
Web
Web的開發上倒是挺中規中矩的,採用比較流行的Express,然後通過WebSocket接收完資料之後就把對應的資料顯示在頁面上
一些想法
Log.IO這個應用程式碼量非常的少,這種易讀性使得這個程式非常適合拿來改造(比起讀Kibana那介面的原原始碼,這簡直就是天堂T_T),所以,不由的就產生了一些想法
對Harvester的一些想法
按照Harvester的運作方式來看,我認為完全可以不採用log.io的Harvester,而直接採用類似Rsyslog這樣的大多數作業系統上都存在的日誌收集工具就可以了,免去Agent部署升級的煩惱。不然還不知道會不會碰上Agent效能不穩定搞掛伺服器呢
對Server的一些想法
既然是WebSocket,那麼是不是可以採用類似在Nginx上加WebSocket擴充套件之類的做法來把Server替換掉呢?
log.io是不是能夠整合到ELK這類日誌搜尋軟體裡面,作為輔助功能存在呢?日誌先送到ES或者是一些其他地方,然後再通過一些Transfer程式把日誌送到Server
對Web的一些想法
Web這種操作上的東西,應各業務場景(個人品味。。。)不同會有比較大的差別,假如是我設計這個功能的原型,我會希望頁面上能有這樣的功能。
- 實時日誌按照時間分屏展示;
- 能夠在介面上輸入關鍵字,然後對關鍵字日誌高亮,方便排查問題;
- 再多一個業務模組的分組,方便對整組業務模組的伺服器進行過濾;
- 根據提供的關鍵字資訊,只展示具備關鍵字的日誌行(類似tail -f xxx|grep 這樣的功能);
用websocket技術,在運維工具的瀏覽器上實時顯示遠端伺服器上的日誌資訊
一般我們在運維工具部署環境的時候,需要實時展現部署過程中的資訊,或者在瀏覽器中實時顯示程式日誌給開發人員看。你還在用ajax每隔段時間去獲取伺服器日誌?out了,試試用websocket方式吧。
【參考文件】
1、Log.IO的使用場景和改造思路 - 簡書 https://www.jianshu.com/p/c301cae2f394
2、運維開發:python websocket網頁實時顯示遠端伺服器日誌資訊 - https://www.cnblogs.com/php-rearch/p/6661241.html
3、如何把Tomcat的日誌實時輸出到Web頁面上_https://www.linuxidc.com/Linux/2015-02/113356.htm
4、網頁中實時檢視伺服器日誌(websocket + node.js實現) https://blog.csdn.net/definite_things/article/details/43058919
5、Java用WebSocket + tail命令實現Web實時日誌 -https://blog.csdn.net/xiao__gui/article/details/50041673
6、個人開發者的伺服器日誌收集 - https://soulteary.com/2018/06/13/server-log-collection-for-individual-developers.html
7、日誌伺服器應用開發 - vitaair的部落格 - CSDN部落格 https://blog.csdn.net/vitaair/article/details/80220619
8、網站使用者行為日誌採集和後臺日誌伺服器搭建 - https://blog.csdn.net/weixin_37490221/article/details/80894827
9、windows下,Kiwi_Syslog日誌伺服器的搭建 - https://blog.csdn.net/McYaoYao/article/details/78225466
10、遠哥談 使用WebSocket開發線上實時看遠端伺服器log日誌的工具 - https://www.cnblogs.com/taven/p/3483002.html
相關文章
- 實時檢視模擬器的日誌輸出
- 檢視系統的日誌
- Django websocket之web端實時檢視日誌實踐案例DjangoWeb
- 實時檢視tomcat日誌Tomcat
- LINUX檢視系統日誌Linux
- win10系統怎麼檢視系統錯誤日誌_win10如何檢視錯誤日誌Win10
- Linux下tomcat實時日誌檢視LinuxTomcat
- Linux系統檢視日誌資訊總結Linux
- 在Linux中,如何檢視系統日誌?Linux
- Win10系統日誌怎麼檢視_win10系統日誌在哪裡Win10
- 檢視日誌
- Linux系統檢視log日誌命令詳解!Linux
- Spring AOP實現統一日誌輸出Spring
- GoAccess:一個實時的 Web 日誌分析器及互動式檢視器GoWeb
- Linux 中實時檢視日誌的3種方法Linux
- alertmanager: 檢視日誌
- Spring AOP實現後臺管理系統日誌管理Spring
- 實時日誌分析系統的基本架構架構
- (定時)任務輸出重定向到日誌
- MYSQL啟用日誌和檢視日誌MySql
- windows10系統開關機日誌怎麼檢視Windows
- Linux 檢視系統使用者的登入日誌Linux
- win10日誌檔案在哪裡_win10系統日誌怎麼檢視Win10
- reportbuilder 日誌輸出UI
- Python輸出日誌Python
- mysqld啟動失敗時日誌檢視命令MySql
- Linux 檢視日誌Linux
- Hyperf日誌檢視元件元件
- 錯誤日誌檢視
- oracle 日誌檢視方法Oracle
- sql 日誌檢視工具SQL
- 實現後臺管理系統的操作日誌功能
- Windows10系統檢視藍色畫面日誌的方法Windows
- 物化檢視匯出匯入可能導致物化檢視日誌的失效
- python如何輸出日誌?Python
- Java日誌輸出問題Java
- awk多行日誌排序輸出排序
- nginx檢視實時日誌並設簡單的訪問驗證Nginx