《Learning ELK Stack》5 為什麼需要Elasticsearch

yeedomliu發表於2020-07-30

為什麼是Elasticsearch

  • es是一種在分散式環境中快速、可擴充套件的搜尋和分析引擎。它建立在Apache Lucene上。Lucene定義如下

Apache Lucene是一種高效能、全功能的完全用java寫的廣西搜尋引擎庫。它是一種幾乎適合於任何需要全文搜尋,特別是跨平臺的應用程式的技術

  • Elasticseaarch通過提供強大的RESTful API隱藏了Lucene背後的複雜性,使得查詢索引資料更容易,並使其適用於任何程式語言。Elasticsearch可以基於PB級別的結構化或者非結構化資料建立跨多臺伺服器的分散式實時分析,這大大擴充套件了Lucene的能力

Elasticsearch的基本概念

索引

  • 索引是具備某些共同特徵的文件集
  • 每一個索引包含多個型別,每個型別相應的包含多個文件,每個文件又包含多個欄位。在es中,一個索引包含多個JSON格式的文件。在es叢集中的數量可以是任意的
  • ELK中,將LogstashJSON文件傳送到es時,它們被儲存為預設的索引模式”logstash-%{+YYYY.MM.dd}”
  • 搜尋和查詢索引的URL看起來如下

http://localhost:9200/[索引]/[型別]/[操作]

文件

  • es中的文件是指儲存在索引裡的JSON格式的文件。每一個文件都有一個型別和相應的唯一標識(ID)。例如,儲存在es的文件看起來如下

image-20200627211728180

欄位

  • 欄位是文件內的基本單,基本欄位是如下鍵值對

book_name : “learning elk”

型別

  • 用於提供索引中的邏輯分割槽。它基本上代表一類類似的文件型別。一個索引可以有多個型別,可以根據上下文來定義它們。如,Facebook的索引中可以使用post作為一種索引型別,使用comments作為另一種索引型別

對映

  • 用來對映文件的每個欄位,以及欄位對應的資料型別,如stringintegerfloatdouble

分片

  • 儲存索引的實際物理實體。每個索引可以有多個儲存資料的主分片和副本分片。分片分佈在叢集的所有節點之間,並且在有節點失效或新節點加入時,可以從一個節點移動到另一節點

主分片和副本分片

  • 索引檔案先儲存在主分片中,然後再儲存到相應的副本分片中。預設情況下,每個索引的主分片數量是5,當然我們也可以根據需要自行配置
  • 副本分片通常與主分片駐留在不同的節點上,以便於滿足多個請求情況下的故障轉移和負載均衡

叢集

  • 儲存索引資料的節點集合。將資料儲存在叢集中來提供水平擴充套件能力。每個叢集都有一個叢集名稱來表示,以便不同的節點辨識連線。叢集名稱在elasticsearch.yml配置檔案中名為cluster.name的屬性配置,預設為Elasticsearch: cluster.name: elasticsearch

節點

  • 是一個單一的Elasticsearch執行例項,屬於某個叢集。節點可以扮演三種角色

資料節點:用於索引文件,以及對這些文件執行搜尋操作。如果要提升效能或者擴充套件叢集,通常建議新增更多的資料節點。在elasticsearch.yml配置檔案設定節點屬性就可以將節點變成資料節點

node.master = false
node.data = true

主節點:負責叢集的管理。對於大叢集,建議有三個專用的主節點(一主兩備),它們只作為主節點,不儲存索引或執行搜尋。配置如下

node.master = true
node.data = false

路由節點或負載均衡節點:既不作為主節點也不擔當資料節點角色。只用於負載均衡,或路由搜尋請求,又或將文件索引到適當的節點。這對於高負荷的搜尋或索引操作非常有用

node.master = false
node.data = false

探索Elasticsearch API

  • 查詢叢集API常見語法
curl -X<VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>/<OPERATION_NAME>?<QUERY_STRING>' -d '<BODY>'

VERB:請求方法型別,包括GET/POST/PUT/DELETE/HEAD

PROTOCOL:協議型別,http/https

HOST:叢集中主機名

PORT:es例項執行的埠,預設是9200

PATH:索引名、型別和要查詢的文件ID,例如:/index/type/id

OPERATION_NAME:執行操作的名稱,例如:_search,_count等

QUERY_STRING:查詢引數中指定可選引數。如?pretty用於完美輸出json文件

BODY:用於請求正文文字

curl -XGET 'http://localhost:9200/logstash-2020.08.08/_search?pretty'

列出所有可用索引

  • 顯示儲存在叢集的節點所有索引、索引相關資訊,如健康值 、索引名稱、大小、文件的數量、主分片的數量等等
curl -XGET 'localhost:9200/_cat/indices?v'

列出叢集中的所有節點

curl -XGET 'http://localhost:9200/_cat/nodes?v'

檢查叢集的健康狀態

curl -XGET 'http://localhost:9200/_cluster/health?pretty'
  • 從叢集層面、分片層面,或者索引層面來檢查健康狀態,使用類似如下的URL即可
curl -XGET 'http://localhost:9200/_cluster/health?level=cluster&pretty=true'
curl -XGET 'http://localhost:9200/_cluster/health?level=shareds&pretty=true'
curl -XGET 'http://localhost:9200/_cluster/health?level=indices&pretty=true'

叢集的健康狀態由三個參數列示

  1. 紅色:部分或全部的主分片尚未準備好提供服務
  2. 黃色:所有的主分片已成功分配,但部分或全部的分片尚未分配。一般情況下,單節點叢集始終是黃色的健康狀態,因為沒有副本分片節點
  3. 綠色:所有的主分片和副本分片分配成功,並且叢集正常動作

建立索引

  • ELK中,索引是根據在Logstashes輸出外掛中提供的索引名稱自動建立的。儘管如此,還是來看一下如何手工建立索引
curl -XPUT 'http://localhost:9200/<index_name>?pretty'
  • 假如要建立一個名為packtpub的索引,可以執行以下命令
curl -XPUT 'http://localhost:9200/packtpub?pretty'
  • 還可以在往索引內寫入文件的同時,直接建立索引
curl -XPUT 'http://localhost:9200/packtpub/elk/1?pretty' -d '
{
book_name : "learning elk"
}'
  • 執行命令後的返回結果如下
{
  "_index" : "packtpub",
  "_type" : "elk",
  "_id" : "1",
  "_version" : 1,
  "created" : true
}

檢索文件

curl -XGET 'http://localhost:9200/packtpub/elk/1?pretty'
  • 執行以上命令後的返回結果如下
{
  "_index" : "packtpub",
  "_type" : "elk",
  "_id" : "1",
  "_version" : 1,
  "found" : true,
  "_source" : {
    book_name : "learning elk"
  }
}
  • _source欄位包含了完整的文件

刪除文件

curl -XDELETE 'http://localhost:9200/packtpub/elk/1?pretty'
  • 返回如下
{
  "acknowledged" : true
}

Elasticsearch Query DSL

  • es查詢語句的強大之處在於,其是一個基於json的領域特定語言,稱為Query DSLKibana為了得到特定格式的結果,廣泛使用了Query DSL
curl -XPOST 'http://localhost:9200/logstash-*/_search' -d '
{
    "query" : { "match_all" : {} },
    "size" : 3
}'
  • 如果按照某個欄位進行排序的話,可以如下處理
curl -XPOST 'http://localhost:9200/logstash-*/_search' -d '
{
    "query" : { "match_all" : {} },
    "sort" : { "open" : { "order" : "desc" } },
    "size" : 3
}'

更詳細的Query DSL相關資料請參考官方文件

www.elastic.co/guide/en/elasticsea...

www.elastic.co/guide/en/elasticsea...


Elasticsearch外掛

Bigdesk外掛

  • 藉助於實時圖表和JVMCPUOS、主分片以及副本分片相關的各種統計資訊,有助於分析叢集節點資訊

github.com/lukas-vlcek/bigdesk

image-20200627225728634

Elastic-Hammer外掛

  • 可作為es的前端介面。可用於查詢叢集,並在輸入查詢語句時提供語法檢查

github.com/andrewvc/elastic-hammer

Head外掛

  • 能夠生成叢集的統計資料,並提供瀏覽器查詢,同時還能對es索引進行結構化查詢

github.com/mobz/elasticsearch-head

image-20200627225910998

檢視所有外掛:www.elastic.co/guide/en/elasticsea...

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章