接下來兩天,我們將會深入了解 Kibana,一個重要的視覺化工具。
本篇的主題包含有:
那我們就開始吧!
在開始介紹 Kibana 之前,我們先來講講 Elastic 這間公司,他們在資料問題上,提供了 3 種解決方案:
這三種解決方案讓你可以搜索、觀察與保護你的系統。
而這些解決方案是由一個堆疊(stack)、一套軟體讓我們可以傳送、讀取、儲存、搜索與視覺化資料,我們稱它做 Elastic Stack,這個堆疊是由 Kibana、Elasticsearch、Beats 和 Logstash 所構成。
所有收集資料到最後視覺化的過程,好比是一個旅程一般,如下圖所示,一開始資料產生後,透過 Beats 或 Logstash,傳送輸入進 Elasticsearch 做儲存、建立索引,最後再透過 Kibana 與 Elasticsearch 互動後做視覺化的呈現。
資料可以用各種不同的形態做儲存,例如說 table、XML、JSON...等等,而在 Elasticsearch 中,資料是以一種稱做 **文件(documents)**的方式做儲存,並以JSON做表示。
舉例來說,如果今天有一個 table 的資料如下圖:
以第一筆資料來說,儲存在 Elasticsearch 內就會變成:
{
"user": "Bill",
"age": 30,
"country": "FR",
"category": "A"
}
而六筆資料就會變成六個文件,像下圖這樣:
一般來說,我們可以將資料粗略的分為兩大種類:
這兩種類型的資料,最大的差異點就在於:會不會隨著時間增加而改變或增加。
在 Elaticsearch 中,因為是用索引在管理、組織與儲存資料,為了讓其可以理想地工作,一個索引必須是固定大小的,所以若是處理靜態資料,那麼就相當適合且黑皮,因為資料不會隨著時間增加。
然而,若當今天資料是會隨時間改變的型態,那就會複雜許多,其中一種解法就是把索引的名稱加上時間的資訊,舉例而言,今天所收集的資料就把索引名稱取做 data-2020-09-16
,明天的就取做 data-2020-09-17
。
如此一來,在 Kibana 中,先指明索引樣式(index pattern),再選定想要查詢資料的日期區間,就可以快速地做呈現了!
讓我們來假設一個情境:有一個社群軟體,讓你可以在網路上傳送訊息,而每一則訊息都會記錄一個日誌。
舉例來說:今天有一個人叫小英,住在台灣,有著 817 個追蹤者,今天小英出門旅遊時,在高雄傳給小魚一則訊息,裡面主題包含了:#美豬、#爐渣,那麼這則日誌儲存的資訊可能會長得像下面這樣:
{
"message_id": 1,
"user.name": "小英",
"user.geo.country": "台灣",
"user.geo.city": "台北",
"user.nb_of_followers": 817,
"subjects": "#美豬 #爐渣",
"number_of_subjects": 2,
"likes": 94,
"geo.country": "台灣",
"geo.city": "高雄"
}
上面這種以事件(Event)為中心所儲存的資料,有著它的優點,卻也有一些限制。例如說我今天想要計算每個使用者平均被點讚的次數,這樣 事件中心(event-centric) 的資料就變得比較困難。
若要解決這種問題,我們可以定期地執行一些 script ,將這樣事件中心的資料轉變成 實體中心(entity-centric),以剛才的例子來說,我們就可以把所有小英這個使用者的訊息拿出來,轉變成另外一種文件資料做儲存:
{
"user_id": 3,
"name": "小英",
"geo.country": "台灣",
"geo.city": "台北",
"nb_of_followers": 817,
"average_likes": 66,
"salary": 49000,
"occupation": "教授"
}
Kibana 是一個功能強大的工具,但它不儲存資料。
如果需要儲存資料,需要存進 Elasticsearch,當資料儲存在 Elasticsearch 中,Kibana 便可以利用它們來創建視覺化圖表。
總算進入到 Kibana 的篇章啦!對於整個 Elastic Stack 也逐漸越來越了解什麼是什麼,要拿來幹嘛,有種便便越來越順暢的感覺ㄎㄎ
今天我們先了解在 Kibana 視覺化資料之前,到底資料是以什麼樣子做儲存的,先知道源頭是怎樣後,明天我們就要開始來實作操作 Kibana on Elastic Cloud 囉!