Elastic探祕:技術海洋裏遺落的珍珠

內容來源:2018 年 06 月 30 日,Elastic工程師與佈道師曾勇在“Elastic Meetup 南京交流會”進行的《Elastic探祕之遺落的珍珠》演講分享。IT 大咖說(微信id:itdakashuo)作爲獨家視頻合作方,經主辦方和講者審閱授權發佈。

閱讀字數:2250 | 5分鐘閱讀

摘要

Elastic Stack 功能越來越豐富了,有很多功能可能你只聽說過名字,有很多功能也許沒有機會嘗試過,其實你可能錯過了很多寶貝,所以讓我們來探究探究。本次分享主要介紹 Elastic Stack 技術棧裏面,一些可能看起來不太起眼但卻非常有意思的功能,定義爲非乾貨,儘量輕拍,不過相信對於剛接觸 Elastic 的同學來說,也會有所收穫。

獲取嘉賓演講視頻及PPT,掃一掃下方二維碼即可。

ElasticSearch裏的幾個不起眼的小功能

備註

在創建數據庫表的時候,我們可能會面臨爲表中的字段添加備註的需求,對於業務複雜環境下的開發者來說這通常非常有幫助。

一般開發人員會爲此編寫詳細的開發文檔,標註各個字段的用處,不過文檔的問題在於難以保持更新,很少有人查閱。

最好的方式是將備註和數據綁定在一起,恰好ES擁有這個功能,它通過Mate字段實現(如上圖)。Meta中所有的信息都能夠自定義,類似於元數據存儲倉庫,比如庫表信息、表中字段、字段備註、版本、創建者等。

排序

排序是查詢中比較常見的操作,一些限定範圍的操作也會依賴於它。一般排序的步驟是先查詢數據獲取到文檔,然後再使用特定字段進行排序。這種方式的性能開銷較大,文檔越多排序越慢。

理想的情況是在建索引的時候就排好序,這樣可以一次性獲取到結果,避免不必要的性能消耗。利用ES的Index Sorting能夠完美的實現這一效果,另外它還帶來了更好的壓縮比和更小的磁盤空間。

使用方法也很簡單,先指定排序字段,可以是一個或多個(上圖爲date),然後指定排序方式,倒序或正序,最後新建成的字段在創建索引的時候會依據它來排序。

Adaptive ReplicaSelection

在ES中請求發送到任意節點之後,若索引主分片不在請求所在節點,請求就會被轉發到主分片所在的服務器節點上,之後由主分片創建索引並寫入副本。相對寫入,查詢過程會簡單些,請求達到節點後,該節點會拿到副本集合,然後依次輪詢。

索引數據的大小和熱度會使得集羣中不同服務器IO壓力不一致,從而造成輪詢的時候,第一次訪問的可能是空閒的服務器,很快就有返回,而第二次可能是壓力大的服務器,較長時間後纔有返回。

從用戶體驗角度來說,這種效果是非常不理想的。所以ES推出了Adaptive Replica Selection功能,它會以服務器的響應時間和請求隊列作爲參考指標,智能的選擇副本進行查詢,儘可能的縮短請求響應時間。

Kibana裏面幾個值得留意的新功能

Kuery + Autocomplete

Kuery是數據分析搜索的可視化平臺kibana的新查詢語法,通過在輸入框中鍵入特定字段來檢索信息,可以說是相對原生的搜索方式,即沒有候選項也沒有模糊查詢。

Kibana新版中可以通過在options中打開新feature來啓動智能檢索功能,鍵入一部分字段後,搜索框下方馬上會列出補全後的候選字段,字段中的可能值也會被枚舉出來。雖說是個小功能,不過也大大提高了檢索效率。

Chained Input Control

Chained Input Control是一種鏈式查詢的功能,所有的索引數據都以控件的形式存放在一個列表中,用戶可以先從列表中選擇一個控件作爲要查詢的範圍,之後列表中的控件會更新爲上一個控件所限定的範圍內,範圍更新的同時頁面展示數據也會隨之更新。

比如要查詢某個城市的相關數據,就可以先選擇國家然後選中目標城市,之後所有數據都會同步更新。如果想要更詳細的數據,還可以進一步選擇控件。其實本質上這是通過前一個控件過濾下一個控件的值。

最後介紹一個小功能,大家都知道在智能化運維方面通過API來完成任務是非常有必要的,所以我們也提供了使用API創建Index Pattern的功能。

Logstash/Beats裏面幾個值得留意的新功能

Dissect Filter

Dissect filter可以應用於有一定規則的結構化數據上。比如將一個文本字段拆分成多個字段,通過逗號或空格進行切割。如上圖所示,使用逗號分割字段,大括號中是字段的名稱。

之所以不使用正則表達式,是因爲它規則過於複雜,CPU消耗非常高,而目前所用的方式僅通過符號就可以切分,能夠直觀的預測到所獲取的數據。不過該方式也存在限制,所有的數據都要遵循統一規則。

Munin

Munin不是Elastic,不過它出現的比較早,2002年的時候就誕生了,用的是PerL語言編寫的,可以運行在各個平臺上,跨平臺能力很強。

Munin主要用來監控服務器的性能指標,比如CPU性能、磁盤佔用、內存佔用等。由於有着非常久的歷史,所有插件非常豐富,基本上涵蓋了能找的所有平臺和應用。

剛好Elastic現在也在做監控和性能指標分析,我們就在想能不能直接接入Munin。最終的方案是通過beats將Munin拉入到Elastic裏進行分析,由beats彙總Munin上傳上來的數據,Elastic接收這些數據並交由Kibana分析,這樣Elastic就能應對各種不同的平臺。

Beats – Spoolingto Disk

如上圖所示是一個和beats相關的基於磁盤的隊列,可以理解爲磁盤的一個緩衝區。當用beats進行處理數據時,如果數據時高時低內存佔用就會比較高,而在基於磁盤的場景下得以避免這種問題。我們還可以用磁盤做一個緩衝區,讓數據先落地。

X-Pack不容錯過的免費功能

X-Pack雖然是我們的商業產品,但是有很多免費功能,這些都默認包含在下載版本中。如上圖所示,大部分功能都是開源的,但有一部分要PAID,另一部分是免費的。

Monitoring是其中的一個免費功能,主要用來監控K8S和ES的內部運行信息,包含從監控到收集再到可視化的一整套流程。

第二個是SQL相關的功能,我們現在可以用SQL的語法來構建查詢,目前來說還很簡單,只提供select 基本功能,不能完全的寫數據、修改數據。主要還是用於讓數據科學家和運維分析人員方便的查詢數據,畢竟他們對SQL語句更熟悉些。

Rolling up功能可以對數據進行上卷,按照指定的時間戳範圍對數據進行聚合得到新的結果,這樣數據量會少很多,很大程度上節省了磁盤空間,也比較適用於對歷史數據和經營數據的進行業務分析。

還一個功能是Grok Debugger,它是一個用來調試python的工具。很多場景會用到Grok,像日誌的每一行可能不一樣,就可以用Grok把它們做成一個事件。

以上爲全部分享內容,謝謝大家!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章