對大數據的搜索、挖掘、可視化以及集群管理,在當今的互聯網 時代是很有必要的。本書的分布式大數據搜索、日志挖掘、可視化、集群監控與管理等方案是基于Elastic Stack 5而提出的,它能有效應對海量大數據所帶來的分布式數據存儲與處理、全文檢索、日志挖掘、可視化、集群管理與性能監控等問題。構建在全文檢索開源軟件Lucene之上的Elasticsearch,不僅能對海量規模的數據完成分布式索引與檢索,還能提供數據聚合分析;Logstash能有效處理來源于各種數據源的日志信息;Kibana是為Elasticsearch提供數據分析的Web接口,可使用它對數據進行高效的搜索、可視化、分析等操作;XPack監控組件可通過Kibana監控集群的狀態;Beats是采集系統監控數據的代理。了解基于Elastic Stack 5的各相關組件并掌握它們的基本使用方法和技巧,對于大數據搜索與挖掘及管理是很有必要的。
和第1版、第2版相比,本書力求反映基于Elastic Stack 5架構的*成果,內容新穎,強調實踐。本書可為高等學校相關專業(如計算機科學與技術、軟件工程、物聯網、信息管理與信息系統、數據科學與大數據技術)學生的學習和科研工作提供幫助,同時對于從事大數據搜索與挖掘、日志分析、信息可視化、集群管理與性能監控的工程技術人員和希望了解網絡信息檢索技術的人員也具有較高的參考價值和工程應用價值。
本書著重介紹關于Elastic Stack的基本知識,帶領讀者深入了解Elastic Stack的實際應用,通過對數據搜索、日志挖掘與結果可視化展示等相關功能的介紹和實戰,引導讀者掌握相關的大數據搜索、日志分析和可視化技術。本書還詳細介紹了X-Pack和Beats組件,展示了在Elastic Stack中的一些實踐。
第3版前言
隨著海量數據管理技術在國民經濟以及互聯網 、物聯網、移動計算等各個領域的廣泛應用,分布式大數據搜索、日志分析與挖掘、數據可視化、集群管理與性能監控等問題正日益受到IT人員的普遍關注。開源的、基于Lucene的全文搜索引擎Elasticsearch以其獨到的分布式數據處理能力,正發揮著越來越重要的作用。根據國際權威的數據庫產品評測機構DBEngines統計,從2016年1月起,Elasticsearch已超過Solr等,成為排名第一的搜索引擎類應用,并且這種成長勢頭目前仍非常強勁。在Elasticsearch基礎上,也衍生出Logstash、Kibana、Beats、XPack、Elastic Cloud、Security、Alerting、Monitoring、Graph、Reporting、ESHadoop等諸多相關組件,它們構成了Elastic Stack的核心,為編程人員提供了一個分布式可擴展的信息存儲和全文檢索機制、基于Logstash的日志處理機制、基于Kibana的挖掘結果可視化機制等。不僅如此,還有Shield(安全和管理插件,如權限控制、加密通信、審計等)、Watcher(性能監控平臺等)、Beats(提供了在應用服務器間傳輸事務信息的分析器PacketBeat、從服務器端傳送日志的FileBeat、分時段采集服務器上操作系統和服務的各項指標的MetricBeat、負責傳輸Windows事件日志的WinlogBeat)等中間件。在實時大數據處理的應用中,上述軟件通常配合使用。2017年上半年,谷歌宣布將與Elastic建立合作伙伴關系,以提供用于Elasticsearch和Kibana開源軟件的完整版本。除提供免費的服務外,谷歌的服務還將包括僅適用于初創公司的高端訂閱功能(如圖形分析、警報和商業支持等)。因此,從實戰的角度掌握Elasticsearch、Logstash、Kibana、XPack、Beats等的入門技巧和基本使用方法,很有必要。
本書第1版《實戰Elasticsearch、Logstash、Kibana分布式大數據搜索與日志挖掘及可視化解決方案》以及本書第2版《大數據搜索與日志挖掘及可視化方案Elastic Stack: Elasticsearch、Logstash、Kibana》,從出版發行到現在,雖時間不長,但已重印了多次。考慮到部分讀者對本書第1版、第2版的修改意見,我們對其中的部分內容進行了必要的補充和修改、完善,對Elastic Stack 5新推出的5.x版本進行了介紹。同本書的第1版和第2版一樣,第3版仍強調實踐和面向初學者,并通過實戰講解的方式,讓讀者更好地了解Elasticsearch、Logstash、Kibana、XPack、Beats等的應用。除第10章兼顧老版本外,其余章節均在Elastic Stack 5的基礎上完成。全書內容包括Elasticsearch的架構簡介、文檔索引及管理、信息檢索與聚合、面向Java的Elasticsearch Client部分功能實現、Elasticsearch配置與集群管理、基于Logstash的日志處理、基于Kibana的數據分析可視化、基于XPack的系統運行監控、基于Beats的數據解析傳輸、應用實例等。本書介紹的基于Elastic Stack 5架構的分布式大數據搜索、日志挖掘、可視化、集群管理與性能監控雖都是入門方案,但對有一定基礎的中、高級使用者亦有一定的參考和工程應用價值。
本書第3版由高凱提出寫作大綱并撰寫了第1章,高莘、岳重陽完成了全書其余章節的內容,并由高凱審校了全書。在本書的寫作過程中,也得到了多方面的支持與幫助。阮冬茹、高國江、李媚、華宇、何曉藝、張姍姍、孟天宏、劉多星、高成亮、毛雨欣、聶穎杰、韓佳等均提供了協助。在寫作過程中,參考了Elastic Stack官方網站https://www.elastic.co/以及互聯網上眾多熱心網友提供的素材。本書的順利完成也得益于參閱了大量的文獻及網上資料。在此謹向這些文獻的作者、熱心網友以及為本書提供幫助的老師,特別是那些由于篇幅所限未在參考文獻中提及的相關文獻的作者和網站,致以誠摯的謝意和崇高的敬意。
由于我們的學識、水平均有限,書中不妥之處在所難免,懇請廣大讀者批評指正。
編者
2017年6月[1][2]
第2版前言
本書第1版從出版發行到現在,雖僅過去短短的半年時間,但在這期間,伴隨著《中共中央關于制定國民經濟和社會發展第十三個五年規劃的建議》中國家大數據發展戰略的實施,伴隨著海量數據管理技術在國民經濟以及互聯網 、物聯網、移動計算等各個領域的廣泛應用,分布式大數據搜索與日志挖掘及可視化解決方案正日益受到各行各業人員的普遍關注。開源的、基于Lucene的全文搜索引擎Elasticsearch以其獨到的分布式數據處理能力,正發揮著越來越重要的作用。根據國際權威的數據庫產品評測機構DBEngines統計,在2016年1月,Elasticsearch已超過Solr等,成為排名第一的搜索引擎類應用。
ELK Stack是以Elasticsearch、Logstash、Kibana三個開源軟件為主的大數據處理工具集,也是目前開源的最流行的大數據分析解決方案,它為編程人員提供了一個分布式可擴展的信息存儲和全文檢索機制、基于Logstash的日志處理機制、基于Kibana的挖掘結果可視化的機制。不僅如此,ELK Stack還有Shield(安全和管理插件,如權限控制、加密通信、審計等)、Watcher(性能監控平臺等)、Beats(官方提供了用來收集日志的Filebeat、用來收集系統基礎設置數據的Topbeat、統計收集網絡信息的Packetbeat)等中間件。在實時大數據處理的應用中,上述軟件通常配合使用。因此,從實戰的角度掌握Elasticsearch、Logstash、Kibana等軟件的基本使用方法和技巧,很有必要。
考慮到部分讀者對本書第1版的修改意見,我們對其中的部分內容進行了必要的補充和修改、完善。一方面,對ELK Stack的最新版本進行了簡述,力求反映ELK Stack的最新成果;同時,考慮到與本書第1版的內容銜接,對部分使用上無差異的操作,仍舊以Elasticsearch、Logstash、Kibana的經典版本為基礎進行介紹。另一方面,對Elasticsearch中涉及索引、檢索、統計、Java實現、集群管理的內容(主要涉及第1版中的第2~6章的內容),給出了實例。同第1版一樣,本書第2版仍強調實踐和面向初學者,并通過實戰講解的方式,讓讀者更好地了解ELK Stack的應用。全書涵蓋ELK Stack簡介、文檔索引與處理、信息檢索與過濾、信息統計與分析、基于Java客戶端的Elasticsearch功能實現、Elasticsearch配置與管理、基于Logstash的網絡日志處理、基于Kibana的分析結果可視化、應用實例等內容。本書介紹的基于ELK Stack架構的分布式大數據搜索與日志挖掘及可視化是入門方案,對有一定基礎的中、高級使用者亦有一定的參考和工程應用價值。
全書由高凱提出寫作大綱。第1章、第6章和第7章中的部分內容由高凱撰寫,其余各章由高莘撰寫,最后由高凱完成全書統稿和審校工作。書中部分實驗數據集亦由高凱提供。在本書的寫作過程中,也得到了多方面的支持與幫助。第2~6章中的實例部分分別由何曉藝、張姍姍、孟天宏、劉多星等參加編寫。同時,我們也參考了相關文獻和互聯網上眾多熱心網友提供的素材。本書的順利完成也得益于參閱了大量的相關工作及研究成果,在此謹向這些文獻的作者、熱心網友,以及為本書提供幫助的老師,特別是那些由于篇幅所限未及在參考文獻中提及的相關文獻的作者和網站,致以誠摯的謝意和崇高的敬意。
由于我們的學識、水平均有限,書中不妥之處在所難免,懇請廣大讀者批評指正。
編者
[1][2]
第1版前言
建立在分布式系統之上的大數據搜索與挖掘應用,是當今IT領域的研究與工程實踐熱點之一。在DBEngines公布的2015年度最受歡迎的數據庫系統中, Elasticsearch名列前茅。作為開源分布式檢索與數據處理平臺,Elasticsearch 不僅僅是一個數據庫,它還是一個基于Lucene構建的開源的、分布式RESTful信息檢索框架。基于Elasticsearch Logstash Kibana的信息處理架構,為編程人員提供了一種分布式可擴展的信息存儲和全文檢索機制以及基于Logstash的日志處理機制、基于Kibana的挖掘結果可視化機制。它不僅能對海量規模的數據完成分布式索引與檢索,還能提供數據聚合分析和可視化。因此,從實戰的角度掌握Elasticsearch、Logstash、Kibana的基本使用方法和技巧,很有必要。
大數據這個術語的出現,大概可追溯到基于Lucene的Apache開源項目Nutch。從2009年開始,大數據開始成為互聯網行業的流行詞匯,也吸引了越來越多的關注。物聯網、云計算、移動互聯網、手機與平板電腦、PC以及遍布各個角落的各種各樣的傳感器,無一不是大數據的來源方或承載方。可以說,大數據就在我們身邊。從阿里巴巴、1號店、京東商城等電子商務數據,到QQ等即時聊天的內容,再到Google、Bing、百度,又到社會網絡與微博、微信等,都在生產、承載著大數據。隨著信息處理量的增大,對大數據的分布式存儲、快速搜索與挖掘顯得特別必要。例如,挖掘用戶的行為習慣和喜好,從凌亂紛繁的大數據背后找到符合用戶興趣和習慣的產品和服務,并對產品和服務進行有針對性的調整和優化,本身就蘊含著巨大的商機。但是,傳統的基于關系型數據庫管理系統的方法,在高效處理大數據時顯得有些力不從心。雖然開源的全文檢索工具Lucene能處理非結構化和半結構化的信息,但其某些版本在分布式處理方面的不足限制了它在大數據方面的應用。我們希望找到一個快速的分布式信息檢索解決方案,希望它是一個零配置和易于上手的全文檢索模式,希望它能夠簡單地使用JSON通過HTTP索引數據,更希望它支持分布式處理并支持系統擴展,能夠實時搜索,并且穩定、可靠。
Elasticsearch是一個基于Lucene的開源分布式信息檢索架構和全文搜索工具。構建在Elasticsearch基礎上的日志處理工具Logstash和信息可視化組件Kibana,能有效銜接并高效處理由Elasticsearch索引的分布式數據,[1][2]三者優勢互補,各司其職,共同完成網絡大數據分布式存儲、倒排索引、全文檢索、Web日志處理、挖掘結果可視化這一整套的信息處理流程。目前,國內這方面的資料很少,僅有的幾部譯著所提及的Elasticsearch版本較低,且沒有任何有關Logstash和Kibana的書籍。因此,我們萌發了一個想法,將Elasticsearch、Logstash、Kibana(統稱為ELK)聯袂奉獻給廣大軟件開發者,幫助他們盡快熟悉ELK架構,并構建自己的Web應用程序,完成對分布式信息的檢索與分析工作。
本書強調實踐、內容新穎、條理清晰、組織合理,通過實戰講解的方式,讓讀者更好地了解ELK架構的實現細節。全書內容涵蓋ELK簡介、文檔索引與處理、信息檢索與過濾、信息統計與分析、基于Java客戶端的Elasticsearch功能實現、Elasticsearch配置與管理、基于Logstash的網絡日志處理、基于Kibana的分析結果可視化、應用實例等多個部分。
全書由高凱提出寫作大綱。第1章和第6章由高凱撰寫,其余各章均由高莘撰寫,最后由高凱完成全書統稿和審校工作。其中,第1章概述Elasticsearch、Logstash、Kibana的主要功能,對涉及的一些概念進行簡介,并從實用的角度出發,通過對實例的講解,介紹索引、檢索的實現機制;第2章對Elasticsearch中的索引、映射等進行說明;第3章介紹Elasticsearch中的檢索功能;第4章介紹基于Facets、Aggregations的數據聚合與統計功能;第5章從工程實踐的角度,介紹面向Java客戶端的Elasticsearch部分功能的設計與實現;第6章介紹Elasticsearch的配置及一些高級功能、監控等的使用;第7章介紹日志處理及Logstash的應用;第8章介紹基于Kibana的可視化技術;第9章給出一個綜合應用實例,該實例從網頁采集、處理、存儲、索引、日志處理、可視化展示等入手,介紹了基于ELK的分布式信息檢索與日志挖掘解決方案。
本書的順利完成也得益于參閱了大量的相關工作及研究成果,部分內容源自Elasticsearch、Logstash、Kibana的官方文檔。在寫作過程中,參考了相關文獻和互聯網上眾多熱心網友提供的素材,在此謹向這些文獻的作者、熱心網友以及為本書提供幫助的老師,特別是那些由于篇幅所限未及在參考文獻中提及的相關文獻的作者和網站,致以誠摯的謝意和崇高的敬意。
由于我們的學識、水平均有限,書中不妥之處在所難免,懇請廣大讀者批評指正。
編者
作者簡介高凱,本書主編。教授,博士畢業于上海交通大學計算機應用技術專業,省級重點學科計算機軟件與理論中信息檢索與云計算方向學術帶頭人,研究生導師,中國計算機學會高級會員,中國計算機學會計算機應用專委會常委,International Journal of Computer Applications in Technology副主編;主要研究方向為大數據搜索與挖掘、自然語言處理、網絡信息檢索、社會計算等;近幾年出版了《信息檢索與智能處理》、《大數據搜索與挖掘》、《網絡信息檢索技術及搜索引擎系統開發》等學術專著及多部規劃教材;在Expert Systems With Applications、International Journal on Intelligent Information and Database System、International Journal on Modelling, Identification and Control、《中文信息學報》、《電子學報》、《小型微型計算機系統》等學術期刊以及在PAKDD等國際學術會議上發表學術論文五十余篇;主持及參與國家自然科學基金課題、省級科技支撐計劃課題、省級自然科學基金課題等多項,申請計算機軟件著作權登記十余項。
目錄
第1章概述1
1.1Elasticsearch概述3
1.1.1Elasticsearch的安裝與簡單配置4
1.1.2Elasticsearch API的簡單使用方式7
1.2Logstash7
1.3Kibana8
1.4其他8
1.5擴展知識與閱讀9
1.6本章小結10
第2章文檔索引及管理11
2.1文檔索引概述11
2.2Head: Elasticsearch的數據管理工具13
2.3建立索引16
2.4通過映像mappings配置索引20
2.4.1在索引中使用映像21
2.4.2管理/配置映像22
2.4.3獲取映像信息22
2.4.4刪除映像24
2.5管理索引文件24
2.5.1打開、關閉、檢測、刪除索引文件24
2.5.2清空索引緩存25
2.5.3刷新索引數據25
2.5.4優化索引數據26
2.5.5Flush操作26[1][2][1][3]2.6設置中文分析器26
2.7對文檔的其他操作29
2.7.1獲取指定的文檔信息29
2.7.2刪除文檔中的信息31
2.7.3數據更新31
2.7.4基于POST方式批量獲取文檔34
2.8實例36
2.9擴展知識與閱讀40
2.10本章小結41
第3章信息檢索與聚合42
3.1實驗數據集描述43
3.2基本檢索44
3.2.1檢索方式44
3.2.2query查詢45
3.2.3from / size查詢45
3.2.4查詢結果排序46
3.2.5高亮搜索詞48
3.2.6查詢模板50
3.3檢索進階50
3.3.1全文檢索51
3.3.2詞項檢索54
3.3.3復合查詢58
3.3.4跨度查詢60
3.3.5特殊查詢63
3.3.6腳本script64
3.4聚合67
3.4.1metrics aggregations68
3.4.2bucket aggregations72
3.4.3pipeline aggregations81
3.4.4matrix aggregations85
3.5實例87
3.6擴展知識與閱讀92
3.7本章小結93
第4章面向Java的Elasticsearch Client部分功能實現94
4.1Elasticsearch節點實例化94
4.1.1通過Maven添加Elasticsearch依賴94
4.1.2初始化TransportClient96
4.2索引數據98
4.2.1準備JSON數據98
4.2.2索引JSON數據100
4.3對索引文檔的操作101
4.3.1獲取索引文檔數據101
4.3.2刪除索引文檔104
4.3.3更新索引文檔105
4.3.4批量操作索引文件105
4.4信息檢索107
4.4.1概述107
4.4.2MultiSearch109
4.4.3Search template110
4.4.4Query DSL概述110
4.4.5matchAllQuery111
4.4.6全文檢索的部分方法112
4.4.7詞項檢索的部分方法115
4.4.8復合查詢的部分方法119
4.4.9跨度查詢的部分方法121
4.4.10特殊查詢124
4.5聚合126
4.5.1Metrics聚合126
4.5.2Bucket聚合130
4.6對檢索結果的進一步處理134
4.6.1控制每頁的顯示數量及顯示排序依據134
4.6.2基于scroll的檢索結果及其分頁135
4.7實例137
4.7.1在Elasticsearch中建立索引137
4.7.2連接Elasticsearch138
4.7.3信息采集與索引構建139
4.7.4搜索模塊的實現141
4.7.5推薦模塊的實現142
4.7.6聚合模塊的實現143
4.8擴展知識與閱讀145
4.9本章小結145
第5章Elasticsearch配置與集群管理146
5.1Elasticsearch部分基本配置及其說明146
5.2索引和查詢效率的優化149
5.3監控集群狀態150
5.4控制索引分片與副本分配152
5.5集群管理154
5.6擴展知識與閱讀155
5.7本章小結156
第6章基于Logstash的日志處理157
6.1概述158
6.2Input: 處理輸入的日志數據160
6.2.1處理基于file方式輸入的日志信息161
6.2.2處理基于generator產生的日志信息162
6.2.3處理基于log4j的日志信息163
6.2.4處理基于redis的日志信息165
6.2.5處理基于stdin方式輸入的信息168
6.2.6處理基于TCP傳輸的日志數據169
6.2.7處理基于UDP傳輸的日志數據173
6.3codecs: 格式化日志數據174
6.3.1JSON格式175
6.3.2rubydebug格式177
6.3.3plain格式177
6.4基于filter的日志處理與轉換178
6.4.1JSON filter178
6.4.2grok filter180
6.4.3kv filter182
6.5output: 輸出日志數據184
6.5.1將處理后的日志輸出到Elasticsearch中185
6.5.2將處理后的日志輸出至文件中186
6.5.3將處理后的部分日志輸出到csv格式的文件中187
6.5.4將處理后的日志輸出到redis中189
6.5.5將處理后的部分日志通過UDP協議輸出190
6.5.6將處理后的部分日志通過TCP協議輸出192
6.5.7將收集到的日志信息傳輸到自定義的HTTP接口中195
6.6擴展知識與閱讀196
6.7本章小結197
第7章基于Kibana的數據分析可視化198
7.1Kibana概述199
7.2安裝Kibana199
7.3使用Management管理配置200
7.3.1添加index pattern200
7.3.2高級設置202
7.3.3管理已保存的檢索、可視化和儀表板205
7.4使用Discover執行查詢206
7.4.1設置時間過濾器206
7.4.2在index pattern中執行搜索207
7.4.3字段過濾208
7.4.4查看文檔數據210
7.5使用Visualize創建統計圖表211
7.6使用Dashboard創建動態儀表板214
7.6.1創建新的動態儀表板215
7.6.2打開已保存的動態儀表板215
7.6.3分享動態儀表板216
7.7使用Timelion創建時間線216
7.8使用Dev Tools執行命令行218
7.8.1在Console中執行命令218
7.8.2Console的快捷鍵220
7.8.3Console的配置221
7.9網站性能監控可視化應用的設計與實現221
7.9.1概述222
7.9.2使用Visualize實現可視化222
7.9.3使用Dashboard整合可視化結果225
7.10擴展知識與閱讀227
7.11本章小結227
第8章基于XPack的系統運行監控229
8.1XPack概述229
8.2安裝XPack230
8.3Security插件與安全性231
8.3.1身份驗證機制與用戶管理231
8.3.2匿名訪問233
8.3.3基于域的用戶認證234
8.3.4基于角色的訪問權限配置236
8.3.5IP過濾238
8.3.6帶有身份認證的TransportClient240
8.3.7帶有身份認證的RESTful命令243
8.4使用Monitoring監控系統運行狀態243
8.4.1系統運行狀態監控243
8.4.2配置Monitoring247
8.4.3搭建獨立的Monitoring集群248
8.5Alerting插件與異常事件警報250
8.5.1通過RESTful方式設置監視器250
8.5.2通過Java程序設置監視器254
8.6Reporting與報告生成256
8.6.1在程序中生成報告256
8.6.2通過監視器自動生成報告257
8.7使用Graph探索數據關聯259
8.8擴展知識與閱讀261
8.9本章小結261
第9章基于Beats的數據解析傳輸262
9.1基于Packetbeat的網絡數據包傳輸263
9.1.1概述263
9.1.2安裝263
9.1.3配置264
9.1.4加載索引模板266
9.1.5啟動和關閉267
9.1.6使用Kibana進行展示268
9.2基于Filebeat的日志傳輸269
9.2.1概述269
9.2.2安裝和配置269
9.2.3啟動和關閉272
9.2.4使用Kibana進行展示272
9.3基于Metricbeat的系統指標數據傳輸273
9.3.1概述273
9.3.2安裝和配置274
9.3.3啟動和關閉275
9.3.4使用Kibana進行展示276
9.4基于Winlogbeat的Windows事件日志數據傳輸277
9.4.1概述277
9.4.2安裝278
9.4.3配置279
9.4.4啟動和關閉282
9.4.5使用Kibana進行展示283
9.5擴展知識與閱讀284
9.6本章小結285
第10章網絡信息檢索與分析實踐1286
10.1信息采集286
10.2基于Python的信息檢索及Web端設計291
10.2.1安裝Python及Django291
10.2.2安裝Elasticsearch的Python插件292
10.2.3Web頁面設計293
10.3基于Logstash的日志處理296
10.3.1安裝和配置Nginx297
10.3.2設計面向日志文件的pattern297
10.3.3在Logstash中進行相關配置298
10.4基于Kibana的日志分析結果可視化設計與實現299
10.4.1圖表1: 狀態碼走勢分析300
10.4.2圖表2: 查詢詞分析302
10.4.3圖表3: 分析各狀態碼隨時間的變遷302
10.4.4集成圖表304
10.5擴展知識與閱讀304
10.6本章小結305
第11章網絡信息檢索與分析實踐2306
11.1面向動態網站的信息采集307
11.1.1軟件準備307
11.1.2瀏覽器驅動程序準備307
11.1.3創建索引和映像308
11.1.4導入依賴309
11.1.5數據采集310
11.2基于Spring MVC的信息檢索及Web程序設計317
11.2.1創建和配置Spring MVC項目317
11.2.2前端頁面設計319
11.2.3后端控制器類324
11.3基于Logstash的日志處理329
11.4基于Beats的數據傳輸330
11.5基于Kibana的數據可視化331
11.5.1可視化索引文件中的信息331
11.5.2對Logstash、Beats的可視化展示333
11.6基于XPack的系統監控335
11.7擴展知識與閱讀337
11.8本章小結337
參考文獻339