天天看點

Introduction or Why Should I Bother

   日志管理通常是被認為一件即痛苦又黑暗的經曆。确實,熟知良好的日志管理将會是一個緩慢而不斷進化的過程。新的系統管理人員,在遇到問題時,總是被告知“去檢視日志吧”。這時,在日志和事件資料中,通過簡單系統指令的組合,如cat、tail、grep(還包括sed、awk、perl)等,診斷并确定出問題所在。他們将會成為指令行下的專家,熟知正規表達式的功夫:如從混雜的日志事件中查詢(searching)、解析(parsing)、剝離(stripping)、處理(manipulating)、提取(extracting)資料。我強烈建議所有的系統管理人員都應該學習掌握這些強大而實用的技巧。

   不幸的是,這樣簡單的解決方案(僅靠系統指令)并不能擴充。在多數情況下,你将面對多台主機和日志檔案的多樣來源。你将面對幾十、幾百、甚至上千台的主機,并在實體端、虛拟端、雲端運作着多種互相通信的應用和跨地區跨網絡結構的服務。在當今世界,來自于單一應用、服務或主機的日志已越來越不能夠診斷複雜的多層次(multi-tier)事件。

   為了解決這種分歧(gap),日志管理必須發展至集中化,選擇使用的工具也擴充至包括配置應用(applications)生成中心日志,配置服務(如rsyslog、syslog-ng)生成集中傳輸的系統日志輸出。然後,事件(events)開始流入,并建立接收這些資料的專門的日志伺服器,消耗越來越多的存儲空間。

   但這還遠沒有結束,問題将從過少的資訊量轉變為過多的資訊量和過少的實質内容。你将需要篩選百萬或者數十億行的日志,而這些日志又将在不同時區、不同格式、甚至不同語言下産生。這樣,從不斷增長的日志資料流中找到需要的資料将變得急劇的困難,同時找出與其他事件的關聯将更加困難,故不斷增長的日志事件的收集将弊大于利。

   為了解決這個新問題,你必須擴充你的日志管了解決方案,以包括對日志更好的文法分析、更靈活的存儲機制,還得不帶可搜尋和索引技術。從當初對日志檔案進行簡單的grep操作,到進階為不依靠外力的主要項目(project)。這個項目在精力和費用同等代價的情況下,實作了多個解決方案的疊代融合。

簡介(Introducing LogStash)

為了避免走上這條路,即伴随着高成本投入和潛在的發展困境,你可以開始嘗試LogStash。LogStash提供了一套整合的架構,包括日志收集、集中化、文法分析、存儲和搜尋等。

   LogStash是開源免費的,由美國的開發者兼Dreamhost的日志霸主(Logging Czar)Jordan Sissel開發。安裝簡單,高性能,可擴充,易于二次開發。

   LogStash擁有豐富多樣的輸入機制:可以從TCP/UDP、檔案、Syslog、微軟日志事件(Microsoft Windows EventLogs)、輸入(STDIN)和其它來源等獲得輸入資訊。結果就是,在你的環境下,很少有機會不能從LogStash提取日志,或發送日志至LogStash。

   當上述日志到達LogStash伺服器時,将提供一個大集合的過濾器,允許你對這些事件進行修改、操作和轉化。你可以從日志事件中提取你所需要的資訊,并賦予其上下文内容(context)。LogStash使得查詢這些事件變得簡單,也使得利用日志資料産生結論并做決定變得容易。

   最後,當輸出資料時,LogStash依然支援大量的輸出方式,包括TCP/UDP、郵件(email)、檔案、HTTP、Nagios和其他大量的網絡線上服務。你可以将LogStash和度量引擎(metrics engines)、報警工具(alerting tools)、畫圖套件(graphing suites)、存儲器(storage destinations)等進行整合,甚至可以建立自己的日志輸出的整合方式。

LogStash設計及架構(LogStash design and architecture)

   LogStash是由JRuby語言編寫的,并運作在Java虛拟機(JVM)上。它的架構簡單,并是基于消息的(message-based)。不同于分離的代理端(agent)和伺服器端(server),LogStash可配置一個簡單的代理端,通過與其他開源元件的結合,以實作不同的功能。

   在LogStash的生态系統中,存在四個元件:

       Shipper:發送事件(event)至LogStash;遠端代理端隻需要運作這個元件即可;

       Broker and Indexer:接收事件,并對事件建立索引;

       Search and Storage:允許存儲和搜尋事件;

       Web Interface:基于Web的前端界面

   LogStash伺服器端獨立運作以上一個或者多個元件,以便于分離元件和對LogStash進行擴充。

   在多數情況下,你一般需要運作兩大類LogStash主機:

       一類主機運作LogStash代理端作為事件的轉發者(shipper),将應用、服務和主機的日志發送至中心LogStash伺服器。這類主機将隻需要運作LogStash代理程式(即shipper);

       另一類主機,即是中心LogStash伺服器,可運作包括代理(Broker)、索引器(Indexer)、搜尋和存儲(Search and Storage)、Web界面(Web Interface)等的集合,以對日志進行接收、處理和存儲。

<a target="_blank" href="http://blog.51cto.com/attachment/201312/160712131.jpg"></a>

這本書包含什麼?(What's in the book?)

在這本書中,我将帶領你們熟悉安裝、部署、管理和擴充LogStash。為了達到這個目的,我将介紹你進入Example.com(一個虛拟網站),在那裡你将作為一名系統管理人員開始新的工作。你負責的第一個項目就是開發一套新的日志管理方案。

   我們将會教你如何:

       安裝和部署LogStash;

       從Shipper端轉發事件(即日志)至中心LogStash伺服器;

       使用多種技術過濾進入的事件;

       輸出這個事件至可選擇的可用目的地;

       使用LogStash的Kibana進行web前端展示;

       當環境發展時擴容LogStash運作結構;

       快速簡單的延伸LogStash以傳遞額外的功能。

   在本書結束時,你應該擁有一套可部署在自己環境下的實用而有效的日志管理方案。

LogStash資源(LogStash resources)

如何獲得幫助(Getting help with LogStash)

   LogStash的開發者Jordan Sissel有一句使得擷取幫助變得容易的格言:如果一個新手體驗不好,這将是LogStash的bug(If a newbie has a bad time, it's a bug in LogStash)。是以即使通過郵件清單(mailing list)或者IRC尋求幫助遇到麻煩,你也可以通過LogStash社群獲得友好并有益的支援。

   Freenode上的IRC頻道:#logstash

溫馨提醒(A mild warning)

本文轉自 xxrenzhe11 51CTO部落格,原文連結:http://blog.51cto.com/xxrenzhe/1343968,如需轉載請自行聯系原作者