Elastic Search簡稱ES,是一款在搜索和日誌檢索領域極其成功的開源產品,當然ES背後的商業化公司也很成功。很多大的知名品牌,像是SAP、Booking、Ebay都在使用ES,
今天就來實際使用一下ES這款成功的商業化產品,並且介紹一下它的特點。
Elastic Search VS Luncence
說到搜索還是要提下Luncence,Luncence基本上可以稱爲搜索領域的鼻祖了,是很早期的索引構建庫。但是Luncence的主要問題有兩點,其一是隻支持Java類庫的調用方式,學習和使用門檻很高,其二是Luncence沒有線性擴展能力。搜索又是一個幾乎隨業務量線性擴張的功能,所以是否支持線性拓展資源很重要。
ES其實是對Luncence的庫的上層封裝,通過Restful的形式可以讓日誌的構建和檢索等功能更容易在多語言環境下調用,做到即使是開發小白也能快速上手。另外,ES支持線性拓展,使得使用ES的用戶不需要擔心資源協調的問題。
Elastic Search整體架構
接下來介紹下ES的各個模塊,從下向上介紹。
(1) Beat
Beat是一個輕量的數據採集器,Beat可以採集各種格式的數據,比如日誌文件、值班、網絡數據等,並且把這些數據傳輸到Logstash。
(2)Logstash
Logstash是一個服務端的數據管道,能夠從多個數據來源採集數據,完成數據轉換,然後將數據傳輸到Elastic Search。在Logstash中可以實現一些數據的過濾、轉碼等功能,比如把非結構化數據轉化成結構化數據,比如從IP地址破譯出地理座標。
(3)Elastic Search
Elastic Search主要做數據和索引的存儲以及相關查詢的計算。
(4)Kibana
Kibana主要是一個數據可視化界面,通過可視化的方式展示ES的計算和索引結果。
(5)X-Pack
X-Pack是ES內部插件,在老的ES版本是收費的,在新的版本中很多插件是被開源免費使用的。在X-Pack中可以直接使用機器學習、圖關係、安全相關的插件。
所以整體的流程如下,先通過Beat採集數據,然後數據通過管道寫到Logstash做一步處理,接着寫到Elastic Search,然後通過Kibana做數據的可視化展現。
具體操作體驗
接下來就具體體驗下ES的功能,當然是選擇通過Docker的模式run一下最快。可以參考:
https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html
可以選擇通過拉起單一Docker的模式體驗,也可以通過Docker Compose的方式體驗(Docker Compose比較適合構建一個分佈式ES集羣)。我兩個方案都試了試,Docker Compose一堆坑,官方案例都沒跑起來。
具體操作流程如下:
(1) 先Pull一個官方鏡像
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.10.2
(2) 接着拉起這個鏡像
docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.10.2
(3)這個時候ES的服務就已經跑起來了,Docker化的模式就是如此方便,服務的本地地址是localhost:9200。
(4)發送服務請求到localhost:9200,
curl -X GET "localhost:9200/_cat/nodes?v=true&pretty"
可以查到ES服務的節點的具體情況。
總結一下
ES基本上是目前業內在搜素和日誌檢索領域非常成熟的開源工具,ES有很多豐富的插件,比如Kibana、Logstash,而且ES對於容器化技術非常擁抱,可以快速的做部署。最後一點是ES的全部功能都可以通過一套標準的RestFul接口去調用,這個設計很方便用戶使用。