Elasticsearch Rolling up historical data Overview
阿新 • • 發佈:2018-12-14
Elasticsearch Rolling up historical data
Overview
And while we continue to believe that most data tends to have value over a long period of time, the relative value of the data can decrease as it ages
雖然大多數的資料在很長一段時間內都具有價值,但資料的相對價值會隨著時間的增長而降低。
通過彙總資料來減少儲存成本成為了一種選擇。
Elasticsearch目前支援配置一個定時任務自動把歷史資料彙總到一個新的索引當中。
API Quick Reference
About Job
獲取已有任務列表
GET /_xpack/rollup/job/_all
新增一個任務
新增一個id為video_test的任務
PUT /_xpack/rollup/job/video_test
{
# 源索引
"index_pattern": "sinavideo_dispatcher-*",
# 彙總結果索引
"rollup_index": "video_test_2",
# 任務呼叫規則(crontable)
"cron": "*/1 * * * * ?",
"page_size" :1000,
# 聚合規則
"groups" : {
"date_histogram": {
"field": "@timestamp",
# 聚合粒度
"interval": "5m",
# 資料延遲
"delay": "15m"
},
"terms": {
"fields": ["domain", "http_code"]
}
},
# 聚合指標
"metrics": [
{
"field" : "body_bytes_send",
"metrics": ["avg"]
}
]
}
具體各引數參照rollup-job-config
任務啟停
每一個任務預設是停止的,需要呼叫介面啟動
POST /_xpack/rollup/job/video_test/_start
停止
POST /_xpack/rollup/job/video_test/_stop
獲取任務配置
獲取任務配置資訊,其中被刪除的任務無法檢視
GET /_xpack/rollup/job/video_test/
獲取索引對應的任務元資料資訊
GET /_xpack/rollup/data/sinavideo_dispatcher-*
About Search
無論是實時資料還是聚合資料都支援_rollup_search
和_search
兩個介面。但是如果要獲取聚合的結果,需要呼叫_rollup_search
介面。
以下是獲取每個域名每5分鐘的平均流量大小:
GET video_test_2/_rollup_search
{
"size": 0,
"aggregations": {
"timeline": {
"date_histogram": {
"field": "@timestamp",
"interval": "5m"
},
"aggs": {
"domains": {
"terms": {
"field": "domain",
"size": 10
},
"aggs": {
"avg_body": {
"avg": {
"field": "body_bytes_send"
}
}
}
}
}
}
}
}
_rollup_search
介面支援同時查詢實時資料和彙總後的資料。當實時資料和彙總資料存在重疊時,將預設優先使用實時資料來提高資料準確性
GET sinavideo_dispatcher-*,video_test_2/_rollup_search
{
...
}
Limitations
- Only one Rollup index per search(查詢時僅能指定一個彙總索引,對實時索引沒有限定)
- Can only aggregate what’s been stored(沒有彙總的結果當然無法搜尋)
- Interval Granularity(配置任務時定義了聚合時間粒度,後續無法獲取小於這個粒度的彙總資料)
- Limited aggregation components(有限的聚合方法)
- Limited querying components(有限的查詢方法)
存在的問題
- Job目前無法修改
- Kibana暫時不支援
_rollup_search