nxlog收集linux日志,Nxlog——日志采集神器简介
(本來打算一本正經的寫一篇文章,但是發現一本正經的寫我根本就寫不出來(′?`) )
當我們開始設計日志系統的時候,我們要考慮的第一個事情就是用什么方式采集客戶機上面的日志。而今天要給大家介紹的這款日志采集神器就是Nxlog。
日志采集工具眾多,各有各的特色。
譬如LogStash這頭大象雖然笨重,但是部署簡單,在各種環境下都能用。在某些艱苦的條件下,LogStash還是能幫我們大忙的(請自行腦補一臺XX定制機上面只有syslog,然后要自己當盤古開天辟地的場景)
又譬如rsyslog,基本上已經是運維采集日志的標配了,性能高,大多數系統都自帶了。
又譬如Heka(老衲已經跪了。。。。),好吧,不說Heka了。
NXlog
既然有了那么多現成的日志采集工具了,為什么還需要Nxlog呢?其實nxlog的作者們當時也是考慮過這個問題的
在幾年前,我們使用了一個根據msyslog修改過來的版本,它也是一個插件化的架構。但是,和很多syslog的實現者一樣,它也是基于BSD的syslog的單線程架構實現的,所以它繼承了所有syslog的缺點。我們很快就發現我們需要一個更好的日志解決方案。接著,我們就開始尋找其他解決方案,有很多像rsyslog、syslog-ng這樣的方案是可以拿來代替msyslog的,但是大多數方案還是單線程的,并且不是原生支持Windows系統的。于是我們就開始開發NxLog,Nxlog從2009年開始開發,當時是一個閉源項目,知道2011年我們才放出了開源的CE版本
可以看到作者的心路歷程其實是這樣的。用syslog系列->跪了->用rsyslog頂上->Windows下又跪了->程序員的本性顯露出來了,內心獨白(這些都是什么渣渣,我要自己寫一個(/= _ =)/~┴┴)
于是2009年,NXlog就開始開發,等到2011年,第一個開源版本放出來了,直到現在已經是第7個年頭了
NXLog的特性
既然是對現有工具都不滿而制造出來的產品,自然也會有屬于它自己的亮點特性
當你需要一個客戶端通殺Windows、*Nix的時候,來一發nxlog吧!NxLog的夸平臺設計能夠在Windows和*nix下運行,一個客戶端解決你所有的煩惱,而且占用資源非常少喲
當某些重要應用不適合在上面放日志處理程序的時候,來一發nxlog吧!Nxlog除了在線處理日志的功能之外,還提供了離線處理日志的功能
當你需要做某用戶在40分鐘內連續登陸失敗xx次則告警的時候,來一發nxlog吧!NXLog提供了命令執行以及靜態計數器的功能,可以讓你輕易的達到這個目的(當然,你可以來一發LogInsight體驗一下在界面上可視化添加告警的快感)
總結一下的話就是我是一個跨平臺、不會丟日志、具備日志緩沖與流量控制、定時作業、還帶簡單編程語言的寶寶。
再具備一定高度的總結一下的話呢,就是。。Rsyslog和LogStash等渣渣,不服來戰
好吧好吧,下面是NXLog的亮點特性完整版,內容有點長(慎點。。),想節省時間的看官看上面的總結就可以啦
真NXLog功能特性
跨平臺: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等方式,它既支持從這些協議里面讀,也支持從這些協議里面寫。
可擴展的多線程架構:NXLog使用基于事件的架構,NXLog在處理日志消息的時候還會采用并行的模式,讀取消息、輸出消息等日志消息處理操作都是并行處理的。例如:當單線程的syslog進程在嘗試輸出日志消息到數據庫的時候,它會發生堵塞,后面的UDP輸入將會丟丟棄,而多線程架構的NXLog不僅避免了這個問題還充分的發揮了操作系統的并行處理能力
高吞吐量:常規的POSIX系統為監控文件描述提供了select或poll的系統調用,但是這些方式都是不可擴展的。現代操作系統具備一些I/O就緒通知的API用于處理大量的文件打開以及網絡連接并發的情況。NXLog就是使用這些高性能的API對日志消息進行處理的。
消息緩沖:當日志消息由于網絡問題導致輸入堵塞的時候,NXlog會主動調整輸入的流量。這能夠避免日志消息丟失的情況。同時,NXLog還提供了一些消息緩存的模塊可以讓日志消息暫存到磁盤或內存中。當問題解決之后,緩沖會全部刷出,并被清空。除了使用現有的模塊,還可以使用NXLog的語言對消息進行自定義的處理
優先級:不是所有的日志消息都是非常重要的,有些日志消息需要被更加有限的處理,NXLog支持為日志路由設定優先級。例如,這可以避免TCP輸入過載導致系統丟棄UDP syslog輸入的情況
避免丟棄消息:內置的流程控制器不支持丟棄日志消息,所以你不會看到類似這種日志消息被丟棄的情況 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具備字符集的轉換能力
總結
以上是生活随笔為你收集整理的nxlog收集linux日志,Nxlog——日志采集神器简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 远程读取mysql_远程获取数据库和文件
- 下一篇: 分享一些使用电脑的小技巧