INFINI Gateway 如何防止大跨度查詢

infinilabs發表於2023-12-23

背景

業務每天生成一個日期字尾的索引,寫入當日資料。
業務查詢有時會查詢好多天的資料,導致負載告警。
現在想對查詢進行限制--只允許查詢一天的資料(不限定是哪天),如果想查詢多天的資料就走申請。

技術分析

在每天一個索引的情況下,要進行多天的資料查詢,有三種途徑:

  1. 查詢時,指定多個索引
  2. 查詢時,寫字首+*號,模糊匹配多個索引
  3. 查詢別名,別名關聯多個索引

需求實現

我們只需用閘道器代理 ES 叢集,並在 default_flow 中增加一段   過濾器的配置,只允許查詢一個索引且格式如 "xxx-2023-12-06", "xxx.2023.12.06", "xxx20231206" 。

      - request_path_filter:
           message: "Query scope exceeds limit, please contact the administrator for application."
           must:
             suffix:
                - _search
             regex:
                - \/[a-z]+[-.]?\d{4}[-.]?\d{1,2}[-.]?\d{1,2}\/


如果需要指定其他格式,請自行修改 regex 的正規表示式。

建立測試索引

在   開發工具中執行下列語句:

POST test-2023-12-06/_doc
{
  "test":"test"
}
POST test-2023-12-6/_doc
{
  "test":"test"
}
POST test.2023.12.06/_doc
{
  "test":"test"
}
POST test.2023.12.6/_doc
{
  "test":"test"
}
POST test20231206/_doc
{
  "test":"test"
}
POST test/_doc
{
  "test":"test"
}

查詢測試語句

#預計成功的查詢
curl localhost:8000/test-2023-12-06/_search?pretty
curl localhost:8000/test-2023-12-6/_search?pretty
curl localhost:8000/test.2023.12.06/_search?pretty
curl localhost:8000/test.2023.12.6/_search?pretty
curl localhost:8000/test20231206/_search?pretty
#預計失敗的查詢
curl localhost:8000/test-2023-12-06,test-2023-12-6/_search?pretty
curl localhost:8000/test-2023-12*/_search?pretty
curl localhost:8000/test*/_search?pretty
curl localhost:8000/*/_search?pretty

查詢結果

預計成功的查詢

預計失敗的查詢


此外,我們在 Console 中的 Request Analysis 看板中也能看到,哪些請求被拒絕,哪些請求被“放行”。

查詢多個索引(多天)

現在我們已經實現了業務只能查一個索引,即一天的資料。當業務需要查詢多天的索引時,我們只需建立一個別名,關聯多個索引就行了。注意別名也要符合格式要求:字母開頭 + 日期格式字尾。
下面我們建立一個 test-1111-1-1 的別名,關聯前面的三個測試索引。

POST /_aliases
{
  "actions" : [
    { "add" : { "indices" : ["test-2023-12-06", "test.2023.12.06","test-2023-12-6"], "alias" : "test-1111-1-1" } }
  ]
}

查詢別名

待業務查詢用完之後,刪除別名即可。

POST /_aliases
{
  "actions" : [
    { "remove": { "indices" : ["test-2023-12-06", "test.2023.12.06","test-2023-12-6"], "alias" : "test-1111-1-1" } }
  ]
}

最後,我們只需嚴格控制別名的建立,就能實現我們最初的需求了。


來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/70029458/viewspace-3001238/,如需轉載,請註明出處,否則將追究法律責任。

相關文章