Day82_ELK(一)
ElasticSearch
1、搜索的介紹
搜索是指搜尋檢索,指代使用一定手段來檢索到我們自己需要的信息,包括從文件當中檢索,百度當中檢索,網(wǎng)站內(nèi)部搜索等等
2、全文檢索的介紹
1、全文檢索的需求介紹
首先我們談幾個公司,如雷貫耳的:百度、谷歌、維基百科;這些公司都有一個相似性就是門戶網(wǎng)站,可以提供我們通過關(guān)鍵字搜索,然后快速的檢索出我們想要的信息;
【網(wǎng)頁百度展示】
比如我們檢索優(yōu)就業(yè),百度后臺就會按照這個關(guān)鍵字進行查找(里面有搜索庫,以及爬蟲庫),然后按照權(quán)重來進行從上到下的排序,給我們高亮的展示出現(xiàn)
【京東或者淘寶展示】
隨便搜索東西,就會高精度的展示我們想要的;就會根據(jù)關(guān)鍵詞進行海量數(shù)據(jù)的快速的檢索
比如我們查找:”護手霜“ , 那么這期間內(nèi)部會經(jīng)過大體的:1、分詞(護手,手霜,護等)2、根據(jù)這些詞去海量的數(shù)據(jù)中檢索 3、然后根據(jù)權(quán)重把檢索出來的信息進行排序展示給我們
【傳統(tǒng)做法】
那么對于一般的公司,初期是沒有那么多數(shù)據(jù)的,所以很多公司更傾向于使用傳統(tǒng)的數(shù)據(jù)庫:mysql;比如我們要查找關(guān)鍵字”優(yōu)就業(yè)“,那么查詢的方式大概就是:select * from table where field like ‘%優(yōu)就業(yè)%’; 但是隨著業(yè)務(wù)發(fā)展,數(shù)據(jù)會不斷的膨脹,那么問題就來了;mysql單表查詢能力即便經(jīng)過了優(yōu)化,它的極限也就是400W左右的數(shù)據(jù)量。而且還會經(jīng)常出現(xiàn)查詢超時的現(xiàn)象;
然后很多公司開始對數(shù)據(jù)庫進行橫向和縱向的擴容,開始進行數(shù)據(jù)庫表的“拆分”:橫向拆分和縱向拆分;但是即便這樣操作,仍然會出現(xiàn)很多問題,比如:
1、數(shù)據(jù)庫會出現(xiàn)單點故障問題,于是先天主從復(fù)制關(guān)系,于是增加了運維成本
2、因為對表的拆分,增加了后期維護的難度,同樣也是增加了運維成本
3、即便做了大量的維護,但對于大數(shù)據(jù)的檢索操作,依然很慢,完全達不到期望值
于是出現(xiàn)了lucene,全文檢索的工具。但是lucene對外暴露出的可用接口對于開發(fā)人員來說,操作是非常的復(fù)雜,而且沒有效率的;于是在lucene的基礎(chǔ)上進一步的封裝,有了一個叫做solr的高性能分布式檢索服務(wù)框架,但是,solr有一個致命的缺點就是:在建立索引期間,solr的搜索能力會極度下降,這就在一定程度上造成了solr在實時索引上效率并不高;
最后,出現(xiàn)了一個叫做elasticsearch的框架,同樣是以lucene為基礎(chǔ),并且吸收了前兩代的教訓而開發(fā)出的分布式多用戶能力的全文搜索引擎,elasticsearch是基于RESTful web接口進行發(fā)布的,那么這就意味著,我們開發(fā)人員操作起來更方便快捷;同時es拓展節(jié)點方便,可用于存儲和檢索海量數(shù)據(jù),接近實時搜索能力,自動發(fā)現(xiàn)節(jié)點、副本機制保障可用性
2、非結(jié)構(gòu)化數(shù)據(jù)查找方法
1:順序掃描法(Serial Scanning)?
所謂順序掃描,比如要找內(nèi)容包含某一個字符串的文件,就是一個文檔一個文檔的看,對于每一個文檔,從頭看到尾,如果此文檔包含此字符串,則此文檔為我們要找的文件,接著看下一個文件,直到掃描完所有的文件。如利用windows的搜索也可以搜索文件內(nèi)容,只是相當?shù)穆?/p>
2:全文檢索(Full-text Search)?
將非結(jié)構(gòu)化數(shù)據(jù)中的一部分信息提取出來,重新組織,使其變得有一定結(jié)構(gòu),然后對此有一定結(jié)構(gòu)的數(shù)據(jù)進行搜索,從而達到搜索相對較快的目的。這部分從非結(jié)構(gòu)化數(shù)據(jù)中提取出的然后重新組織的信息,我們稱之索引。?
例如:字典。字典的拼音表和部首檢字表就相當于字典的索引,對每一個字的解釋是非結(jié)構(gòu)化的,如果字典沒有音節(jié)表和部首檢字表,在茫茫辭海中找一個字只能順序掃描。然而字的某些信息可以提取出來進行結(jié)構(gòu)化處理,比如讀音,就比較結(jié)構(gòu)化,分聲母和韻母,分別只有幾種可以一一列舉,于是將讀音拿出來按一定的順序排列,每一項讀音都指向此字的詳細解釋的頁數(shù)。我們搜索時按結(jié)構(gòu)化的拼音搜到讀音,然后按其指向的頁數(shù),便可找到我們的非結(jié)構(gòu)化數(shù)據(jù)——也即對字的解釋。?
這種先建立索引,再對索引進行搜索的過程就叫全文檢索(Full-text Search)。?
雖然創(chuàng)建索引的過程也是非常耗時的,但是索引一旦創(chuàng)建就可以多次使用,全文檢索主要處理的是查詢,所以耗時間創(chuàng)建索引是值得的。
3、如何實現(xiàn)全文檢索
可以使用Lucene實現(xiàn)全文檢索。Lucene是apache下的一個開放源代碼的全文檢索引擎工具包(提供了Jar包,實現(xiàn)全文檢索的類庫)。它提供了完整的查詢引擎和索引引擎,部分文本分析引擎。Lucene的目的是為軟件開發(fā)人員提供一個簡單易用的工具包,以方便地在目標系統(tǒng)中實現(xiàn)全文檢索的功能。?
注意:Lucene只是一個引擎,只是一個工具包,如果使用Lucene開發(fā)全文檢索功能,要記住Lucene是不能單獨運行的。
4、lucene實現(xiàn)全文檢索流程
1. 綠色表示索引過程,對要搜索的原始內(nèi)容進行索引構(gòu)建一個索引庫,索引過程包括:確定原始內(nèi)容即要搜索的內(nèi)容→采集文檔→創(chuàng)建文檔→分析文檔→索引文檔。?
2. 紅色表示搜索過程,從索引庫中搜索內(nèi)容,搜索過程包括:用戶通過搜索界面→創(chuàng)建查詢→執(zhí)行搜索,從索引庫搜索→渲染搜索結(jié)果。
從上面了解到的知識點也可看出,索引和搜索流程圖也可表示為:
?
總結(jié):全文檢索過程分為索引、搜索兩個過程:
- 索引?
- 從關(guān)系數(shù)據(jù)庫中、互聯(lián)網(wǎng)上、文件系統(tǒng)采集源數(shù)據(jù)(要搜索的目標信息),源數(shù)據(jù)的來源是很廣泛的。
- 將源數(shù)據(jù)采集到一個統(tǒng)一的地方,要創(chuàng)建索引,將索引創(chuàng)建到一個索引庫(文件系統(tǒng))中,從源數(shù)據(jù)庫中提取關(guān)鍵信息,從關(guān)鍵信息中抽取一個一個詞,詞和源數(shù)據(jù)是有關(guān)聯(lián)的。也即創(chuàng)建索引時,詞和源數(shù)據(jù)有關(guān)聯(lián),索引庫中記錄了這個關(guān)聯(lián),如果找到了詞就說明找到了源數(shù)據(jù)(http的網(wǎng)頁、pdf電子書等……)。
- 搜索?
- 用戶執(zhí)行搜索(全文檢索)編寫查詢關(guān)鍵字。
- 從索引庫中搜索索引,根據(jù)查詢關(guān)鍵字搜索索引庫中的一個一個詞。
- 展示搜索的結(jié)果。
5、全文檢索框架介紹
市面上全文檢索的框架很多,較早期的一個框架就是lucene,基本上所有的全文檢索的工作都交給lucene來實現(xiàn),但是lucene最大的弊端就是API太原生,沒有經(jīng)過任何封裝,不太好使用。所以后來出現(xiàn)一個叫做solr的框架,它也是基于lucene進行改造封裝和包裝,將服務(wù)端單獨提取出來,客戶端進行請求即可。
另外一個框架就是大名鼎鼎的elasticsearch了,es也是一個基于lucene打造的全文檢索的框架,且一經(jīng)推出就迅速被市場認可,市場占有率越來越多,現(xiàn)在首選的全文檢索的框架基本就是ES了
3、ELK日志協(xié)議棧
1、ELK協(xié)議棧基本介紹
1、集中式日志系統(tǒng)
日志,對于任何系統(tǒng)來說都是及其重要的組成部分。在計算機系統(tǒng)里面,更是如此。但是由于現(xiàn)在的計算機系統(tǒng)大多比較復(fù)雜,很多系統(tǒng)都不是在一個地方,甚至都是跨國界的;即使是在一個地方的系統(tǒng),也有不同的來源,比如,操作系統(tǒng),應(yīng)用服務(wù),業(yè)務(wù)邏輯等等。他們都在不停產(chǎn)生各種各樣的日志數(shù)據(jù)。根據(jù)不完全統(tǒng)計,我們?nèi)蛎刻齑蠹s要產(chǎn)生 2EB的數(shù)據(jù)。
面對如此海量的數(shù)據(jù),又是分布在各個不同地方,如果我們需要去查找一些重要的信息,難道還是使用傳統(tǒng)的方法,去登陸到一臺臺機器上查看?看來傳統(tǒng)的工具和方法已經(jīng)顯得非常笨拙和低效了。于是,一些聰明人就提出了建立一套集中式的方法,把不同來源的數(shù)據(jù)集中整合到一個地方。
一個完整的集中式日志系統(tǒng),是離不開以下幾個主要特點的。
- 收集-能夠采集多種來源的日志數(shù)據(jù)
- 傳輸-能夠穩(wěn)定的把日志數(shù)據(jù)傳輸?shù)街醒胂到y(tǒng)
- 存儲-如何存儲日志數(shù)據(jù)
- 分析-可以支持 UI 分析
- 警告-能夠提供錯誤報告,監(jiān)控機制
2、ELK 協(xié)議棧介紹及體系結(jié)構(gòu)
ELK 其實并不是一款軟件,而是一整套解決方案,是三個軟件產(chǎn)品的首字母縮寫,Elasticsearch,Logstash 和 Kibana。這三款軟件都是開源軟件,通常是配合使用,而且又先后歸于 Elastic.co 公司名下,故被簡稱為 ELK 協(xié)議棧。
- Elasticsearch
-
- 實時分析
- 分布式實時文件存儲,并將每一個字段都編入索引
- 文檔導(dǎo)向,所有的對象全部是文檔
- 高可用性,易擴展,支持集群(Cluster)、分片和復(fù)制(Shards 和 Replicas)。
- 接口友好,支持 JSON
- Logstash
-
- 幾乎可以訪問任何數(shù)據(jù)
- 可以和多種外部應(yīng)用結(jié)合
- 支持彈性擴展
-
- Shipper-發(fā)送日志數(shù)據(jù)
- Broker-收集數(shù)據(jù),缺省內(nèi)置 Redis
- Indexer-數(shù)據(jù)寫入
- Kibana
?3、Elk整體架構(gòu)
?
4、參考文檔
ELK官網(wǎng):https://www.elastic.co/
ELK官網(wǎng)文檔:https://www.elastic.co/guide/index.html
ELK中文手冊:https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html
ELK中文社區(qū):https://elasticsearch.cn/
4、Elasticsearch介紹
1、什么是ElasticSearch
Elaticsearch,簡稱為es, es是一個開源的高擴展的分布式全文檢索引擎,它可以近乎實時的存儲、檢索數(shù)據(jù);本身擴展性很好,可以擴展到上百臺服務(wù)器,處理PB級別的數(shù)據(jù)。es也使用Java開發(fā)并使用Lucene作為其核心來實現(xiàn)所有索引和搜索的功能,但是它的目的是通過簡單的RESTful API來隱藏Lucene的復(fù)雜性,從而讓全文搜索變得簡單。
2、ElasticSearch使用案例
- 2013年初,GitHub拋棄了Solr,采取ElasticSearch 來做PB級的搜索。 “GitHub使用ElasticSearch搜索20TB的數(shù)據(jù),包括13億文件和1300億行代碼”
- 維基百科:啟動以elasticsearch為基礎(chǔ)的核心搜索架構(gòu)
- SoundCloud:“SoundCloud使用ElasticSearch為1.8億用戶提供即時而精準的音樂搜索服務(wù)”
- 百度:百度目前廣泛使用ElasticSearch作為文本數(shù)據(jù)分析,采集百度所有服務(wù)器上的各類指標數(shù)據(jù)及用戶自定義數(shù)據(jù),通過對各種數(shù)據(jù)進行多維分析展示,輔助定位分析實例異常或業(yè)務(wù)層面異常。目前覆蓋百度內(nèi)部20多個業(yè)務(wù)線(包括casio、云分析、網(wǎng)盟、預(yù)測、文庫、直達號、錢包、風控等),單集群最大100臺機器,200個ES節(jié)點,每天導(dǎo)入30TB+數(shù)據(jù)
- 新浪使用ES 分析處理32億條實時日志
- 阿里使用ES 構(gòu)建挖掘自己的日志采集和分析體系
3、ElasticSearch對比Solr
- Solr 利用 Zookeeper 進行分布式管理,而 Elasticsearch 自身帶有分布式協(xié)調(diào)管理功能;
- Solr 支持更多格式的數(shù)據(jù),而 Elasticsearch 僅支持json文件格式;
- Solr 官方提供的功能更多,而 Elasticsearch 本身更注重于核心功能,高級功能多由第三方插件提供;
- Solr 在傳統(tǒng)的搜索應(yīng)用中表現(xiàn)好于 Elasticsearch,但在處理實時搜索應(yīng)用時效率明顯低于 Elasticsearch
4、ElasticSearch架構(gòu)圖以及基本概念(術(shù)語)
1、es概述
Elasticsearch是面向文檔(document oriented)的,這意味著它可以存儲整個對象或文檔(document)。然而它不僅僅是存儲,還會索引(index)每個文檔的內(nèi)容使之可以被搜索。在Elasticsearch中,你可以對文檔(而非成行成列的數(shù)據(jù))進行索引、搜索、排序、過濾。
Elasticsearch比傳統(tǒng)關(guān)系型數(shù)據(jù)庫如下:
Relational DB -> Databases -> Tables -> Rows -> Columns
Elasticsearch -> Indices?? -> Types? -> Documents -> Fields
2、ES架構(gòu)模塊
?
Gateway是ES用來存儲索引的文件系統(tǒng),支持多種類型。
Gateway的上層是一個分布式的lucene框架。
Lucene之上是ES的模塊,包括:索引模塊、搜索模塊、映射解析模塊等
ES模塊之上是 Discovery、Scripting和第三方插件。
Discovery是ES的節(jié)點發(fā)現(xiàn)模塊,不同機器上的ES節(jié)點要組成集群需要進行消息通信,集群內(nèi)部需要選舉master節(jié)點,這些工作都是由Discovery模塊完成。支持多種發(fā)現(xiàn)機制,如 Zen 、EC2、gce、Azure。
Scripting用來支持在查詢語句中插入javascript、python等腳本語言,scripting模塊負責解析這些腳本,使用腳本語句性能稍低。ES也支持多種第三方插件。
再上層是ES的傳輸模塊和JMX.傳輸模塊支持多種傳輸協(xié)議,如 Thrift、memecached、http,默認使用http。JMX是java的管理框架,用來管理ES應(yīng)用。
最上層是ES提供給用戶的接口,可以通過RESTful接口和ES集群進行交互。
3、Elasticsearch核心概念
1、索引 index
一個索引就是一個擁有幾分相似特征的文檔的集合。比如說,你可以有一個客戶數(shù)據(jù)的索引,另一個產(chǎn)品目錄的索引,還有一個訂單數(shù)據(jù)的索引。一個索引由一個名字來標識(必須全部是小寫字母的),并且當我們要對對應(yīng)于這個索引中的文檔進行索引、搜索、更新和刪除的時候,都要使用到這個名字。在一個集群中,可以定義任意多的索引。
2、類型 type
在一個索引中,你可以定義一種或多種類型。一個類型是你的索引的一個邏輯上的分類/分區(qū),其語義完全由你來定。通常,會為具有一組共同字段的文檔定義一個類型。比如說,我們假設(shè)你運營一個博客平臺并且將你所有的數(shù)據(jù)存儲到一個索引中。在這個索引中,你可以為用戶數(shù)據(jù)定義一個類型,為博客數(shù)據(jù)定義另一個類型,當然,也可以為評論數(shù)據(jù)定義另一個類型。
3、字段Field
相當于是數(shù)據(jù)表的字段,對文檔數(shù)據(jù)根據(jù)不同屬性進行的分類標識
4、映射 mapping
mapping是處理數(shù)據(jù)的方式和規(guī)則方面做一些限制,如某個字段的數(shù)據(jù)類型、默認值、分析器、是否被索引等等,這些都是映射里面可以設(shè)置的,其它就是處理es里面數(shù)據(jù)的一些使用規(guī)則設(shè)置也叫做映射,按著最優(yōu)規(guī)則處理數(shù)據(jù)對性能提高很大,因此才需要建立映射,并且需要思考如何建立映射才能對性能更好。
5、文檔 document
一個文檔是一個可被索引的基礎(chǔ)信息單元。比如,你可以擁有某一個客戶的文檔,某一個產(chǎn)品的一個文檔,當然,也可以擁有某個訂單的一個文檔。文檔以JSON(Javascript Object Notation)格式來表示,而JSON是一個到處存在的互聯(lián)網(wǎng)數(shù)據(jù)交互格式。
在一個index/type里面,你可以存儲任意多的文檔。注意,盡管一個文檔,物理上存在于一個索引之中,文檔必須被索引/賦予一個索引的type。
6、集群 cluster
一個集群就是由一個或多個節(jié)點組織在一起,它們共同持有整個的數(shù)據(jù),并一起提供索引和搜索功能。一個集群由一個唯一的名字標識,這個名字默認就是“elasticsearch”。這個名字是重要的,因為一個節(jié)點只能通過指定某個集群的名字,來加入這個集群
7、節(jié)點 node
一個節(jié)點是集群中的一個服務(wù)器,作為集群的一部分,它存儲數(shù)據(jù),參與集群的索引和搜索功能。和集群類似,一個節(jié)點也是由一個名字來標識的,默認情況下,這個名字是一個隨機的漫威漫畫角色的名字,這個名字會在啟動的時候賦予節(jié)點。這個名字對于管理工作來說挺重要的,因為在這個管理過程中,你會去確定網(wǎng)絡(luò)中的哪些服務(wù)器對應(yīng)于Elasticsearch集群中的哪些節(jié)點。
一個節(jié)點可以通過配置集群名稱的方式來加入一個指定的集群。默認情況下,每個節(jié)點都會被安排加入到一個叫做“elasticsearch”的集群中,這意味著,如果你在你的網(wǎng)絡(luò)中啟動了若干個節(jié)點,并假定它們能夠相互發(fā)現(xiàn)彼此,它們將會自動地形成并加入到一個叫做“elasticsearch”的集群中。
在一個集群里,只要你想,可以擁有任意多個節(jié)點。而且,如果當前你的網(wǎng)絡(luò)中沒有運行任何Elasticsearch節(jié)點,這時啟動一個節(jié)點,會默認創(chuàng)建并加入一個叫做“elasticsearch”的集群。
8、分片和復(fù)制 shards&replicas
一個索引可以存儲超出單個結(jié)點硬件限制的大量數(shù)據(jù)。比如,一個具有10億文檔的索引占據(jù)1TB的磁盤空間,而任一節(jié)點都沒有這樣大的磁盤空間;或者單個節(jié)點處理搜索請求,響應(yīng)太慢。為了解決這個問題,Elasticsearch提供了將索引劃分成多份的能力,這些份就叫做分片。當你創(chuàng)建一個索引的時候,你可以指定你想要的分片的數(shù)量。每個分片本身也是一個功能完善并且獨立的“索引”,這個“索引”可以被放置到集群中的任何節(jié)點上。分片很重要,主要有兩方面的原因:? 1)允許你水平分割/擴展你的內(nèi)容容量。? 2)允許你在分片(潛在地,位于多個節(jié)點上)之上進行分布式的、并行的操作,進而提高性能/吞吐量。
至于一個分片怎樣分布,它的文檔怎樣聚合回搜索請求,是完全由Elasticsearch管理的,對于作為用戶的你來說,這些都是透明的。
在一個網(wǎng)絡(luò)/云的環(huán)境里,失敗隨時都可能發(fā)生,在某個分片/節(jié)點不知怎么的就處于離線狀態(tài),或者由于任何原因消失了,這種情況下,有一個故障轉(zhuǎn)移機制是非常有用并且是強烈推薦的。為此目的,Elasticsearch允許你創(chuàng)建分片的一份或多份拷貝,這些拷貝叫做復(fù)制分片,或者直接叫復(fù)制。
復(fù)制之所以重要,有兩個主要原因: 在分片/節(jié)點失敗的情況下,提供了高可用性。因為這個原因,注意到復(fù)制分片從不與原/主要(original/primary)分片置于同一節(jié)點上是非常重要的。擴展你的搜索量/吞吐量,因為搜索可以在所有的復(fù)制上并行運行。總之,每個索引可以被分成多個分片。一個索引也可以被復(fù)制0次(意思是沒有復(fù)制)或多次。一旦復(fù)制了,每個索引就有了主分片(作為復(fù)制源的原來的分片)和復(fù)制分片(主分片的拷貝)之別。分片和復(fù)制的數(shù)量可以在索引創(chuàng)建的時候指定。在索引創(chuàng)建之后,你可以在任何時候動態(tài)地改變復(fù)制的數(shù)量,但是你事后不能改變分片的數(shù)量。
默認情況下,Elasticsearch中的每個索引被分片5個主分片和1個復(fù)制,這意味著,如果你的集群中至少有兩個節(jié)點,你的索引將會有5個主分片和另外5個復(fù)制分片(1個完全拷貝),這樣的話每個索引總共就有10個分片。
總結(jié)
以上是生活随笔為你收集整理的Day82_ELK(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt纯代码实现菜单栏、工具栏、状态栏
- 下一篇: html 状态栏显示,网页屏蔽状态栏 打