背景
我們?cè)谑褂?Elasticsearch 的時(shí)候囤踩,可能會(huì)遇到數(shù)據(jù)“丟”了的情況旨椒。有可能是數(shù)據(jù)沒成功寫入 ES 集群,也可能是數(shù)據(jù)被誤刪了堵漱。
針對(duì)數(shù)據(jù)被誤刪综慎,有沒有好的解決辦法呢?
其實(shí)我們可以把“刪除數(shù)據(jù)”這個(gè)操作管理起來(lái)勤庐。當(dāng) ES 集群接收到刪除數(shù)據(jù)命令的時(shí)候示惊,先不執(zhí)行該命令,而是生成一條刪除數(shù)據(jù)的記錄愉镰,經(jīng)過管理人員批準(zhǔn)后米罚,該命令才會(huì)執(zhí)行。這樣不僅可以管理數(shù)據(jù)的刪除岛杀,還可以進(jìn)行刪除操作的追蹤:什么人,什么時(shí)間崭孤,發(fā)送了什么樣的刪除指令类嗤,從哪個(gè) IP 發(fā)送的,以什么身份登錄的等等辨宠。
要實(shí)現(xiàn)這個(gè)解決辦法遗锣,我們可借助 INFINI Gateway 和 Console 的幫助。
方案架構(gòu)
方案效果
- INFINI Gateway 作為 ES 集群的代理嗤形,接收所有請(qǐng)求
- INFINI Gateway 對(duì)刪除數(shù)據(jù)操作進(jìn)行攔截精偿,在 Console UI 界面生成記錄
- 管理人員 在 Console UI 界面審批操作記錄,審批通過操作被執(zhí)行
方案演示
測(cè)試數(shù)據(jù)準(zhǔn)備
測(cè)試索引 test1赋兵,一共有 3 條數(shù)據(jù)笔咽。message 內(nèi)容分別是"line 1","line 2"和"line 3"霹期。
啟動(dòng) INFINI Gateway 及 Console
網(wǎng)關(guān)配置新增內(nèi)容
增加對(duì) DELETE 操作的捕獲叶组,不直接執(zhí)行,寫入隊(duì)列中历造。后續(xù)由隊(duì)列生成特定的記錄甩十。
router:
- name: my_router
default_flow: default_flow
tracing_flow: logging_flow
rules:
- method:
- "DELETE"
pattern:
- "/{any_index}"
- "/{any_index}/{any_type}"
- "/{any_index}/{any_type}/{any_docid}"
flow:
- audit_flow
- method:
- "*"
pattern:
- "/{any_index}/_delete_by_query"
- "/_delete_by_query"
flow:
- audit_flow
flow:
- name: audit_flow
filter:
- logging:
queue_name: del_queue
pipeline:
- name: del_queue_ingest
auto_start: true
keep_running: true
processor:
- json_indexing:
input_queue: "del_queue"
idle_timeout_in_seconds: 1
elasticsearch: "logging-server"
index_name: "del_requests"
worker_size: 1
bulk_size_in_kb: 1
執(zhí)行刪除操作
ES 支持多種刪除操作船庇,簡(jiǎn)單總結(jié)歸納如下:
- 刪除指定文檔 id
- 刪除索引
- 根據(jù)查詢刪除指定數(shù)據(jù)(_delete_by_query)
執(zhí)行刪除操作之前,先通過 INFINI Gateway 訪問 ES 集群侣监,證明可正常訪問數(shù)據(jù)鸭轮。
執(zhí)行上述的幾種刪除命令,注意要發(fā)給 INFINI Gateway 的 8000 端口橄霉。
數(shù)據(jù)查詢驗(yàn)證數(shù)據(jù)還在
Console 界面查看未批準(zhǔn)的刪除記錄
所有刪除操作窃爷,都被記錄,待審批
Console 界面進(jìn)行審批通過
選擇一條記錄酪劫,批準(zhǔn)執(zhí)行吞鸭。Operation-approve
數(shù)據(jù)查詢驗(yàn)證數(shù)據(jù)
"message": "line 2"的文檔已被刪除。
Console 界面查看歷史記錄
繼續(xù)批準(zhǔn)測(cè)試
批準(zhǔn)刪除一條文檔
"message": "line 1" 的文檔不在了覆糟。
批準(zhǔn)刪除索引
索引不在了刻剥。
至此我們演示了如何利用 INFINI Gateway 和 Console 對(duì) ES 集群刪除操作進(jìn)行管控,本文只是拋磚引玉滩字,相信還有更多有意思的場(chǎng)景等待大家發(fā)掘造虏。