版權聲明:本文爲博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/huochen1994/article/details/81504877
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