LogStash,使日誌管理更簡單

火星人 @ 2014-03-03 , reply:0



James Turnbull,通過對日誌管理項目情境中的Logstash實施細節的介紹,給了讀者信服的理由去使用Logstash進行集中化的日誌管理。 《Logstash》一書通過一個雙面案例(two side case)從不同方面進行介紹,其低准入門檻適合小企業使用,其擴展能力使其也能滿足大企業的需求。今年二月,James在Hangops會議上談到本書,「它主要面向那些以前沒有見過LogStash的人,如系統管理員、開發人員、DevOps以及運維人員。我希望此書讀者對Unix或Linux有一定了解。」他繼續說道,「另外,本書假定用戶無任何關於LogStash的先驗知識(Prior Knowledge)。」

日誌管理簡化過程中的問題James本人具有系統管理員和安全的相關背景。他先闡述了計算環境是如何使日誌管理進化成為無法擴展的方式。
他介紹到,通常日誌管理是是逐漸崩潰的——當日誌對於人們最重要的時候,也就是出現問題的時候,這個漸進的過程就開始了。在這時,新管理員將通過一些傳統工具對日誌進行檢查,如cat、tail、sed、awk、perl以及grep。這種做法有助於培養在常用工具方面的優秀技能,但它的適用範圍僅限於少量的主機和日誌文件類型。考慮到現實中的可擴展性問題,團隊也會逐步進化,使用如rsyslog和syslog-ng這樣的工具進行集中化的日誌管理。

James介紹到,當用戶通過這種方式著手處理擴展性問題時,其實並沒有真正解決日誌管理的問題——因為現在的日誌事件僅僅考慮不同類型、不同格式以及不同時區,其數量就已經相當可觀,並且基本上都缺乏合適的情境以方便理解它們。團隊最後通過日誌管理相關技術改造他們的計算環境,從而處理大量存儲、搜索、過濾等等。不幸的是,最終,這種方式的問題凸顯出來:不僅成本較高,而且造成了大量的浪費。和傳統系統管理員使用的工具一樣,LogStash通過降低進入門檻,節省了大量時間,但其架構完全能夠擴展以滿足大型網路部署的要求。

LogStash架構概述LogStash架構專為收集、分析和存儲日誌所設計。此外,LogStash所實現的主要交叉用例之一是對所管理的日誌事件進行查看/搜索。James建議通過開源項目Kibana對事件進行搜索操作。本月早些時候,Jordan Sissel,LogStash的創作者,在Twitter上發布了一條微博,內容為「LogStash每日構建的最新版本中附帶了Kibana3:java -jar logstash.jar kibana」,James和Jordan都提到了Kibana,因為它提供了用戶友好的搜索界面,並與Elasticstorage,即LogStash的搜索引擎進行了集成。以下是一些Kibana的截圖,它們摘自於《LogStash》一書的第3章,各位讀者還可以訪問在線演示:
http://infoqstatic.com/resource/articles/review-the-logstash-book/zh/resources/40.jpg
                           
                       (點擊圖片放大)
除了查看日誌外,它自身的組件架構支持通過代理對不同伺服器的日誌流進行管理,並最終傳送至存儲中。James帶領讀者們,以LogStash開箱即用的配置為基礎,對默認配置中的各個組件進行探索。LogStash默認配置中使用的Redis是一個開源Key/Value資料庫,用於在索引前隊列化日誌。它同時還使用Elasticsearch存儲日誌,並作為查看系統的後端。下圖摘自第3章,展示了架構中各種組件類型,包括Shipper、Broker、Indexer以及Viewer。
http://infoqstatic.com/resource/articles/review-the-logstash-book/zh/resources/41.jpg
在這本書中,James深入介紹了LogStash實例中的三個主要功能:事件輸入、事件數據過濾以及事件輸出。LogStash的這三個功能是根據配置信息執行的,這些信息存儲在簡單易懂的「.conf」文件中。 「.conf」文件中有不同的配置節對應LogStash所使用的三種不同類型的插件  輸入(input)、過濾器(filter)以及輸出(output)。每個LogStash實例都是根據它在整體架構中的角色需求進行定製的。 比如下面是摘自本書第3章的某個Shipper的配置(包括一個輸入和兩個輸出):
        input {                redis {                        host => "10.0.0.1"                        type => "redis-input"                        data_type => "list"                        key => "logstash"                }        }        output {                stdout {                        debug => true                }                elasticsearch {                        cluster => "logstash"                }        }
開源的LogStash符合DevOps文化LogStash是個可自由使用的開源工具,適合在開源工具的生態系統中工作,它很有意義,因此James專門為它編寫了一本書,因為他是一個自稱「開源極客」。LogStash生態系統中,在命令行下,所有的工具都是可安裝的(Installable)、可配置以及可管理的管理的,是理想的自動化方案。在整本書中,Jame明確地指出,在理想狀況下,應當通過一套自動化配置管理系統來管理LogStash各個組件的安裝、配置。然而,自動化配置的主題超出了本書的範圍,所以作者退而求其次,通過對LogStash組件的介紹使大家理解如何對其進行安裝和配置。如果配合對自動化的理解,讀者就能夠無縫構建出多種環境。通過這種方式,能夠夠靈活的適應項目不同階段中各類環境的部署,如Q&A、故障排除等,並支持持續交付。

安裝Java、LogStash、Redis以及Elasticsearch等James逐步展示了安裝LogStash的過程是多麼的簡單,它所依賴的組件也一樣。同樣,Jordan Sissel提出了LogStash項目原則中的一條:「社區:如果新手的日子不好過,那麼這就是個Bug。」LogStash依賴於Java,所以要運行LogStash,至少要安裝OpenJDK。大部分Linux發行版中都包含了OpenJDK可以通過包管理系統啟用。比如在Red Hat/CentOS中,使用命令「sudo yum install java-1.7.0-openjdk」進行安裝,而在Debian/Ubuntu中,命令則是「sudo apt-get install openjdk-7-jdk」。Jordan Sissel以單一的Jar文件方式分發LogStash,可以從LogStash.net主頁上獲取。在OpenJDK環境下,只需要在命令行上指定Jar文件地址以及配置文件地址就可以運行LogStash了。Redis的安裝就更加容易了,使用包管理系統安裝,和OpenJDK安裝類似,在Debian/Ubuntu系統中,使用命令「sudo apt-get install redis-server」,而在Red Hat/CentOS中則是「sudo yum install redis」。在Redis開始進行事件處理前,需要對「/etc/redis/redis.conf」中的一些配置設置進行修改,然後以服務的形式啟動Redis。Elasticsearch和LogStash類似,只需要預先安裝Java。如需下載Elasticsearch,對於Debian/Ubuntu等Linux系統,可以下載「.deb」安裝包,而對於Red Hat/Centos等的Linux系統則是「.rpm」安裝包。它也要對「/etc/elasticsearch/elasticsearch.yml」進行少量的配置后才能啟動。

LogStash組件:Shipper、Broker、Indexer本書涵蓋了LogStash的三種插件類型,並介紹了它們在Shipper和Indexer中的使用方法。James展示了下述輸入插件在LogStash的使用方法:文件、標準輸入(stdin)、Syslog、Lumberjack以及Redis。對於那些無法安裝LogStash的環境,也可以通過其他它選件發送事件,從而與LogStash集成,如Syslog、Lumberjack、Beaver以及Woodchuck。在LogStash的輸入輸出插件之間,可能會存在交集,比如對於Redis,就同時具有輸入和輸出兩個插件。除了介紹兩個主要的輸出Redis和和Elasticsearch外,James還介紹了通過集成其他系統進行輸出,包括Nagios、郵件告警、即時消息以及StatsD/Graphite。這本書中介紹了grok、date、grep以及multiline等過濾器。James向讀者展示了使用通過過濾插件,實現對Postfix日誌及Java應用程序日誌的高效處理。在某些情況下,日誌可以在輸入到LogStash前進行過濾,比如Apache日誌管理能夠自定義日誌格式,可以以JSON格式的進行記錄,這樣LogStash就可以在不使用內部過濾器插件的情況下,方便的進行處理。Redis,就是我們所指定的Broker,用於進行事件流管理,在該角色中,LogStash還支持其他的隊列技術:AMPQ和ZeroMQ。搜索/存儲的路由工作由LogStash的Indexer實例負責執行。

LogStash的擴展擴展LogStash要實現三個主要目標:彈性、性能和完整性。下圖是摘自於本書第7章,它所描述的是對Redis、LogStash以及Elasticsearch的擴展:
http://infoqstatic.com/resource/articles/review-the-logstash-book/zh/resources/42.jpg
LogStash不依賴Redis進行自身的故障轉移管理,而是與此相反,LogStash將根據預先配置的兩個Redis實例,將事件發送到其中一個Redis實例中。如果該Redis實例變為不可用,LogStash就會開始將事件發送到已配置的另一個Redis實例中。作為Indexer,LogStash可以輕鬆的實現擴展:通過創建多個實例,並不斷地從所有可用的Broker拉取數據,並輸出到Elasticsearch。在這種設計中,事件只能傳輸到一個Broker,所以從LogStash的Indexer傳輸事件到Elasticsearch的過程中,應當是沒有重複事件的 。當用戶安裝多個實例並配置信息中設置有公用的配置時,Elasticsearch能夠方便的自行建立群集。它採用組播、單播技術或使用EC2插件,根據各個獨立實例的配置設置自行建立群集。只要在網路允許的情況下,實例間將會自行通訊,將會自行建立群集,隨後開始在群集節點之間分割數據。數據分區將會自動提供彈性和性能。

InfoQ同時就LogStash對James Turnbull進行了採訪。

InfoQ:在LogStash集中化日誌管理系統的成功的商業案例中,您認為效益和成本應該是什麼樣的情況?
James:LogStash的好處和眾多開源系統管理工具一樣:較低的軟體成本、開源、今後可擴展、快速的開發和Bug修復、擁有極好的社區開發解決方案、互相幫助以及幫助用戶形成解決自身問題的發展藍圖。所需成本也和大多數開源工具差不多:沒有商業支持、並非功能齊全的商業替代品、可能有較高的進入門檻,在實施時,同時要求用戶有一定的技能並且官方提供了可用的文檔(儘管現在用戶有了一本很棒的書!)。

InfoQ的:以DevOps為導向的技術團隊為什麼要選擇開源工具LogStash系統,而不是選擇像Splunk這樣的商業工具?
James:對於DevOps團隊而言,這種選擇的主要驅動力是成本。 雖然LogStash(及其控制面板Kibana)的(還)不是Splunk的對手,但它們都是免費的,並能夠迅速的獲得功能和特性。但是使用Splunk需要支付一定的費用,很多規模較小的企業不一定能負擔得起。當然,需要注意的是,雖然這個軟體是免費的,但仍然會有實施成本,而與商業工具相比,很難說成本有多少。

InfoQ:在日誌管理方面,有什麼最簡單易懂而且有用的用例嗎? 如果對於企業中的不同角色有所不同,能請您介紹一些具體有哪些不同嗎?
James:日誌管理的最好用例是故障排除和監控。當用戶的基礎設施出現問題時,應用程序的日誌數據往往是最好的信息來源。日誌同時也是極好的數據源,可以用於監控基礎設施的狀態和時間,還可以用於構建指標以展示應用程序的運行狀態。 這就是說,在企業中的不同團隊關心的是日誌管理用例的不同方面。比如,運營團隊專註於故障排除以及能夠提供性能數據日誌。應用程序開發人員則很有興趣使用日誌輸出來發現並修復錯誤。安全團隊專註定位日誌數據中突出顯示的漏洞和安全事件。

關於書籍作者:http://infoqstatic.com/resource/articles/review-the-logstash-book/zh/resources/43.jpgJames Turnbull是6本有關開源軟體的技術書籍作者,並且是開源社區的長期成員。 James編寫了第一本(以及第二本)關於Puppet的書籍,並為Puppet Labs運營運維和專業服務。James經常在OSCON、Linux.conf.au、FOSDEM、OpenSourceBridge、DevOpsDays和其他一些會議上發表演講。 他是Linux Australia前任總裁,曾是Linux Victoria前委員會成員,負責2008年的Linux.conf.au大會,並擔任Linux.conf.au和OSCON.Y的委員會職位。



http://www.infoq.com/cn/articles/review-the-logstash-book




[火星人 via ] LogStash,使日誌管理更簡單已經有735次圍觀

http://www.coctec.com/docs/service/show-post-215.html