前言
在前一篇 Splunk Journey (03) - Data Pipeline 文章中,我們已經知道在 Splunk 運作架構中,Indexing 層級便是負責資料的 Parsing 和 Indexing 處理作業。
簡單來說,針對 Indexes 運作架構規劃中最簡單也最重要的最佳建議作業,便是將 Indexes 存放在「高 IOPS 效能的儲存資源中」。同時,在 Splunk 運作架構中,預設情況下所有 Indexes 都會存放在「/var/lib/splunk」路徑內,而 Splunk 預設的主要「Main Index」存放路徑則是「/var/lib/splunk/defaultdb」。
當然,隨著 Splunk 的運作規模越來越大時,Indexers 便需要建立「叢集」(Cluster) 運作架構,後續才會在學習這個進階議題的部份。
舉例來說,除了主要的 Main Index 之外,再建立二個不同用途的 Index 分別是「Web Data Index 和 Security」。因此,當我們需要在 Splunk 縮小搜尋/過濾範圍時,便可以在搜尋語法中採用「指定 Index」名稱的方式,來達到縮小搜尋/過濾範圍的目的。同時,對於 Splunk 主機來說工作負載也較小,並且搜尋/過濾的時間也更短。
同時,可以針對不同團隊的成員,組態設定不同的權限或工作任務達到隔離的目的。
此外,針對不同用途的 Index 也可以組態設定不同的「Purged / Archived」等保留原則 (Retention Policy),例如,Web Data Index 只保留六個月之後就執行 Purged 的動作,而 Security Index 保留十二個月並執行 Archived 的動作。
值得注意的是,當你要建立 Index 時,由於會影響到你後續的搜尋語法,所以「Index 名稱」請不要隨意指定。同時,建立的 Index 名稱,屆時也會採用 Index 名稱存放在相關路徑中。
了解 Bucket 的用途之後,同樣的在 Splunk 環境中有多種 Bucket 種類,分別是「Hot、Warm、Cold、Thawed、Frozen」,並且也會存放在不同的路徑。
那麼,這些不同類型的 Bucket 的差別在哪裡? 事實上,資料進入 Splunk 之後存放在 Bucket 內,就會隨著時間和使用程度而存放在不同的 Bucket 當中。當資料「一開始寫入 Splunk」時,那麼資料就會存放在「HOT Bucket」內。
那麼,要等到什麼時機,資料才會從 HOT Bucket 移動到 WARM Bucket 內? 下列便是三種 HOT Bucket 將資料移動到 WARM Bucket 的時間點:
當資料移動到 WARM Bucket 之後,資料將會變成是 Read-Only 狀態。同樣的,當存放在 WARM Bucket 再次「達到最大存放資料量時、Time span 時間點到達時」,便會再度將 WARM Bucket 資料移動到 COLDd Bucket 中。
在 Splunk 運作環境中,一般來說當執行搜尋/過濾工作任務時,顯示的結果將會依序「HOT Bucket > WARM Bucket > COLD Bucket」內容來顯示。
圖、Indexer 運作架構示意圖
當然,隨著 Splunk 的運作規模越來越大時,Indexers 便需要建立「叢集」(Cluster) 運作架構,後續才會在學習這個進階議題的部份。
圖、Indexer Cluster 運作架構示意圖
Indexes 類型
事實上,Index 還有許多不同的類型以負責處理不同的用途:- Main Index: Splunk 主要 Index,預設存放路徑為「/var/lib/splunk/defaultdb」。
- _internal Indexes:負責 Internal logs 和 metrics。
- _audit Indexes: 負責 Audit trails 和 optional audit information。
- _introspection Indexes: 負責 System performance 和 Resource usage。
- _thefishbucket Indexes: 負責 Checkpoint info for file monitoring inputs。
規劃不同用途的 Index
為什麼要規劃不同用途的 Index?全部放在「Main Index」當中可以一次搜尋/過濾所有 Event 不好嗎? 簡單來說,當 Splunk 運作架構和規模相對較小時,當然可以全部放在 Main Index 當中,可是當需要組態設定「User Role」、「Purged 時間」、「縮小 Index 範圍」……等需求時,規劃不同用途的 Index 便是最佳解法。舉例來說,除了主要的 Main Index 之外,再建立二個不同用途的 Index 分別是「Web Data Index 和 Security」。因此,當我們需要在 Splunk 縮小搜尋/過濾範圍時,便可以在搜尋語法中採用「指定 Index」名稱的方式,來達到縮小搜尋/過濾範圍的目的。同時,對於 Splunk 主機來說工作負載也較小,並且搜尋/過濾的時間也更短。
同時,可以針對不同團隊的成員,組態設定不同的權限或工作任務達到隔離的目的。
此外,針對不同用途的 Index 也可以組態設定不同的「Purged / Archived」等保留原則 (Retention Policy),例如,Web Data Index 只保留六個月之後就執行 Purged 的動作,而 Security Index 保留十二個月並執行 Archived 的動作。
值得注意的是,當你要建立 Index 時,由於會影響到你後續的搜尋語法,所以「Index 名稱」請不要隨意指定。同時,建立的 Index 名稱,屆時也會採用 Index 名稱存放在相關路徑中。
Bucket 的用途
在 Splunk 的運作環境中「Bucket = Directories」,並且 Bucket 內會存放「Raw data 和 Indexing data」等,同時系統會設定 Bucket 的「Maximum size 和 Maximum time span」資料。了解 Bucket 的用途之後,同樣的在 Splunk 環境中有多種 Bucket 種類,分別是「Hot、Warm、Cold、Thawed、Frozen」,並且也會存放在不同的路徑。
那麼,這些不同類型的 Bucket 的差別在哪裡? 事實上,資料進入 Splunk 之後存放在 Bucket 內,就會隨著時間和使用程度而存放在不同的 Bucket 當中。當資料「一開始寫入 Splunk」時,那麼資料就會存放在「HOT Bucket」內。
那麼,要等到什麼時機,資料才會從 HOT Bucket 移動到 WARM Bucket 內? 下列便是三種 HOT Bucket 將資料移動到 WARM Bucket 的時間點:
- 達到最大存放資料量時。
- Time span 時間點到達時。
- Indexer 重新啟動時。
當資料移動到 WARM Bucket 之後,資料將會變成是 Read-Only 狀態。同樣的,當存放在 WARM Bucket 再次「達到最大存放資料量時、Time span 時間點到達時」,便會再度將 WARM Bucket 資料移動到 COLDd Bucket 中。
在 Splunk 運作環境中,一般來說當執行搜尋/過濾工作任務時,顯示的結果將會依序「HOT Bucket > WARM Bucket > COLD Bucket」內容來顯示。
參考資源
- Indexes, indexers, and indexer clusters - Splunk Documentation
- Archive indexed data - Splunk Documentation
- Restore archived indexed data - Splunk Documentation
- indexes.conf - Splunk Documentation
Splunk 筆記系列文章
- Splunk 攻略
- Splunk Journey (01) - 基礎架構和運作元件
- Splunk Journey (02) - 建立 Splunk 運作環境
- Splunk Journey (03) - Data Pipeline
- (本文) Splunk Journey (04) - Indexes