1. 程式人生 > >ELK-初識Elasticsearch

ELK-初識Elasticsearch

下載 inside 當我 get 需要 集群 簡單 黃色 align

第一篇:初識Elasticsearch 1.安裝
Elasticsearch 要求 java8+的環境,推薦使用 Oracle 1.8.0_131版本的JDK。Java JDK的安裝此處不做介紹。這裏我們使用的5.4.2版本的Elasticsearch。 從elastic網站www.elastic.co/downloads下載,網站上有對於任何一個版本你都可以選擇.zip或.tar的壓縮文件,DEB或RPM格式的安裝包。簡單辦法是使用tar文件。將tar文件解壓到指定文件夾,在文件夾下執行下面命令啟動Elasticsearch: cd elasticsearch-5.4.2/bin ./elasticsearch
如果看到以下格式的信息說明啟動成功了: 技術分享 我們可以在命令行啟動Elasticsearch時修改集群和節點的名稱: ./elasticsearch -Ecluster.name=my_cluster_name -Enode.name=my_node_name 默認情況下Elasticsearch使用9200端口對外提供REST API服務,必要情況下愛可以修改該端口號。 現在我們已經啟動一個Elasticsearch節點(集群),下一步就是理解怎麽和它通訊。Elasticsearch提供一個非常全面而且強大的REST API,你可以使用API和你的集群交互。通過API可以完成以下工作:
  • 檢查集群、節點和索引健康狀態、統計信息。
  • 管理你的集群、節點和索引數據及元數據。
  • 對索引執行CRUD(創建、讀取、更新和刪除)和搜索操作。
  • 執行高級搜索操作(例如分頁、排序、過濾、腳本處理、聚合等等)。
2.集群健康
如果我們想對集群進行一個基礎的健康檢查,查看集群正在幹什麽,我們可以curl查看(你可以使用任何一個可以發起HTTP/REST請求的工具)。假定我們一直在相同的節點上穹頂Elasticsearch,並且打開了另一個命令行窗口。 檢查集群健康狀態,我們使用_cat API。你可以在Kibana的console頁面運行以下命令: GET /_cat/health?v 響應結果如圖右側: 技術分享 我們可以看到名為elasticsearch的集群已經啟動並且但是狀態為yellow(正常狀態為green,這裏因為本地只搭建了單節點環境,數據沒有副本)。 我們請求集群健康信息時,會獲取green、yellow、或red三者中的一種狀態。Green表示一切正常(集群功能完全正常),Yellow表示所有的數據都是可用的但是一些副本沒有分配(集群功能完全正常),Red表示一些數據因為某種原因無法正常使用。註意,即使集群的狀態為Red,它的部分功能還是可以使用的(i.e. 它會從可得到的資源中繼續提供搜索請求),但是你應該在數據損失之前你盡快修復問題。 從上面的響應結果中,我們還可以看到集群中一共只有1個節點,具有1個碎片。這是因為我們還沒有存放數據。,註意,我們使用的是默認的系群名稱(elasticsearch),並且Elasticsearch使用的是單播網絡,所以如果在一臺機器上啟動多個節點是可以被發現的,這樣的話你就可以在上面的響應信息中看到更多的節點。 我們還可以使用下面的請求獲取節點列表: GET /_cat/nodes?v 技術分享
這裏我們可以看到我們一個節點名為“J7JVnD6”,這是我們集群中唯一的一個節點。 3.列出所有索引
現在我們來看一眼我們的索引: 執行 GET /_cat/indices?v 響應如下: 技術分享 從響應結果可以看到我們有一個名為.kiban的索引,大小為3.1kb,這是因為我們這裏使用的kibana,自動創建了一個索引。 4.創建一個索引
現在我們創建一個名為“customer”的索引,然後再次列出所有索引: PUT /customer?pretty GET /_cat/indices?v 技術分享 可以看到執行創建索引請求時,響應返回了一個json格式的數據。 技術分享 再次列出所有索引時多了一個名為“customer”的索引,並且其有5個碎片和1個副本(默認),包含0個文件。 你可能也看到“customer”索引的狀態也是Yellow狀態,回想一下之前的討論,黃色意味著一些副本還沒有分配。這個索引發生的原因是由於Elasticsearch默認創建了這個索引的一個副本。因為我們現在只有一個節點在運行,因此無法分配一個副本(用於高可用性),直到另一個節點連接到集群的時候。一旦該副本被分配到第二個節點上,該索引的健康狀態將變為綠色。 5.查詢一個文檔
我們現在put一些數據到customer索引中,請記住,為了索引文檔,必須告訴Elasticsearch數據在該索引中的類型: 我們來索引一個簡單類型為"external",ID為1的customer文件到customer索引中去;格式如下: PUT /customer/external/1?pretty { "name": "John Doe" } 技術分享 從上面的響應結果可以看到一個新的customer文件被成功的創建到customer索引中,並且類型為external。這個文件還有一個創建時指定的內部ID為1。 Elasticsearch不要求在索引文件之前顯示的創建一個索引,在上面的例子中如果customer索引不存在的話Elasticsearch會自動創建customer索引。下面我們來檢索一下剛才索引的文件: GET /customer/external/1?pretty 技術分享 從上面的響應結果可以看到一個found字段,該字段為true表示我們找到了找到了索引為customer,類型為external,ID為1的文件。_source字段則返回了完整的我們之前索引的JSON文件。如果我們檢索一個不存在的文件,例如檢索一個ID為2的文件: GET /customer/external/2?pretty 會得到如下的響應 技術分享 6.刪除一個索引
現在我們刪除剛才我們創建的索引,然後再列出所有索引: DELETE /customer?pretty GET /_cat/indices?v 技術分享 技術分享 可以看到customer索引已經被成功刪除了。 7.修改數據
Elasticsearch提供準實時的數據處理和搜索功能。默認情況下,你可以在你的對你的數據執行索引、更新、刪除操作之後的一個兩個延遲(刷新間隔)之後查到預期的搜索結果。這是跟其他平臺最大的不同之處,想SQL查詢之類的系統在一個事務完成之後立刻就得得到想要的結果。 8.索引/替換 文檔
我們前面看到了如何索引一個簡單的文檔,現在來回顧一下這段命令; PUT /customer/external/1?pretty { "name": "John Doe" } 同樣的上面腳本會將文檔索引到customer索引中取,類型為external,ID為1,如果我們再用一個不同的文檔執行上面的腳本,Elasticsearch會用著個新文檔替換已存在ID為1的文檔: PUT /customer/external/1?pretty { "name": "Jane Doe" } 上面將ID為1的文檔從“John Doe” 改為“Jane Doe”.如果我們用一個不同的ID,將會索引一個新文檔,並且已經在索引中保存的現有文檔保持不變。 PUT /customer/external/2?pretty { "name": "Jane Doe" } 上面索引了一個ID為2的新文檔。 索引時,ID部分是可選的,如果不指定,Elasticsearch會生成一個隨機的ID來索引該文檔。這個Elasticsearch生成的實際ID(或前邊例子中我們指定的ID)會作為索引API回調的一部分返回。 下面的例子中展示如何不指明ID來索引文件: POST /customer/external?pretty { "name": "Jane Doe" } 註意:這個例子中,我們使用的是POST動作還不是PUT,因為我們沒有指定一個ID。 9.更新文檔
除了能索引和替換文檔之外,我們還能更新文檔,註意,實際上Elasticsearch並沒有引擎下做就地更新。當我們做一個更新操作時,Elasticsearch刪除就文檔然後一個快照中索引新文檔。 下面的例子展示如何更新我們之前的文檔(ID為1),將name字段改為“Jane Doe”; POST /customer/external/1/_update?pretty { "doc": { "name": "Jane Doe" } } 下面的例子展示如何更新我們之前的文檔(ID為1),將name字段修改為"Jane Doe",同時添加age字段: POST /customer/external/1/_update?pretty { "doc": { "name": "Jane Doe", "age": 20 } } 還可以使用簡單的腳本來執行更新,下面的例子使用一個腳本吧Age增加5: POST /customer/external/1/_update?pretty { "script" : "ctx._source.age += 5" } 上面的例子中,ctx._source引用即將更新的源文檔。 註意,在撰寫本文時,Elasticsearch只支持同時更新一個文檔。在將來,Elasticsearch可能會實現通過一個查詢條件實現多文檔更新功能(就像SQL中UPDATE-WHERE語句一樣)。 10.刪除文檔
刪除一個文檔相對來說很簡單,下面的例子展示如何刪除之前customer索引中ID為2的文檔: DELETE /customer/external/2?pretty 通過查看API中的Delete一節,已刪除匹配特定查詢的所有文檔,值得註意的是,直接刪除整個索引比刪除索引下的所有文檔更簡單有效。 11.批處理
除了索引、更新和刪除刪除單個文檔之外,Elasticsearch還提供了使用_bulk API 批量執行上述操作的功能。這個功能非常重要,因為它提供了一種非常高效的機制來盡可能快地執行多個操作,盡可能少地進行網絡傳輸。 作為一個簡單的例子,下面的腳本可以在一個批量操作中索引兩個文檔(ID 1 - John Doe and ID 2 - Jane Doe): POST /customer/external/_bulk?pretty {"index":{"_id":"1"}} {"name": "John Doe" } {"index":{"_id":"2"}} {"name": "Jane Doe" } 下面的例子在一個批量操作中更新了第一個文檔然後刪除了第二個文檔: POST /customer/external/_bulk?pretty {"update":{"_id":"1"}} {"doc": { "name": "John Doe becomes Jane Doe" } } {"delete":{"_id":"2"}} 註意:上面的刪除動作中,因為刪除動作沒有相應的源文檔,只需要提供將刪除文檔的ID即可。 Bulk API 不會因為其中一個操作的失敗而失敗,不管任何原因導致一個操作失敗,都將繼續執行後面的操作。當Bulk API返回時,它會提供每一個動作的狀態(以同樣的順序送回來),這時你可以檢查每個動作是否失敗。

ELK-初識Elasticsearch