編輯推薦
本書著重介紹關於Elastic Stack的基本知識,帶領讀者深入瞭解Elastic Stack的實際應用,通過對數據搜索、日誌挖掘與結果可視化展示等相關功能的介紹和實戰,引導讀者掌握相關的大數據搜索、日誌分析和可視化技術。本書還詳細介紹瞭X-Pack和Beats組件,展示瞭在Elastic Stack中的一些實踐。
內容簡介
對大數據的搜索、挖掘、可視化以及集群管理,在當今的“互聯網+”時代是很有必要的。本書的分布式大數據搜索、日誌挖掘、可視化、集群監控與管理等方案是基於Elastic Stack 5而提齣的,它能有效應對海量大數據所帶來的分布式數據存儲與處理、全文檢索、日誌挖掘、可視化、集群管理與性能監控等問題。構建在全文檢索開源軟件Lucene之上的Elasticsearch,不僅能對海量規模的數據完成分布式索引與檢索,還能提供數據聚閤分析;Logstash能有效處理來源於各種數據源的日誌信息;Kibana是為Elasticsearch提供數據分析的Web接口,可使用它對數據進行高效的搜索、可視化、分析等操作;X�睵ack監控組件可通過Kibana監控集群的狀態;Beats是采集係統監控數據的代理。瞭解基於Elastic Stack 5的各相關組件並掌握它們的基本使用方法和技巧,對於大數據搜索與挖掘及管理是很有必要的。
和第1版、第2版相比,本書力求反映基於Elastic Stack 5架構的*新成果,內容新穎,強調實踐。本書可為高等學校相關專業(如計算機科學與技術、軟件工程、物聯網、信息管理與信息係統、數據科學與大數據技術)學生的學習和科研工作提供幫助,同時對於從事大數據搜索與挖掘、日誌分析、信息可視化、集群管理與性能監控的工程技術人員和希望瞭解網絡信息檢索技術的人員也具有較高的參考價值和工程應用價值。
作者簡介
高凱,本書主編。教授,博士畢業於上海交通大學計算機應用技術專業,省級重點學科“計算機軟件與理論”中“信息檢索與雲計算”方嚮學術帶頭人,研究生導師,中國計算機學會高級會員,中國計算機學會計算機應用專委會常委,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章基於X�睵ack的係統運行監控229
8.1X�睵ack概述229
8.2安裝X�睵ack230
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基於X�睵ack的係統監控335
11.7擴展知識與閱讀337
11.8本章小結337
參考文獻339
精彩書摘
Chapter 5第5章Elasticsearch配置與集群管理“Elasticsearch comes with reasonable defaults for most settings. Before you set out to tweak and tune the configuration,make sure you understand what are you trying to accomplish and the consequences. The primary way of configuring a node is via the elasticsearch.yml file. This template lists the most important settings you may want to configure for a production cluster.”——elasticsearch.yml
基於Elasticsearch,可以完成很多和信息存儲、檢索等相關的問題。本章將對Elasticsearch的配置、集群管理等進行說明,並對提高索引和查詢效率的策略進行簡述。通過對本章的學習,能達到更好地配置和使用Elasticsearch的目的。
5.1Elasticsearch部分基本配置及其說明
Elasticsearch的大多數配置信息位於{es_home}/config/elasticsearch.yml文件中,所有配置都可使用環境變量。另一個是日誌配置文件{es_home}/config/log4j2.properties,它對日誌進行配置,其設置按普通log4j2配置文件來設置即可。
Elasticsearch.yml負責設置服務器的默認狀態,Elasticsearch的大多數配置在該配置文件中完成。參考文獻[Open,2014a][子猴博客,2014],本節給齣針對elasticsearch.yml的部分配置設置信息,包括:
(1) 集群名稱cluster.name: 例如“cluster.name: elasticsearch”。設置好以後,會自動發現在同一網段下的節點,如果在同一網段下有多個集群,可用這個屬性來區分不同的集群。
(2) 節點名稱node.name: Elasticsearch啓動時會自動創建節點名稱,但也可在node.name中配置,例如“node.name: "Franz Kafka"”。指定節點名稱有助於利用API訪問具體的節點。雖然默認的集群啓動時會給每個節點初始化一個名稱,但仍然建議在這裏手動設置節點名稱。
(3) 節點是否為master主節點: 每個節點都可被配置成為主節點,默認值為true,如“node.master: true”。在node.master: true中進行設置,目的是指定該節點是否有資格被選舉成為node,默認集群中的第一颱機器為master,如果這颱機器宕機就會重新選舉master。
[1][2][1][3](4) 設置節點是否存儲數據: 默認值為true,即設置node.data的值為“node.data: true”。如果希望節點隻是一個master但不存儲數據,則應當設置為代碼段5.1所示的屬性(注: 的#標記後的文字是注釋說明)。#代碼段5.1: 設置節點是master但不存儲數據
node.master: true
node.data: false
如果希望節點隻存儲數據但不是一個master,則應當設置為代碼段5.2所示的屬性。#代碼段5.2: 設置節點不作為master但存儲數據
node.master: false
node.data: true
如果既不希望該節點為一個master也不想它存儲數據,則應該設置為代碼段5.3所示的屬性。對部分相關配置的說明如下:#代碼段5.3: 設置節點既不是master也不存儲數據
node.master: false
node.data: false
(1) node.attr.rack設置機架編號,如“r1”。
(2) 可在node.max_local_storage_nodes中設置一颱機器能運行的最大節點數目。
(3) 設置配置文件的存儲路徑: path.conf: /path/to/conf,默認是Elasticsearch根目錄下的config文件夾。
(4) 設置分配給當前節點的索引數據所在的位置: 可在配置文件的path.data: /path/to/data中進行設置,默認是Elasticsearch根目錄下的data文件夾,可以選擇包含一個以上的位置,用逗號隔開,這樣使得數據在文件級彆可跨越位置,在創建時就有更多的自由路徑可供選擇。
(5) 設置日誌文件所在位置: 可在path.logs: /path/to/logs中進行設置,默認是Elasticsearch根目錄下的logs文件夾。
(6) 設置綁定的IP地址,可以是IPv4或IPv6的,默認為0.0.0.0。默認情況下Elasticsearch使用0.0.0.0地址,並為HTTP傳輸開啓9200~9300端口,為節點到節點的通信開啓9300~9400端口。也可自行設置IP地址,可在配置文件的network.bind_host和network.publish_host中進行設置。
(7) 設置節點與其他節點交互的TCP端口,默認是9300,可在配置文件的transport.tcp.port中進行設置。
(8) 設置是否壓縮TCP傳輸時的數據,默認為false,可在配置文件的transport.tcp.compress中進行設置。
(9) 設置為HTTP傳輸監聽定製的端口,默認是9200,可在配置文件的http.port中進行設置。
(10) 設置是否使用HTTP協議對外提供服務,默認為true,可在配置文件的http.enabled中進行設置。
(11) 設置內容的最大長度,默認是100MB,可在配置文件的http.max_content_length中進行設置。
(12) 設置參數來保證集群中的節點可以知道其他N個有master資格的節點,默認為1。對於較大的集群來說,可以將該值設置為 (具有master資格的節點數/2)+1,可在配置文件的discovery.zen.minimum_master_nodes中進行設置。
(13) 設置集群中自動發現其他節點時ping連接超時時間,默認為3s,即3秒,對於比較差的網絡環境可以提高該值來防止自動發現時齣錯,可在配置文件的discovery.zen.ping_timeout中進行設置。
(14) 設置集群中N個節點啓動時進行數據恢復,默認為1,可在配置文件的gateway.recover_after_nodes中進行設置。
(15) 設置初始化數據恢復進程的超時時間,默認是5分鍾: 可在配置文件的gateway.recover_after_time中進行設置。
(16) 設置這個集群中節點的數量,默認為2,一旦這N個節點啓動,就會立即進行數據恢復,可在gateway.expected_nodes中進行設置。
(17) 初始化數據恢復時並發恢復綫程的個數,默認為4,可在配置文件的cluster.routing.allocation.node_initial_primaries_recoveries中進行設置。
(18) 設置添加刪除節點或負載均衡時並發恢復綫程的個數,默認為4,可在配置文件的cluster.routing.allocation.node_concurrent_recoveries中進行設置。
(19) 設置數據恢復時限製的帶寬,如100MB,默認為0(即無限製),可在配置文件的indices.recovery.max_bytes_per_sec中進行設置。
(20) 設置集群中master節點的初始列錶,可通過這些節點來自動發現新加入集群節點: discovery.zen.ping.unicast.hosts: ["host1","host2:port","host3[portX�瞤ortY]"]。: 在Elasticsearch 5.0及後續版本中,形如number_of_shards、number_of_replicas這樣的索引級配置不允許在節點配置文件中寫入,相應地應使用RESTful Index API來更新所有節點的配置。關於這部分的執行方法參見本書相關章節的內容。
5.2索引和查詢效率的優化
Elasticsearch的索引是基於倒排索引機製完成的。從索引優化的角度齣發,在建立索引時,要考慮到影響索引速度的因素:
�r shard數量。
�r 節點數量。
�r 索引操作(如閤並、優化,索引寫操作等)。
……
前言/序言
第3版前言
隨著海量數據管理技術在國民經濟以及互聯網+、物聯網、移動計算等各個領域的廣泛應用,分布式大數據搜索、日誌分析與挖掘、數據可視化、集群管理與性能監控等問題正日益受到IT人員的普遍關注。開源的、基於Lucene的全文搜索引擎Elasticsearch以其獨到的分布式數據處理能力,正發揮著越來越重要的作用。根據國際權威的數據庫産品評測機構DB�睧ngines統計,從2016年1月起,Elasticsearch已超過Solr等,成為排名第一的搜索引擎類應用,並且這種成長勢頭目前仍非常強勁。在Elasticsearch基礎上,也衍生齣Logstash、Kibana、Beats、X�睵ack、Elastic Cloud、Security、Alerting、Monitoring、Graph、Reporting、ES�睭adoop等諸多相關組件,它們構成瞭Elastic Stack的核心,為編程人員提供瞭一個分布式可擴展的信息存儲和全文檢索機製、基於Logstash的日誌處理機製、基於Kibana的挖掘結果可視化機製等。不僅如此,還有Shield(安全和管理插件,如權限控製、加密通信、審計等)、Watcher(性能監控平颱等)、Beats(提供瞭在應用服務器間傳輸事務信息的分析器PacketBeat、從服務器端傳送日誌的FileBeat、分時段采集服務器上操作係統和服務的各項指標的MetricBeat、負責傳輸Windows事件日誌的WinlogBeat)等中間件。在實時大數據處理的應用中,上述軟件通常配閤使用。2017年上半年,榖歌宣布將與Elastic建立閤作夥伴關係,以提供用於Elasticsearch和Kibana開源軟件的完整版本。除提供免費的服務外,榖歌的服務還將包括僅適用於初創公司的高端訂閱功能(如圖形分析、警報和商業支持等)。因此,從實戰的角度掌握Elasticsearch、Logstash、Kibana、X�睵ack、Beats等的入門技巧和基本使用方法,很有必要。
本書第1版《實戰Elasticsearch、Logstash、Kibana——分布式大數據搜索與日誌挖掘及可視化解決方案》以及本書第2版《大數據搜索與日誌挖掘及可視化方案——Elastic Stack: Elasticsearch、Logstash、Kibana》,從齣版發行到現在,雖時間不長,但已重印瞭多次。考慮到部分讀者對本書第1版、第2版的修改意見,我們對其中的部分內容進行瞭必要的補充和修改、完善,對Elastic Stack 5新推齣的5.x版本進行瞭介紹。同本書的第1版和第2版一樣,第3版仍強調實踐和麵嚮初學者,並通過實戰講解的方式,讓讀者更好地瞭解Elasticsearch、Logstash、Kibana、X�睵ack、Beats等的應用。除第10章兼顧老版本外,其餘章節均在Elastic Stack 5的基礎上完成。全書內容包括Elasticsearch的架構簡介、文檔索引及管理、信息檢索與聚閤、麵嚮Java的Elasticsearch Client部分功能實現、Elasticsearch配置與集群管理、基於Logstash的日誌處理、基於Kibana的數據分析可視化、基於X�睵ack的係統運行監控、基於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的官方文檔。在寫作過程中,參考瞭相關文獻和互聯網上眾多熱心網友提供的素材,在此謹嚮這些文獻的作者、熱心網友以及為本書提供幫助的老師,特彆是那些由於篇幅所限未及在參考文獻中提及的相關文獻的作者和網站,緻以誠摯的謝意和崇高的敬意。
由於我們的學識、水平均有限,書中不妥之處在所難免,懇請廣大讀者批評指正。
編者