Asp.NET Core 如何使用ElasticSearch和Kibana建立儀表板

語言: CN / TW / HK
圖片

在我以前的文章(這裡是 第一 [1] 第二篇 [2] )中,我展示了ElasticSearch作為電子商務中的全文搜尋引擎的使用,一些高階配置的設定和使用以及 products 包含所有內容的索引的建立儲存的產品。

出於演示目的,我們使用Bogus庫來動態生成產品,並使用NEST庫來處理ElasticSearch索引上的CRUD。

我們的模型產品類定義為:

public class Product

{

public int Id { get; set; }

public string Ean { get; set; }

public string Name { get; set; }

public string Description { get; set; }

public Brand Brand { get; set; }

public Category Category { get; set; }

public Store Store { get; set; }

public decimal Price { get; set; }

public string Currency { get; set; }

public int Quantity { get; set; }

public float Rating { get; set; }

public DateTime ReleaseDate { get; set; }

public string Image { get; set; }

public List<review> Reviews { get; set; }

}

其中品牌,類別,商店,評論和使用者類別分別是:

public class Brand

{

public int Id { get; set; }

public string Name { get; set; }

public string Description { get; set; }

}



public class Category

{

public int Id { get; set; }

public string Name { get; set; }

public string Description { get; set; }

}



public class Store

{

public int Id { get; set; }

public string Name { get; set; }

public string Description { get; set; }

}



public class Review

{

public int Id { get; set; }

public short Rating { get; set; }

public string Description { get; set; }

public User User { get; set; }

}



public class User

{

public int Id { get; set; }

public string FirstName { get; set; }

public string LastName { get; set; }

public string IPAddress { get; set; }

public GeoIp GeoIp { get; set; }

}

GeoIP是NEST庫中用於地理資料的類。下一步是建立一個可以顯示產品的儀表板,並對產品進行所進行的研究以詳細介紹或減少高階統計資訊。

我們決定使用 Kibana [3] ,而不是開發耗時費力的定製解決方案。它處理作為ElasticSearch堆疊一部分的前端應用程式,使我們可以檢視資料並搜尋所有索引資料並跟蹤查詢的負載。

Kibana還可以用於監視,管理和保護同一堆疊。

圖片

要安裝和配置它,只需轉到頁面https://www.elastic.co/downloads/kibana。在這裡,我們可以找到所有平臺的安裝程式,然後下載適合我們需求的安裝程式。

一旦下載並解壓縮到給定的資料夾(在我們的示例中為C:\ ElasticSearch \ Kibana)中,我們開啟config / kibana.yml檔案,並將elasticsearch.hosts引數設定為指向我們的ElasticSearch例項(對於本地版本http://本地主機:9200):

elasticsearch.hosts: ["http://localhost:9200"]

讓我們執行bin / kibana.bat並從瀏覽器頁面開啟http:// localhost:5601。我們得到的頁面如下:

圖片

Kibana介面分為幾個部分。

在開源版本中,包括:發現(資料互動式探索),視覺化(圖形,表格,標籤中的資料分析),儀表板(複雜的資料檢視),畫布(文件建立),地圖(地理參考資料分析),開發工具(處理和分析查詢的工具)和管理(索引和群集管理)。

我們還可以安裝X-Pack外掛以使用“圖形”和“監視”部分。

讓我們轉到管理-> Elasticsearch->索引管理部分,以驗證是否已正確檢測到Elasticsearch索引:

圖片

我們可以找到 products 索引並驗證其對映和與資料模型的匹配:

圖片

要建立一個Kibana索引,只需轉到“管理”部分->“ Kibana->索引模式”,然後輸入文字,即可將新索引連結到一個或多個ElasticSearch索引。

在本例中,我們鍵入 products ,以建立我們的Kibana索引。

圖片

建立索引後,可以在“發現”部分中按日期或一個或多個欄位過濾資料:

圖片

使用搜索欄,我們可以使用KQL語言(Kibana查詢語言)在產品之間進行查詢,這使您可以使用自動完成功能輕鬆查詢。例如,我們可以輸入:

category.name : Games AND rating > 0.5

瞭解遊戲類別中所有評分高於0.5的產品。

您可以選擇一些欄位並將其新增到“選定的欄位”中,以便獲得自定義結果檢視。

新增索引並驗證查詢的正確性後,我們可以建立新的資料檢視。

視覺化由各種型別的圖形(條形圖,蛋糕),表格,指標,指標和標籤雲組成。當然,它們支援資料聚合。

在“視覺化”部分,我們可以使用圖形來建立新的資料視覺化。

圖片

出於統計目的,我們使用簡單的垂直條形圖建立了一些按類別,品牌分組的產品圖。我們得到的結果類似於:

圖片

您也可以向此檢視新增過濾器。例如,在我們的情況下,我們只想檢視商店中可用的產品,因此我們 quantity > 0 在過濾器欄中鍵入。然後單擊“儲存”按鈕以儲存我們的檢視。

另一個有用的視覺化是按價格範圍的產品檢視。在這種情況下,我們在價格欄位中定義儲存桶,並將其用於餅圖。讓我們按以下價格範圍劃分產品:

0 50

50 100

100 200

200 400

400 800

800

我們可以得到類似於以下結果:

圖片

我們還可以新增一些子桶以具有聚合資料和巢狀的視覺化效果。

在“地圖”部分中,我們可以使用“彈性地圖”(多層地圖)顯示地理參考資料。

我們可以單擊“新增”層,通過選擇包含地理參考資訊的欄位(在我們的示例中 geoIp.location )將資料新增到索引中。 

圖片

建立了所需的所有檢視後,我們將繼續執行第一個儀表板。最後一個是一組檢視,搜尋和地圖,通常實時更新,從而提供有關索引資料的高階資訊。

在“儀表板”部分,讓我們單擊“建立新儀表板”,然後單擊“新增”並選擇建立的檢視:

圖片

讓我們全部新增它們並將它們排列在儀表板佈局上。我們可以獲得這樣的結果:

圖片

儀表板可以通過KQL查詢進行過濾,並且檢視始終是動態的。我們還可以通過iframe在Web應用程式中共享和整合它們。如果點選共享->複製iframe程式碼,我們將獲得這樣的連結:

<iframe src="http://localhost:5601/app/kibana#/dashboard?embed=true" height="600" width="800"></iframe>

Kibana的另一個有趣功能是Canvas。它使用一種檢視和呈現資料的工具來顯示實時資料,並將其與顏色,影象和文字結合在一起以建立動態檢視。

在“畫布”部分中,讓我們單擊“建立工作臺”,然後開始新增指標。在我們的案例中,我們為產品和可用商品,品牌和類別設定引數,為品牌-類別對設定餅圖,並按品牌劃分商品平均價格。

圖片

建立後,工作臺可以共享為JSON檔案或下載為PDF報告。

其他有趣的功能是:

機器學習:允許您檢查資料中的異常並使用規範化資料建立新索引; 圖形:使您可以檢視索引物件之間的連線; 日誌:用於檢視和管理我們應用程式的日誌資料,並可能實時檢查異常情況: REST API:允許您通過HTTP與Kibana引擎進行通訊並管理我們的儀表板; APM:允許您實時監視服務,應用程式和相關效能; 開發工具:一組用於與資料進行互動的工具,包括控制檯和搜尋分析器。

結論

在本文中,我們向您展示瞭如何使用Kibana來處理,管理和從ElasticSearch引擎中獲得最佳收益。

希望我們引起您對該主題的興趣。

此處提供了帶有本文中使用的程式碼的示例專案: https [4] //github.com/enricobencivenga/ProductElasticSearchAdvanced [5]

References

[1] 第一:  https://www.blexin.com/en-US/Article/Blog/How-to-integrate-ElasticSearch-in-ASPNET-Core-70

[2] 第二篇:  https://www.blexin.com/en-US/Article/Blog/ElasticSearch-advanced-features-80

[3] Kibana:  https://www.elastic.co/kibana

[4] https:  https://github.com/enricobencivenga/ProductElasticSearchAdvanced

[5] //github.com/enricobencivenga/ProductElasticSearchAdvanced:  https://github.com/enricobencivenga/ProductElasticSearchAdvanced