內容來源:2018 年 06 月 30 日,Elastic工程師與佈道師曾勇在「Elastic Meetup 南京交流會」進行的《Elastic探祕之遺落的珍珠》演講分享。IT 大咖說(微信id:itdakashuo)做爲獨家視頻合做方,經主辦方和講者審閱受權發佈。python
閱讀字數:2250 | 5分鐘閱讀正則表達式
獲取嘉賓演講視頻及PPT:suo.im/4E278t
數據庫
Elastic Stack 功能愈來愈豐富了,有不少功能可能你只據說過名字,有不少功能也許沒有機會嘗試過,其實你可能錯過了不少寶貝,因此讓咱們來探究探究。本次分享主要介紹 Elastic Stack 技術棧裏面,一些可能看起來不太起眼但卻很是有意思的功能,定義爲非乾貨,儘可能輕拍,不過相信對於剛接觸 Elastic 的同窗來講,也會有所收穫。服務器
在建立數據庫表的時候,咱們可能會面臨爲表中的字段添加備註的需求,對於業務複雜環境下的開發者來講這一般很是有幫助。微信
通常開發人員會爲此編寫詳細的開發文檔,標註各個字段的用處,不過文檔的問題在於難以保持更新,不多有人查閱。運維
最好的方式是將備註和數據綁定在一塊兒,剛好ES擁有這個功能,它經過Mate字段實現(如上圖)。Meta中全部的信息都可以自定義,相似於元數據存儲倉庫,好比庫表信息、表中字段、字段備註、版本、建立者等。工具
排序是查詢中比較常見的操做,一些限定範圍的操做也會依賴於它。通常排序的步驟是先查詢數據獲取到文檔,而後再使用特定字段進行排序。這種方式的性能開銷較大,文檔越多排序越慢。性能
理想的狀況是在建索引的時候就排好序,這樣能夠一次性獲取到結果,避免沒必要要的性能消耗。利用ES的Index Sorting可以完美的實現這一效果,另外它還帶來了更好的壓縮比和更小的磁盤空間。插件
使用方法也很簡單,先指定排序字段,能夠是一個或多個(上圖爲date),而後指定排序方式,倒序或正序,最後新建成的字段在建立索引的時候會依據它來排序。3d
在ES中請求發送到任意節點以後,若索引主分片不在請求所在節點,請求就會被轉發到主分片所在的服務器節點上,以後由主分片建立索引並寫入副本。相對寫入,查詢過程會簡單些,請求達到節點後,該節點會拿到副本集合,而後依次輪詢。
索引數據的大小和熱度會使得集羣中不一樣服務器IO壓力不一致,從而形成輪詢的時候,第一次訪問的多是空閒的服務器,很快就有返回,而第二次多是壓力大的服務器,較長時間後纔有返回。
從用戶體驗角度來講,這種效果是很是不理想的。因此ES推出了Adaptive Replica Selection功能,它會以服務器的響應時間和請求隊列做爲參考指標,智能的選擇副本進行查詢,儘量的縮短請求響應時間。
Kuery是數據分析搜索的可視化平臺kibana的新查詢語法,經過在輸入框中鍵入特定字段來檢索信息,能夠說是相對原生的搜索方式,即沒有候選項也沒有模糊查詢。
Kibana新版中能夠經過在options中打開新feature來啓動智能檢索功能,鍵入一部分字段後,搜索框下方立刻會列出補全後的候選字段,字段中的可能值也會被枚舉出來。雖然說是個小功能,不過也大大提升了檢索效率。
Chained Input Control是一種鏈式查詢的功能,全部的索引數據都以控件的形式存放在一個列表中,用戶能夠先從列表中選擇一個控件做爲要查詢的範圍,以後列表中的控件會更新爲上一個控件所限定的範圍內,範圍更新的同時頁面展現數據也會隨之更新。
好比要查詢某個城市的相關數據,就能夠先選擇國家而後選中目標城市,以後全部數據都會同步更新。若是想要更詳細的數據,還能夠進一步選擇控件。其實本質上這是經過前一個控件過濾下一個控件的值。
最後介紹一個小功能,你們都知道在智能化運維方面經過API來完成任務是很是有必要的,因此咱們也提供了使用API建立Index Pattern的功能。
Dissect filter能夠應用於有必定規則的結構化數據上。好比將一個文本字段拆分紅多個字段,經過逗號或空格進行切割。如上圖所示,使用逗號分割字段,大括號中是字段的名稱。
之因此不使用正則表達式,是由於它規則過於複雜,CPU消耗很是高,而目前所用的方式僅經過符號就能夠切分,可以直觀的預測到所獲取的數據。不過該方式也存在限制,全部的數據都要遵循統一規則。
Munin不是Elastic,不過它出現的比較早,2002年的時候就誕生了,用的是PerL語言編寫的,能夠運行在各個平臺上,跨平臺能力很強。
Munin主要用來監控服務器的性能指標,好比CPU性能、磁盤佔用、內存佔用等。因爲有着很是久的歷史,全部插件很是豐富,基本上涵蓋了能找的全部平臺和應用。
恰好Elastic如今也在作監控和性能指標分析,咱們就在想能不能直接接入Munin。最終的方案是經過beats將Munin拉入到Elastic裏進行分析,由beats彙總Munin上傳上來的數據,Elastic接收這些數據並交由Kibana分析,這樣Elastic就能應對各類不一樣的平臺。
如上圖所示是一個和beats相關的基於磁盤的隊列,能夠理解爲磁盤的一個緩衝區。當用beats進行處理數據時,若是數據時高時低內存佔用就會比較高,而在基於磁盤的場景下得以免這種問題。咱們還能夠用磁盤作一個緩衝區,讓數據先落地。
X-Pack雖然是咱們的商業產品,可是有不少免費功能,這些都默認包含在下載版本中。如上圖所示,大部分功能都是開源的,但有一部分要PAID,另外一部分是免費的。
Monitoring是其中的一個免費功能,主要用來監控K8S和ES的內部運行信息,包含從監控到收集再到可視化的一整套流程。
第二個是SQL相關的功能,咱們如今能夠用SQL的語法來構建查詢,目前來講還很簡單,只提供select 基本功能,不能徹底的寫數據、修改數據。主要仍是用於讓數據科學家和運維分析人員方便的查詢數據,畢竟他們對SQL語句更熟悉些。
Rolling up功能能夠對數據進行上卷,按照指定的時間戳範圍對數據進行聚合獲得新的結果,這樣數據量會少不少,很大程度上節省了磁盤空間,也比較適用於對歷史數據和經營數據的進行業務分析。
還一個功能是Grok Debugger,它是一個用來調試python的工具。不少場景會用到Grok,像日誌的每一行可能不同,就能夠用Grok把它們作成一個事件。