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大數查詢
- Linux查詢大檔案Linux
- 如何查詢上標
- 大資料量查詢容易OOM?試試MySQL流式查詢大資料OOMMySql
- Tengine 如何查詢 server 塊Server
- 如何查詢網站 ip 地址網站
- MongoDB 如何支援類 SQL 查詢MongoDBSQL
- 如何精準查詢日誌
- CAD如何進行文字查詢
- mysql多表查詢如何實現MySql
- cmd命令如何查詢ip地址
- 如何找東西?查詢演算法之順序查詢和二分查詢詳解演算法
- SQL查詢的:子查詢和多表查詢SQL
- mysql-分組查詢-子查詢-連線查詢-組合查詢MySql
- 如何防止網站被侵入,如何防止網站被掛馬,如何防止網站被入侵?網站
- 流式查詢1. mybatis的遊標Cursor,分頁大資料查詢MyBatis大資料
- 快三跨度技巧方法大全
- 為什麼 Redis 的查詢很快, Redis 如何保證查詢的高效Redis
- 複雜查詢—子查詢
- 查詢——二分查詢
- 構建api gateway之 健康檢查APIGateway
- [20201201]約束大寫與查詢.txt
- 強大:MyBatis ,三種流式查詢方法MyBatis
- 如何防止APP資訊洩露的問題 該怎麼查APP
- MYSQL學習筆記25: 多表查詢(子查詢)[標量子查詢,列子查詢]MySql筆記
- 分塊查詢【大規模資料查詢演算法優化】【索引順序查詢】演算法 PHP 版演算法優化索引PHP
- 如何查詢Linux當機的原因?Linux
- Java 中如何使用 SQL 查詢 TXTJavaSQL
- 如何做多表關聯查詢
- sql查詢是如何執行的?SQL
- mongodb如何查詢最後幾項?MongoDB
- 如何在es中查詢null值Null
- 如何防止DNS汙染?DNS
- DbForge Studio for Oracle入門教程:如何在查詢生成器中建立查詢Oracle
- 查詢演算法__Fibonacci查詢演算法
- group by,having查詢 ”每**“的查詢
- Elasticsearch複合查詢——boosting查詢Elasticsearch