INFINI Gateway 如何防止大跨度查詢
背景
業務每天生成一個日期字尾的索引,寫入當日資料。
業務查詢有時會查詢好多天的資料,導致負載告警。
現在想對查詢進行限制--只允許查詢一天的資料(不限定是哪天),如果想查詢多天的資料就走申請。
技術分析
在每天一個索引的情況下,要進行多天的資料查詢,有三種途徑:
- 查詢時,指定多個索引
- 查詢時,寫字首+*號,模糊匹配多個索引
- 查詢別名,別名關聯多個索引
需求實現
我們只需用閘道器代理 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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 網站被黑如何恢復 如何查詢網站木馬程式碼 防止被黑網站
- 查詢大檔案
- K大數查詢
- 如何查詢上標
- 大資料量查詢容易OOM?試試MySQL流式查詢大資料OOMMySql
- Linux查詢大檔案Linux
- (利用索引)大資料查詢索引大資料
- Linux 5大查詢命令Linux
- Tengine 如何查詢 server 塊Server
- jdbc如何連續查詢?JDBC
- 如何查詢損壞塊
- 五大經典查詢(1)_二叉排序樹查詢排序
- 七大查詢演算法演算法
- MySQL 查詢大表注意事項MySql
- Mysql大表查詢注意事項MySql
- 大資料的實時查詢大資料
- 如何防止網站被侵入,如何防止網站被掛馬,如何防止網站被入侵?網站
- 如何防止APP資訊洩露的問題 該怎麼查APP
- MongoDB 如何支援類 SQL 查詢MongoDBSQL
- 如何查詢網站 ip 地址網站
- mysql多表查詢如何實現MySql
- 如何精準查詢日誌
- cmd命令如何查詢ip地址
- Oracle如何查詢當前LockOracle
- 如何找東西?查詢演算法之順序查詢和二分查詢詳解演算法
- 流式查詢1. mybatis的遊標Cursor,分頁大資料查詢MyBatis大資料
- 如何防止DNS汙染?DNS
- 如何防止sql注入SQL
- SQL查詢的:子查詢和多表查詢SQL
- 查詢之折半查詢
- 構建api gateway之 健康檢查APIGateway
- 強大:MyBatis ,三種流式查詢方法MyBatis
- Hibernate 之強大的HQL查詢
- 資料結構之三大查詢資料結構
- 為什麼 Redis 的查詢很快, Redis 如何保證查詢的高效Redis
- mysql-分組查詢-子查詢-連線查詢-組合查詢MySql
- Java 中如何使用 SQL 查詢 TXTJavaSQL
- 如何做多表關聯查詢