ES 處理時序數據

背景

最初創建索引,沒有特別處理。
隨着時間增加,時序數據的數據量會不斷上升,單索引文檔過多時,搜索效率會下降,而且早晚會達到分片上限。
通常我們只關心最近時間的數據,時間過去越久,信息的價值就會下降。
最直接的辦法是就是把過期的一些文檔給刪除掉。

delete_by_query

scroll query/bulk delete 同理
使用這些API刪除數據效率較低

We could delete the old events with a scroll query and bulk delete, but this approach is very inefficient. When you delete a document, it is only marked as deleted (see Deletes and Updates). It won’t be physically deleted until the segment containing it is merged away.

curl -u 用戶名:密碼  -H'Content-Type:application/json' -d'{
    "query": {
        "range": {
            "@timestamp": {
                "lt": "now-7d",
                "format": "epoch_millis"
            }
        }
    }
}
' -XPOST "http://127.0.0.1:9200/*-*/_delete_by_query?pretty"

如何合理管理時間序列數據

2.x 的文檔是這樣說的
https://www.elastic.co/guide/en/elasticsearch/guide/current/time-based.html
文檔中提到應該爲索引建立別名

輸入數據的業務系統用統一的別名,不用在修改索引時間切分方法時修改。
別名指向帶時間後綴分割的實際索引名
*_YYYY-MM-dd

然後定期更新

POST /_aliases
{
  "actions": [
    { "add":    { "alias": "logs_current",  "index": "logs_2014-10" }}, 
    { "remove": { "alias": "logs_current",  "index": "logs_2014-09" }}, 
    { "add":    { "alias": "last_3_months", "index": "logs_2014-10" }}, 
    { "remove": { "alias": "last_3_months", "index": "logs_2014-07" }}  
  ]
}

另外也要提前建好索引模版,這樣指向新index時,就不必重複設置

7.x下的索引生命週期管理 ILM

現在使用的時7.4版本。
先說明幾個操作概念
rollover 重定向別名,跟上面說的基本一致
shrink 減少一個索引中用到的主分片數量 (sho
force merge 合併分片中的 分段segment 釋放空間
freeze 變成只讀
delete 刪除 永久移除一個索引

關聯 生命週期策略,到 索引模版

ILM 提供一種 冷熱分離結構
有hot-warm-cold-delet 四個階段

使用ILM主要有四個步驟

  1. 創建策略 定義什麼階段 有什麼動作。
  2. 創建模板關聯索引
  3. 初始化第一個寫索引
  4. 驗證索引是否如期移動/刪除

rollover 如何命名

初始化索引按照【”-”+數字】的形式結尾)
rollover新創建的索引數字+1,es自動在前面以0補齊至6位數字
執行rollover後,別名logs的寫指向最新索引,查詢指向所有rollover下的索引。

自動rollover

有些博客提到要定時持續調用 _rollover 接口
我以max_docs:2 測試過,插入3條數據時是不會馬上觸發rollover的
但等個(默認)10 分鐘後再看,發覺是會自動rollover了 (v7.4)
可以在集羣設置裏修改

將原有索引加入生命週期管理

將新數據寫入到新的ILM管理的索引中
老索引可以通過應用另外的過期策略,主動過期
也可以通過reindex加入到新索引,但此時會混合新舊數據到同一索引中,直到滿足了新策略

總結

1.所有索引必需有別名。相當於接口。
可以避免寫入方頻繁修改。
可以通過切換寫索引,來對索引的一些設置mapping等進行修改。

2.新建的時序數據的索引,無論大小都可以儘量使用ILM去管理。
小數據量的可以根據max_docs 去配置
大數據量的可以按時間去配置。

3.有些配置數據,失效時間未必與插入文檔的時間有明確的關係。比如活動排期此類非時序的配置。
可以設定長一點的過期時間

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章