個人覺得,一個項目最重要的功能之一就是日誌系統。單臺伺服器是可以直接用框架的本地日誌,然後稍微上點規模的系統,日誌就開始有一些講究了。否則,否則就像一個庸醫,病人來了知道有病但不知道根本問題出在哪裡!
其實日誌的實現也是一門小學問,想想明明是直接寫磁碟,為什麼可能在系統裡面進行多次添加呢,不會影響系統性能麼?這個問題我就不在這裡展開了,下次可以單獨拿出一個框架核心實現來分析,通過舉一反三來介紹一些知名組件的類似落盤場景實現原理!
日誌實現可大可小,不過一般小項目,我們直接用框架系統自帶的就可以了。但是如果要做其他的功能比如埋點啊,統計啊,自帶的就需要進行再做一次數據收集。如果我們有1臺以上的伺服器,每次都要打開多臺日誌進行搜索,特別是實時日誌查看,就比較麻煩了。這裡推薦一個可以在中小型系統使用的日誌服務Rsyslog。
rsyslog日誌服務簡介
rsyslog是一個C/S架構的服務,可監聽於某套接字,幫其它主機記錄日誌信息。rsyslog是CentOS 6以後的系統使用的日誌系統,與之前的syslog日誌系統相比,具有以下優點:
支持多線程支持TCP、SSL、TLS、RELP等協議強大的過濾器,可實現過濾日誌信息中的任意部分支持自定義輸出格式適用於企業級別日誌記錄需求模塊化
rsyslog配置
具體詳細配置這裡就不介紹了,不然篇幅太長。這裡介紹幾個核心的關鍵配置項。監聽埠設置udp為514,業務系統程序框架底層編寫UDP發包到這個埠即可:
$UDPServerRun 514
日誌路徑,我這個版本有點老,新版本配置不一樣,但是不影響介紹原理:
$template slogfile, "/data/logs/%msg:R,ERE,1,DFLT:SLOG(_[A-Z0-9]+)+\s.*--end:lowercase%/%msg:R,ERE,2,DFLT:SLOG_([A-Z0-9]+)(_[a-zA-Z0-9]+)*\s.*--end:lowercase%/%msg:R,ERE,2,DFLT:SLOG_([A-Z0-9]+(_[a-zA-Z0-9]+)*)\s.*--end:lowercase%/%$year%%$month%%$day%%$hour%%$minute%.log"
上面的配置是設置日誌模板,關鍵點是日誌存儲路徑規則。這裡是正則匹配,業務系統直接傳輸過來一個字符串,rsyslog會根據這個字符串的頭部信息進行規則匹配,找到對應的存儲路徑日誌文件,進行日誌存儲。如果日誌文件不存在則自動創建,非常方便!這裡日誌文件還有時間配置,每天寫不同的文件,不需要單獨腳本進行分割。
日誌系統搭建好了,後面做系統日誌或者業務埋點都非常方便,一般中小型系統都可以支撐!
新手衝百粉,兄弟們幫忙給個關注,操作起來有問題可以互相交流!