《Elastic Stack應(yīng)用寶典》而系統(tǒng)地介紹了Elastic Stack應(yīng)用與開發(fā)。Elastic Stack由一組處理和分析全文數(shù)據(jù)的組件構(gòu)成,在日志、監(jiān)控等領(lǐng)域中都有著廣泛應(yīng)用。本書在分析了Elastic Stack體系結(jié)構(gòu)的基礎(chǔ)之上,對Elastic Stack中的Elasticsearch、Logstash、Kibana和Beats組件分章節(jié)做了詳細介紹。在講解這些組件時,還列舉了大量的應(yīng)用實例,使讀者可以在實踐操作中迅速掌握這些組件的使用方法。
本書以Elastic Stack*新發(fā)布的版本7為基礎(chǔ)編寫,介紹了Elastic Stack中引入的新技術(shù)和新變化。本書適于有一定開發(fā)基礎(chǔ)的軟件編程人員,也可以做為架構(gòu)師和運維人員的參考資料。
集中式日志分析平臺Elastic Stack7.0全方位應(yīng)用指南;
經(jīng)典ELK Stack的全新版本;
70萬字,Elasticsearch、Logstash、Kibana、Beats四大組件全收錄;
370余段實例展示,循序漸進教你搭建自己的數(shù)據(jù)分析平臺;
開發(fā)人員必備!
前 言
2015年我在為公司做技術(shù)選型時就覺得有必要寫一本全面介紹ELK的圖書,因為彼時在國內(nèi)圖書市場上幾乎連一本全面介紹ELK的書籍都找不到。但由于那時我正在創(chuàng)業(yè),而后又加入了阿里巴巴,繁忙的工作使我根本沒法騰出時間編寫此書。但在此期間ELK卻一直在以驚人的迅速成長著,從Beats組件的加入到ELK更名為Elastic Stack,ELK在國內(nèi)外的應(yīng)用變得越來越廣泛。與此形成鮮明對比的是,許多從事傳統(tǒng)軟件研發(fā)的編程人員和架構(gòu)師對于大數(shù)據(jù)處理、全文檢索等領(lǐng)域的知識還缺乏最基本的認識。2018年Elastic公司掛牌上市讓更多的人知道了ELK,許多在軟件行業(yè)工作的朋友紛紛向我問詢ELK的相關(guān)知識。此時,我剛剛好有了一些空閑時間,所以最終下定決心開始編寫此書。我希望能借此書讓更多的研發(fā)人員了解ELK及其背后的原理,讓人們在大數(shù)據(jù)處理與應(yīng)用中少走一些彎路。
由于ELK也是剛剛更名為Elastic Stack,中間還曾經(jīng)叫過ELK Stack,所以ELK這個名稱在國內(nèi)的接受程度要遠高于Elastic Stack。雖然使用ELK可能更利于本書在讀者群中的傳播,但為了與官方稱謂保持一致,我最終還是決定以Elastic Stack稱呼這一套組件。不僅如此,為了保證本書的權(quán)威性,書中所述內(nèi)容均與Elastic官方敘述保持一致。書中所有示例也都經(jīng)過實際驗證,以保證它們可以在相應(yīng)的環(huán)境中無誤地運行起來。
無論以何種名稱稱呼這套組件,它們現(xiàn)在主要都是指代Elasticsearch、Logstash、Kibana和Beats等四大組件。它們是本書介紹的主要內(nèi)容,并且天然地將本書劃分為五大部分。
第一部分是本書第1章,主要從整體上介紹Elastic Stack家族成員,并且講解了這些組件的安裝和基本使用方法。雖然第一部分只有一章,但這一章是后續(xù)章節(jié)的基礎(chǔ)。在這一部分中介紹了Elastic Stack的幾種應(yīng)用場景,并根據(jù)其中一個場景搭建了一套分布式的日志收集和存儲系統(tǒng)。這套系統(tǒng)從整體上展示了Elastic Stack組件之間的協(xié)作,同時本書后續(xù)章節(jié)所有示例也都是基于這套系統(tǒng)。所以,讀者最好按照該章介紹將這個系統(tǒng)完整地搭建起來,以保證后續(xù)章節(jié)的學(xué)習(xí)可以順利展開。
第二部分是本書第2~8章,主要介紹Elasticsearch的原理和應(yīng)用。如果讀者對Elasticsearch沒有任何了解,建議一定要好好研讀一下第2章。這一章將Elasticsearch的基本原理和重要概念做了非常詳細的講解,這包括全文檢索與倒排索引的理論知識,以及在Elasticsearch中非常重要的索引、映射和文檔等基本概念。除此之外還有Elasticsearch支持大數(shù)據(jù)存儲與容錯的分片、副本等技術(shù),它們是Elasticsearch能夠高效且可靠運行的重要基石。第3~4章主要介紹Elasticsearch對外提供的REST接口,其中第3章介紹的主要是操作索引和文檔的接口,而第4章介紹的則都是與文檔檢索相關(guān)的接口。第5~6章介紹的是在文檔檢索中使用的查詢語言DSL,而第7章介紹的則是可以用于統(tǒng)計分析的聚集查詢。此外,Elasticsearch還定義了一些比較特殊的數(shù)據(jù)類型,這些數(shù)據(jù)類型的DSL與聚集查詢都有專門的用法,所以第8章將它們集中在一起講解。Elasticsearch是Elastic Stack中的核心成員,在應(yīng)用上相對于其它組件也更復(fù)雜一些,希望讀者能夠按照書中給出的示例耐心研習(xí)。
第三部分是本書第9~11章,主要介紹Kibana的文檔發(fā)現(xiàn)、可視化、儀表盤和畫布等功能。Kibana就像是Elasticsearch的圖形化界面一樣,可通過它操作Elasticsearch中的數(shù)據(jù)。第9章介紹的文檔發(fā)現(xiàn)對應(yīng)于Elasticsearch中的DSL,而第10章介紹的文檔可視化則基于聚集查詢。在第11章介紹的綜合展示中,儀表盤由文檔發(fā)現(xiàn)和文檔可視化自由組合而成,而畫布等功能則提供了更為豐富多彩的數(shù)據(jù)展示形式。Kibana使用起來并不難,但它卻可以通過三兩下的配置將數(shù)據(jù)直觀地展示出來。通過這些直觀的展示,用戶可以挖掘出深藏在數(shù)據(jù)之后的信息。
第四部分是本書第12~14章,主要介紹Logstash體系結(jié)構(gòu)及四種插件。第12章介紹了Logstash的整體結(jié)構(gòu),同時還介紹了其中的編解碼器插件。由于Logstash輸入插件與輸出插件有許多相似之處,所以在第13章中按類型對它們做了統(tǒng)一介紹。而由于過濾器插件種類繁多且完全獨立于輸入輸出插件,所以在第14章中單獨介紹。Logstash插件種類繁多,掌握好這些插件可以解決很多數(shù)據(jù)處理中的棘手問題。
第五部分是本書第15~16章,主要介紹Beats組件的共同框架Libbeat以及不同Beats類型的輸入組件。第15章除了介紹Beats體系結(jié)構(gòu)以外,還介紹了在Libbeat框架中實現(xiàn)的共有組件,這主要是處理器組件和輸出組件。第16章則對Beats主要類型的輸入組件做了介紹,包括Packetbeat、Filebeat、Metricbeat、Heartbeat、Auditbeat、Winlogbeat和Journalbeat等。Beats組件使用起來也不復(fù)雜,但它們的出現(xiàn)極大地擴充了Elastic Stack的應(yīng)用領(lǐng)域。
由于本書涉及的內(nèi)容非常龐雜,其中的每一個組件其實都可以獨立成書。所以要想在一本書中將它們?nèi)恐v解清楚,對我來說也是一個非常巨大的挑戰(zhàn)。為了減少篇幅并方便讀者學(xué)習(xí),我在編寫本書時將各種組件的知識做了合理的歸納和總結(jié),將具有相似性的知識放在一起講解以方便讀者比較和記憶。此外,我還希望本書能夠成為開發(fā)人員的一本參考手冊,可以放在手邊隨時查看。所以在編寫此書時我盡可能將所有涉及內(nèi)容都講解到,并以表格和示例的形式將它們羅列出來。但畢竟內(nèi)容太過龐雜,有些內(nèi)容因此也就沒辦法展開詳細講解,希望讀者能夠體諒。
為了節(jié)省篇幅,書中一些示例只展示了核心內(nèi)容。比如在講解Elasticsearch時,多數(shù)REST請求的示例都沒有展示它們的返回結(jié)果,這需要讀者自己動手在Kibana開發(fā)工具中執(zhí)行查看。還有在Logstash、Beat等章節(jié)中講解的配置文件也只列出了關(guān)鍵內(nèi)容,需要讀者自行補充完整。比如在講解Logstash管道配置時,有相當(dāng)一部分示例只列出了所要講解插件的配置,讀者在試驗時要根據(jù)已經(jīng)講解的內(nèi)容將其他必要插件補充完整。不過相信只要讀者認真研讀了章節(jié)的內(nèi)容,這些補充工作就不會太復(fù)雜?傊,實踐出真知,希望讀者在研讀的過程中一定要親自動手操作,這樣才能真正掌握所學(xué)內(nèi)容。
另外需要說明的一點是,由于查詢、檢索和搜索這三個詞在漢語中的含義基本相同,所以我在編寫本書時做了一些區(qū)分。簡單來說就是檢索對應(yīng)全文檢索,查詢對應(yīng)關(guān)系型數(shù)據(jù)庫,而搜索一般只在搜索引擎一詞中出現(xiàn)。為了與人們的習(xí)慣保持一致,在全文檢索的一些名詞中也會使用查詢,比如查詢語句、查詢條件等等。盡管我在編寫本書時已經(jīng)盡可能做了區(qū)分,但由于本書篇幅巨大而不可避免地會出現(xiàn)一些混亂。如果確有讓讀者感到困惑的地方,可以將這三個詞視為相同的含義。
最后要感謝我的父親、妻子和一對兒女,由于編寫此書幾乎占據(jù)了我所有業(yè)余時間,陪伴你們的時間少了很多。感謝你們在此期間給予我 的理解和照顧,最終才使本書得以順利結(jié)稿。還要感謝為本書最終出版做了大量工作的呂瀟等編輯,是你們辛勤地付出讓這本書提早問世。希望本書能夠幫助正在學(xué)習(xí)或使用Elastic Stack的讀者,讓人們可以更輕松、更全面地掌握這一家族中的組件。Elastic Stack的大門已經(jīng)開啟,快開始你的神奇旅程吧!
田雪松,北京航空航天大學(xué)碩士研究生,軟件研發(fā)專家。深耕軟件行業(yè)十多年,精通多種編程語言,并在中間件、微服務(wù)、大數(shù)據(jù)等方面有著豐富實戰(zhàn)經(jīng)驗。參與過銀行、石油、通信、衛(wèi)生、安全等諸多領(lǐng)域的軟件研發(fā)。曾主持設(shè)計和開發(fā)了多套互聯(lián)網(wǎng)應(yīng)用,一些應(yīng)用在國內(nèi)至今仍保持領(lǐng)先地位。曾為國內(nèi)外眾多知名企業(yè)進行研發(fā)技術(shù)專業(yè)培訓(xùn),并實際參與到部分企業(yè)實際問題的解決當(dāng)中,形成了較為完善的知識與實踐講授方法。
前言
第1章 初識Elastic Stack
1.1 從ELK到Elastic Stack
1.1.1 歷史
1.1.2 版本演變
1.1.3 許可授權(quán)
1.1.4 應(yīng)用場景
1.2 Elasticsearch概覽
1.2.1 安裝與配置
1.2.2 體驗Elasticsearch
1.3 Kibana概覽
1.3.1 安裝與配置
1.3.2 連接Elasticsearch
1.3.3 體驗Kibana
1.3.4 導(dǎo)入樣例數(shù)據(jù)
1.4 Logstash概覽
1.4.1 安裝Logstash
1.4.2 啟動Logstash
1.4.3 連接Elasticsearch
1.5 Beats概覽
1.5.1 安裝Filebeats
1.5.2 配置Filebeat
1.5.3 啟動Filebeat
1.6 本章小結(jié)
第2章 Elasticsearch原理與實現(xiàn)
2.1 全文檢索與倒排索引
2.1.1 全文檢索
2.1.2 倒排索引
2.1.3 Elasticsearch索引
2.1.4 Elasticsearch映射
2.2 文檔字段
2.2.1 字段索引
2.2.2 字段存儲
2.2.3 字段參數(shù)
2.2.4 元字段
2.2.5 字段限制
2.3 字段數(shù)據(jù)類型
2.3.1 核心類型
2.3.2 衍生類型
2.3.3 多數(shù)據(jù)類型
2.4 分片與復(fù)制
2.4.1 分片與集群
2.4.2 路由
2.4.3 容量規(guī)劃
2.4.4 副本
2.5 客戶端API概覽
2.5.1 REST接口
2.5.2 Painless腳本
2.5.3 Java API
2.6 本章小結(jié)
第3章 Elasticsearch索引與文檔
3.1 索引別名與配置
3.1.1 索引別名
3.1.2 索引配置
3.2 動態(tài)映射與索引模板
3.2.1 動態(tài)字段
3.2.2 動態(tài)模板
3.2.3 索引模板
3.2.4 _mapping接口
3.3 容量控制與緩存機制
3.3.1 _split接口
3.3.2 _shrink接口
3.3.3 _reindex接口
3.3.4 緩存機制
3.3.5 查看運行狀態(tài)
3.4 操作文檔
3.4.1 索引文檔
3.4.2 獲取文檔
3.4.3 刪除文檔
3.4.4 更新文檔
3.4.5 批量操作
3.5 本章小結(jié)
第4章 Elasticsearch分析與檢索
4.1 _search接口
4.1.1 基于URI
4.1.2 基于請求體
4.2 分頁與排序
4.2.1 from/size參數(shù)
4.2.2 scroll參數(shù)
4.2.3 search_after參數(shù)
4.2.4 sort參數(shù)
4.3 字段投影
4.3.1 _source參數(shù)
4.3.2 stored_fields參數(shù)
4.3.3 docvalue_fields參數(shù)
4.3.4 script_fields參數(shù)
4.4 分析器與規(guī)整器
4.4.1 設(shè)置分析器
4.4.2 _analyze接口
4.4.3 _termvectors接口
4.4.4 規(guī)整器
4.5 內(nèi)置分析器與中文分析器
4.5.1 standard分析器
4.5.2 stop分析器
4.5.3 pattern分析器
4.5.4 custom分析器
4.5.5 其它內(nèi)置分析器
4.5.6 中文分析器
4.6 其它檢索接口
4.6.1 _count接口
4.6.2 _msearch接口
4.6.3 _scripts接口
4.6.4 輔助接口
4.7 本章小結(jié)
第5章 葉子查詢與模糊查詢
5.1 基于詞項的查詢
5.1.1 term、terms和terms_set
5.1.2 range與exists
5.1.3 使用模式匹配
5.1.4 type與ids
5.1.5 停止詞與common查詢
5.2 基于全文的查詢
5.2.1 詞項匹配
5.2.2 短語匹配
5.2.3 查詢字符串
5.2.4 間隔查詢
5.3 模糊查詢與糾錯提示
5.3.1 Levenshtein與NGram
5.3.2 模糊查詢
5.3.3 糾錯與提示
5.4 本章小結(jié)
第6章 相關(guān)性評分與組合查詢
6.1 相關(guān)性評分
6.1.1 相關(guān)度模型
6.1.2 TF/IDF
6.1.3 BM25
6.1.4 相關(guān)度解釋
6.1.5 相關(guān)度權(quán)重
6.2 組合查詢與相關(guān)度組合
6.2.1 bool組合查詢
6.2.2 dis_max組合查詢
6.2.3 constant_score查詢
6.2.4 boosting查詢
6.2.5 function_score查詢
6.2.6 相關(guān)度組合
6.3 本章小結(jié)
第7章 聚集查詢
7.1 度量聚集
7.1.1 平均值聚集
7.1.2 計數(shù)聚集與極值聚集
7.1.3 統(tǒng)計聚集
7.1.4 百分位聚集
7.2 使用范圍分桶
7.2.1 數(shù)值范圍
7.2.2 間隔范圍
7.2.3 聚集嵌套
7.3 使用詞項分桶
7.3.1 terms聚集
7.3.2 significant_terms聚集
7.3.3 significant_text聚集
7.3.4 樣本
7.4 單桶聚集與聚集組合
7.4.1 單桶聚集
7.4.2 聚集組合
7.4.3 鄰接矩陣
7.5 管道聚集
7.5.1 基于兄弟聚集
7.5.2 基于父聚集
7.5.3 矩陣聚集
7.6 本章小結(jié)
第8章 處理特殊數(shù)據(jù)類型
8.1 父子關(guān)系
8.1.1 join類型
8.1.2 has_child查詢
8.1.3 has_parent查詢
8.1.4 parent_id查詢
8.1.5 children聚集
8.1.6 parent聚集
8.2 嵌套類型
8.2.1 nested類型
8.2.2 nested查詢
8.2.3 nested聚集
8.3.4 reverse_nested聚集
8.3 處理地理信息
8.3.1 GeoHash
8.3.2 地理類型字段
8.3.3 geo_shape查詢
8.3.4 geo_bounding_box查詢
8.3.5 geo_distance查詢
8.3.6 geo_polygon查詢
8.3.7 geohash_grid與geo_distance
8.4 使用SQL語言
8.4.1 _sql接口
8.4.2 SQL語法
8.4.3 操作符與函數(shù)
8.5 本章小結(jié)
第9章 Kibana文檔發(fā)現(xiàn)
9.1 索引模式
9.1.1 創(chuàng)建索引模式
9.1.2 管理模式字段
9.2 時間范圍與過濾器
9.2.1 數(shù)據(jù)發(fā)現(xiàn)界面結(jié)構(gòu)
9.2.2 使用時間過濾文檔
9.2.3 自定義過濾器
9.3 使用查詢語言
9.3.1 修改查詢語言
9.3.2 使用Lucene語言
9.3.3 使用KQL語言
9.3.4 查詢對象
9.4 文檔展示與字段過濾
9.4.1 柱狀圖
9.4.2 文檔展示
9.4.3 添加過濾器
9.4.4 分享
9.5 本章小結(jié)
第10章 Kibana文檔可視化
10.1 二維坐標(biāo)圖
10.1.1 面積圖
10.1.2 折線圖與柱狀圖
10.1.3 度量疊加
10.1.4 桶型疊加
10.2 圓形與弧形
10.2.1 餅圖配置
10.2.2 餅圖疊加
10.2.3 目標(biāo)
10.2.4 儀表
10.3 熱度
10.3.1 熱力圖
10.3.2 標(biāo)簽云
10.3.3 坐標(biāo)地圖
10.3.4 區(qū)域地圖
10.4 表格與控件
10.4.1 表格
10.4.2 控件
10.5 本章小結(jié)
第11章 Kibana綜合展示
11.1 儀表盤
11.1.1 創(chuàng)建儀表盤
11.1.2 控件作用
11.1.3 分享
11.2 畫布
11.2.1 使用workpad
11.2.2 管理圖片資源
11.2.3 添加數(shù)據(jù)元素
11.3 監(jiān)控
11.3.1 開啟監(jiān)控
11.3.2 查看監(jiān)控圖表
11.4 地圖
11.4.1 疊加圖層
11.4.2 使用聚集
11.4.3 矢量圖層
11.5 本章小結(jié)
第12章 Logstash結(jié)構(gòu)與配置
12.1 Logstash體系結(jié)構(gòu)
12.1.1 插件
12.1.2 事件
12.1.3 隊列
12.1.4 Logstash監(jiān)控
12.2 管道配置
12.2.1 主管道配置
12.2.2 單管道配置
12.2.3 多管道配置
12.3 編解碼器插件
12.3.1 plain編解碼器
12.3.2 按行編解碼
12.3.3 JSON編解碼
12.3.4 序列化編解碼
12.3.5 collectd編解碼
12.3.6 cef編解碼
12.4 本章小結(jié)
第13章 輸入與輸出
13.1 beats與elasticsearch
13.1.1 beats插件
13.1.2 elasticsearch插件
13.1.3 dead_letter_queue插件
13.2 面向文件的插件
13.2.1 事件屬性
13.2.2 讀取模式
13.2.3 SinceDB
13.2.4 多文件
13.2.5 配置參數(shù)
13.2.6 文件輸出插件
13.3 面向關(guān)系型數(shù)據(jù)庫的插件
13.3.1 連接與語句
13.3.2 執(zhí)行狀態(tài)
13.3.3 配置參數(shù)
13.4 面向消息中間件的插件
13.4.1 Kafka插件
13.4.2 Redis插件
13.4.3 RabbitMQ插件
13.5 面向通信協(xié)議的插件
13.5.1 TCP協(xié)議
13.5.2 HTTP協(xié)議
13.5.3 UDP協(xié)議
13.5.4 IMAP與SMTP協(xié)議
13.6 其它插件
13.6.1 執(zhí)行命令
13.6.2 自動生成
13.6.3 云服務(wù)
13.6.4 未綁定插件
13.7 本章小結(jié)
第14章 過濾器
14.1 全文數(shù)據(jù)結(jié)構(gòu)化
14.1.1 grok過濾器
14.1.2 dissect過濾器
14.2 處理半結(jié)構(gòu)化文本
14.2.1 json過濾器
14.2.2 xml過濾器
14.2.3 csv過濾器
14.2.4 kv過濾器
14.3 事件聚集
14.3.1 task_id與code
14.3.2 map與map_meta
14.3.3 其它參數(shù)
14.4 使用外部資源
14.4.1 Elasticsearch
14.4.2 JDBC
14.4.3 IP地址
14.4.4 Memcached
14.4.5 HTTP
14.5 數(shù)據(jù)轉(zhuǎn)換
14.5.1 mutate過濾器
14.5.2 de_dot過濾器
14.5.3 translate過濾器
14.5.4 date過濾器
14.5.5 urldecode與useragent
14.6 數(shù)據(jù)添加與刪除
14.6.1 uuid與fingerprint
14.6.2 cidr過濾器
14.6.3 產(chǎn)生事件
14.6.4 截取
14.6.5 刪除
14.6.6 限流
14.6.7 其它過濾器
14.7 本章小結(jié)
第15章 Beats原理與結(jié)構(gòu)
15.1 Beats體系結(jié)構(gòu)
15.1.1 共有組件
15.1.2 Beats配置
15.1.3 Beats與Kibana
15.2 Beats處理器
15.2.1 添加邏輯信息
15.2.2 添加基礎(chǔ)信息
15.2.3 添加云信息
15.2.4 刪除數(shù)據(jù)
15.2.5 轉(zhuǎn)換數(shù)據(jù)
15.3 Beats輸出組件
15.3.1 輸出到Elasticsearch
15.3.2 輸出到Logstash
15.3.3 輸出到Kafka
15.3.4 輸出到Redis
15.3.5 輸出到文件
15.4 本章小結(jié)
第16章 輸入組件
16.1 網(wǎng)絡(luò)通信
16.1.1 安裝配置
16.1.2 通信協(xié)議
16.1.3 通信流程
16.1.4 本地進程
16.1.5 事件屬性
16.2 文件數(shù)據(jù)
16.2.1 輸入類型
16.2.2 模塊
16.2.3 文件讀取
16.3 度量數(shù)據(jù)
16.3.1 Metricbeat
16.3.2 Heartbeat
16.3.3 Uptime
16.4 操作系統(tǒng)信息
16.4.1 Auditbeat
16.4.2 Journalbeat
16.4.3 Winlogbeat
16.5 本章小結(jié)