對於時序資料情境,隨著時間的積累資料量會越來越大。如果一直保留詳細資料,會導致儲存成本線性增長,此時您可以通過Elasticsearch(簡稱ES)的RollUp機制節省資料存放區成本。本文以匯總Logstash流量為例介紹RollUp的使用方法。
前提條件
- 確保您已擁有manage或manage_rollup許可權。
使用RollUp必須要有manage或manage_rollup許可權,詳情請參見Security Privileges。
- 已建立阿里雲ES執行個體。
詳情請參見建立Elasticsearch執行個體,本文使用的執行個體版本為通用商業版7.4。說明 下文中的RollUp命令適用於ES 7.4版本,6.x版本的命令請參見RollUp Job。
背景資訊
本文的需求情境如下:- 每15分鐘定時匯總整小時內instanceId的networkoutTraffic、networkinTraffic流量。
- 通過Kibana大圖展示指定instanceId的入口流量和出口流量。
本文以monitordata-logstash-sls-*為首碼的索引為例,該索引以每天建立一個索引的規則切分索引。索引的Mapping格式如下。
"monitordata-logstash-sls-2020-04-05" : {
"mappings" : {
"properties" : {
"@timestamp" : {
"type" : "date"
},
"__source__" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"disk_type" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"host" : {
"type" : "keyword"
},
"instanceId" : {
"type" : "keyword"
},
"metricName" : {
"type" : "keyword"
},
"monitor_type" : {
"type" : "keyword"
},
"networkinTraffic" : {
"type" : "double"
},
"networkoutTraffic" : {
"type" : "double"
},
"node_spec" : {
"type" : "keyword"
},
"node_stats_node_master" : {
"type" : "keyword"
},
"resource_uid" : {
"type" : "keyword"
}
}
}
}
}
說明 本文中的命令均可在Kibana控制台上執行,詳情請參見登入Kibana控制台。
操作流程
步驟一:建立RollUp作業
RollUp作業配置包含該作業如何運行、何時索引文檔及將來對匯總索引執行哪些查詢的詳情資訊。以下樣本通過
PUT _rollup/job
命令定義1小時內匯總的作業。
PUT _rollup/job/ls-monitordata-sls-1h-job1
{
"index_pattern": "monitordata-logstash-sls-*",
"rollup_index": "monitordata-logstash-rollup-1h-1",
"cron": "0 */15 * * * ?",
"page_size" :1000,
"groups" : {
"date_histogram": {
"field": "@timestamp",
"fixed_interval": "1h"
},
"terms": {
"fields": ["instanceId"]
}
},
"metrics": [
{
"field": "networkoutTraffic",
"metrics": ["sum"]
},
{
"field": "networkinTraffic",
"metrics": ["sum"]
}
]
}
參數 | 是否必選 | 類型 | 說明 |
index_pattern |
是 | string | 匯總的索引或索引模式。支援萬用字元(*)。 |
rollup_index |
是 | string | 匯總結果的索引。不支援萬用字元,必須是一個完整的名稱。 |
cron |
是 | string | 執行匯總作業任務的時間間隔。與摘要資料的時間間隔無關。 |
page_size |
是 | integer | 匯總索引每次迭代中處理的儲存桶的結果數。值越大,執行越快,但是處理過程中需要更多的記憶體。 |
groups |
是 | object | 為匯總工作定義分組欄位和彙總。 |
└ date_histogram |
是 | object | 將date欄位匯總到基於時間的儲存桶中。 |
└field |
是 | string | 需要匯總的date欄位。 |
└fixed_interval |
是 | time units | 資料匯總的時間間隔。例如設定為1h,表示按照1小時匯總field指定的時間欄位。該參數定義了資料能夠彙總的最小時間間隔。 |
terms |
否 | object | 無。 |
└fields |
是 | string | 定義terms欄位集。此數組欄位可以是keyword也可以是numerics類型,無順序要求。 |
metrics |
否 | object | 無。 |
└field |
是 | string | 定義需要採集的指標的欄位。例如以上樣本是分別對networkoutTraffic、networkinTraffic進行採集。 |
└metrics |
是 | array | 定義彙總運算元。設定為sum,表示對networkinTraffic進行sum運算。僅支援min、max、sum、average、value count。 |
說明 └表示子參數。
更多參數說明請參見Create rollup jobs API。配置參數時,請注意:
index_pattern
中指定萬用字元時,請確保不會匹配到rollup_index
指定的匯總索引名,否則報錯。- 由於匯總索引的Mapping是object類型,請確保叢集中不存在與匯總索引相匹配的索引模板,否則報錯。
- 欄位分組彙總僅支援Date Histogram aggregation、Histogram aggregation、Terms aggregation,詳細限制說明請參見Rollup aggregation limitations。
步驟二:啟動RollUp作業並查看作業資訊
- 啟動RollUp作業。
POST _rollup/job/ls-monitordata-sls-1h-job1/_start
- 查看RollUp作業的配置、統計和狀態資訊。
GET _rollup/job/ls-monitordata-sls-1h-job1/
更多詳細說明請參見Get rollup jobs API。
執行成功後,返回如下結果。{ ........ "status" : { "job_state" : "indexing", "current_position" : { "@timestamp.date_histogram" : 1586775600000, "instanceId.terms" : "ls-cn-ddddez****" }, "upgraded_doc_id" : true }, "stats" : { "pages_processed" : 3, "documents_processed" : 11472500, "rollups_indexed" : 3000, "trigger_count" : 1, "index_time_in_ms" : 766, "index_total" : 3, "index_failures" : 0, "search_time_in_ms" : 68559, "search_total" : 3, "search_failures" : 0 } }
步驟三:查詢匯總索引的資料
在Rollup內部,由於匯總文檔使用的文檔結構和未經處理資料不同,Rollup查詢連接埠會將標準查詢DSL重寫為與匯總文檔匹配的格式,然後擷取響應並將其重寫回給原始查詢的用戶端所期望的格式。
- 使用match_all擷取匯總索引的所有資料。
GET monitordata-logstash-rollup-1h-1/_search { "query": { "match_all": {} } }
- 查詢僅能指定一個匯總索引,即不支援模糊比對。對即時索引資料查詢沒有限制要求,查詢可指定多個索引。
- 查詢僅支援Term、Terms、Range query、MatchAll query、Any compound query(Boolean、Boosting、ConstantScore等),更多限制請參見Rollup search limitations。
- 使用
_rollup_search
彙總出口流量總資料。GET /monitordata-logstash-rollup-1h-1/_rollup_search { "size": 0, "aggregations": { "sum_temperature": { "sum": { "field": "networkoutTraffic" } } } }
_rollup_search
支援常規的Search API特性子集:- query:指定DSL查詢參數,但受一些限制,詳情請參見Rollup search limitations和Rollup aggregation limitations。
- aggregations:指定彙總參數。
_rollup_search
不可用功能包括:- size:由於匯總適用於彙總資料,無法返回查詢結果,因此將size設定為0或者完全省略。
- 不支援highlighter、suggestors、post_filter、profile、explain等參數。
步驟四:建立Rollup索引模式
- 登入Kibana控制台。
登入控制台的具體步驟請參見登入Kibana控制台。
- 在左側導覽列,單擊Management表徵圖。
- 在Kibana地區,單擊Index Patterns。
- 可選:關閉About index patterns頁面。
說明 如果您不是首次建立索引模式,可忽略此步驟。
- 單擊 。
- 輸入索引模式名稱(monitordata-logstash-rollup-1h-1),然後單擊Next step。
- 從Time Filter field name列表中,選擇@timestamp。
- 單擊Create index pattern。
步驟五:建立Kibana流量監控大圖
在Kibana上分別配置匯總索引的入口流量及出口流量監控大圖,操作步驟如下:
- 登入Kibana控制台。
登入控制台的具體步驟請參見登入Kibana控制台。
- 建立Line曲線圖。
- 在左側導覽列,單擊Visualize表徵圖。
- 單擊Create new visualization。
- 在New Visualization對話方塊中,單擊Line。
- 在索引模式列表中,單擊選擇已建立的Rollup索引模式。
- 設定Metrics和Buckets。
- 在Metrics地區,單擊。
- 設定Y-axis參數。
參數 說明 Aggregation 選擇Sum。 Field 選擇networkinTraffic或networkoutTraffic。 Custom label 自訂Y軸標籤。 - 在Buckets地區,單擊 。
- 設定X-axis參數。
參數 說明 Aggregation 設定為步驟一:建立RollUp作業時, group
中定義的date_histogram
。Field 選擇@timestamp。 Minimum interval 預設為RollUp作業中定義的彙總時間粒紋。必須是匯總配置間隔的整數倍,例如2h、3h等。 - 單擊表徵圖。
- 在頂部功能表列,單擊Save。
配置成功後,可看到如下結果。
- 使用同樣的方式建立Gauge圖。
- 參考下圖配置Gauge圖。
步驟六:建立Kibana流量監控儀表板
- 在Kibana控制台中,單擊左側導覽列的Dashboard表徵圖。
- 單擊Create new dashboard。
- 在頂部功能表列,單擊Add。
- 在Add panels頁面,單擊選擇Visualize中配置的可視化大圖。
- 關閉Add panels頁面,在頂部功能表列,單擊Save。
- 修改儀表板名稱,單擊Confirm Save。
儀表板儲存成功後,可查看儀表板展示結果。
- 單擊+ Add filter,選擇一個過濾項並配置過濾條件,單擊Save。
本文使用term過濾項,指定查詢某個instance的流量,最終結果如下。