NXLog中文文檔(1):簡介


概覽

        如今,IT基礎設施對事件日志的管理要求越來越高。許許多多不同的設備,應用都在時時刻刻的產生巨大的日志消息。這些日志消息需要被實時、正確的處理,經過日志過濾、格式化等操作后轉發或者存儲到一個集中式的日志管理中心。有許多的組織在處理這些日志信息的時候都是采用一些腳本或者是在程序中對日志進行特殊的處理。而NXLog則是一個高性能、跨平台的解決方案,能夠幫助我們解決上述的問題的一款應用。

        NXLog能夠在各種不同的設備上進行各種不同格式的日志消息的采集以及處理,NXLog能夠接收從TCP、UDP、文件、數據庫以及其他不同來源的日志消息,例如Syslog,WIndows的EventLog。

        NXLog具備日志消息重寫,關聯,告警,正則匹配,執行調度任務或者日志文件的輪轉等功能。它的設計能夠充分利用如今的多核CPU的性能。它的多線程架構為日志輸入、日志處理、日志輸出提供了並行處理的能力。使用了高性能的IO層讓NXLog能夠同時處理成千個並發的客戶端連接,並且處理日志卷高達100000EPS。NXLog努力的讓日志消息丟失的情況盡可能少的出現,它不會丟棄任何日志消息,除非人為的指定它丟棄日志消息。它能夠根據用戶設定的日志消息優先級進行處理,這意味着越高優先級的日志消息越容易得到處理,這能夠幫助我們避免UDP傳輸過程中的日志消息丟失。為了避免網絡擁塞或者其他的日志消息傳輸問題,NXLog提供了把日志消息緩沖到磁盤或者內存的功能。

        NXLog還提供了可加載的模塊用於支持各種不同的輸入源以及格式化日志的方法,例如Syslog、EventLog、Audit Log或者一些自定義的二進制應用日志。可加載模塊可以讓我們能夠自定義添加擴展,就像為Apache服務器添加擴展一樣。除了能夠處理實時日志消息之外,NXlog還能夠對批處理日志進行處理。Apache風格的配置語言為實現日志重寫,告警發送,執行腳本等事情提供了非常強大的幫助

 

特性

  • 跨平台:NXLog使用Apache Portable Runtime Library,這使得NXLog能夠像Apache一樣,在不同的平台下運行,在Windows下,它使用Windows本地庫進行編寫,不依賴Cygwin這種庫

  • 模塊化的架構:NXLog具有一個輕量級模塊化的架構,它使得模塊是可插拔的,和Apache Web服務器類似。日志格式化、傳輸協議、數據庫出來、NXLog語言擴展都是模塊。只有當模塊是需要使用的時候,才會被加載,這能夠讓程序使用更少的內存。NXLog的核心只具備出來文件和Socket的能力,其他的功能都被放到了各個模塊里面,模塊具備統一的API,開發者可以輕易的編寫新的模塊去擴展NXLog

  • 客戶端-服務端模式:NXLog可以作為客戶端,也可以作為服務器端。它能夠采集客戶機上的日志並傳輸給遠程服務器。它也能夠接收從其他節點傳輸過來的日志信息並轉發到數據庫、文件等其他地方

  • 多種輸入以及輸出:除了可以從日志文件采集日志消息,NXLog還支持許多不同的網絡和傳輸層協議,例如TCP、UDP、TLS/SSL、數據庫、還有Socket等方式,它既支持從這些協議里面讀,也支持從這些協議里面寫。

  • 安全:在Unix操作系統上,可以用普通用戶啟動NXLog,當NXLog的模塊需要一些特定的權限的時候(例如kernel,綁定低於1024的TCP端口)它會使用一些Linux的功能解決,而不需要用到root權限。NXLog還提供了TLS、SSL的協議防止日志消息在傳輸過程中被攔截

  • 可擴展的多線程架構:NXLog使用基於事件的架構,NXLog在處理日志消息的時候還會采用並行的模式,讀取消息、輸出消息等日志消息處理操作都是並行處理的。例如:當單線程的syslog進程在嘗試輸出日志消息到數據庫的時候,它會發生堵塞,后面的UDP輸入將會丟丟棄,而多線程架構的NXLog不僅避免了這個問題還充分的發揮了操作系統的並行處理能力

  • 高吞吐量:常規的POSIX系統為監控文件描述提供了select或poll的系統調用,但是這些方式都是不可擴展的。現代操作系統具備一些I/O就緒通知的API用於處理大量的文件打開以及網絡連接並發的情況。NXLog就是使用這些高性能的API對日志消息進行處理的。

  • 消息緩沖:當日志消息由於網絡問題導致輸入堵塞的時候,NXlog會主動調整輸入的流量。這能夠避免日志消息丟失的情況。同時,NXLog還提供了一些消息緩存的模塊可以讓日志消息暫存到磁盤或內存中。當問題解決之后,緩沖會全部刷出,並被清空。除了使用現有的模塊,還可以使用NXLog的語言對消息進行自定義的處理

  • 優先級:不是所有的日志消息都是非常重要的,有些日志消息需要被更加有限的處理,NXLog支持為日志路由設定優先級。例如,這可以避免TCP輸入過載導致系統丟棄UDP syslog輸入的情況

  • 避免丟棄消息:內置的流程控制器不支持丟棄日志消息,所以你不會看到類似以下這種日志消息被丟棄的情況

1
Dec  18  18 : 42 : 42  server syslog-ng[ 1234 ]: STATS: dropped  42

        當然,在提供丟棄日志消息的條件后,NXLog也能夠主動丟棄日志消息。

        UDP協議下的Syslog是一個非常典型的安利,當kernel的緩沖區用滿后,操作系統會丟掉UDP的消息。當日志消息處理導致系統非常繁忙的時候,系統內核的UDP緩沖區就會被非常快的寫滿。

  • Apache風格的配置:配置方式和Apache服務器的方式很類似,容易學

  • 內置的配置語言:內置的配置語言能夠讓管理員更加容易的個性化去處理日志消息,Perl是解決日志處理問題的一個挺流行的語言。內置的nxlog語言和perl的語法非常類似

  • 任務管理器:NXLog內置了一個類似Cron的作業調度器,並且提供了更多的功能,使用這種特性,管理員能夠自動的執行一些例如日志輪轉,系統檢查等的任務。

  • 日志輪轉:當日志達到了一定的大小,或者到了某個具體的時間,是需要被日志輪轉工具進行輪轉的,file input reader模塊支持擴展的日志輪轉腳本,它能夠對日志文件進行轉移/重命名等動作,類似的,file output writer 模塊能夠監控文件的輪轉,並在輪轉完后重新打開輸出。

  • 多種多樣的日志消息格式化工具:NXLog支持許多種類型的日志格式,例如Syslog、新頒布的IETF Syslog標准、GELF、JSON等等。使用日志轉換函數,NXLog還能夠處理多行日志消息或者自定義的日志消息。

  • 高級日志消息處理能力:除了一些內置的功能之外,使用擴展模塊可以使NxLog能夠具備解決一些日志格式化,事件管理、正則匹配,日志過濾、重寫、告警等動作

  • 離線消息處理模式:有些時候日志需要離線處理,NXLog提供了這種模式

  • 字符集和i18n支持:日志消息可能是各種各樣的字符集寫出來的,例如UTF-8、latin-2等,Nxlog具備字符集的轉換能力

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM