场景:
我在Elasticsearch 6.x中有一个包含一堆 Multi-Tenancy 数据的索引。这些数据经常被租户删除(通过_delete_by_query
)并填充。
当使用_delete_by_query
发出wait_for_completion=false
请求时,提供查询JSON以删除租户的数据,我可以通过_tasks
API查看通用任务信息。问题在于,对于大量租户,在任何给定时间都不清楚谁在删除数据。
我的问题是这样的:
有没有办法查看_delete_by_query
任务正在对其进行操作的查询?或者我可以在任务中缓存的URL上附加附加参数以区分它们吗?
旁注:查看文档:https://www.elastic.co/guide/en/elasticsearch/reference/6.6/tasks.html我看到description
API响应中有一个_tasks
字段,该查询具有作为字符串的查询,但是,我在description
字段中看不到该级别的详细信息:"description" : "delete-by-query [myindex]"
提前致谢
最佳答案
识别查询的一种方法是将 X-Opaque-Id
HTTP header添加到查询中:
例如,当删除(例如)用户3的所有租户数据时,您可以发出以下命令:
curl -XPOST -H 'X-Opaque-Id: 3' -H 'Content-type: application/json' http://localhost:9200/my-index/_delete_by_query?wait_for_completion=false -d '{"query":{"term":{"user": 3}}}'
然后,您将获得一个任务ID,并在查看相关任务文档时,由于包含HTTP header 的
headers
部分,您将能够确定正在/正在删除哪个租户数据的任务: "_source" : {
"completed" : true,
"task" : {
"node" : "DB0GKYZrTt6wuo7d8B8p_w",
"id" : 20314843,
"type" : "transport",
"action" : "indices:data/write/delete/byquery",
"status" : {
"total" : 3,
"updated" : 0,
"created" : 0,
"deleted" : 3,
"batches" : 1,
"version_conflicts" : 0,
"noops" : 0,
"retries" : {
"bulk" : 0,
"search" : 0
},
"throttled_millis" : 0,
"requests_per_second" : -1.0,
"throttled_until_millis" : 0
},
"description" : "delete-by-query [deletes]",
"start_time_in_millis" : 1570075424296,
"running_time_in_nanos" : 4020566,
"cancellable" : true,
"headers" : {
"X-Opaque-Id" : "3" <--- user 3
}
},
关于elasticsearch - 在 Multi-Tenancy 索引中区分_delete_by_query任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58209680/