使用ELKStack 7.12.1:删除Kibana报表待处理作业后新CSV导出作业状态异常的原因咨询
嘿,针对你在ELK Stack 7.12.1里碰到的报表作业删除问题,我来给你理清楚细节:
关于_delete_by_query API的执行机制
首先要明确:当这个API返回200响应码时,并不代表删除操作已经完成。Elasticsearch的_delete_by_query是一个异步批量操作——返回200只是说明你的删除请求已经被集群成功接收并调度,后台会启动异步任务来批量匹配并删除符合条件的文档。
你可以通过ES的任务查询API查看这个后台任务的进度:
GET _tasks?detailed=true&actions=*/delete/byquery
报表作业的状态与后台执行逻辑
Kibana的报表作业(包括CSV导出)的状态元数据都存在.reporting*索引中,但作业的实际执行是由Kibana的Worker进程处理的,这里要分两种情况看:
还未被Worker拾取的Pending作业:
当你用_delete_by_query删除了completed_at字段不存在的文档后,这些作业的元数据会从索引中被移除——Kibana UI里自然看不到它们了,而且Worker也不会再去拾取这些作业(因为Worker是通过查询.reporting*索引来获取待处理任务的),所以这类作业不会再被执行。已经被Worker拾取的Processing/正在执行的作业:
如果某个作业在你执行删除操作时,已经被Worker进程拾取并开始执行,那即使索引里的元数据被删除,Worker还是会继续完成这个作业(或者直到3次尝试失败)。因为Worker在拾取作业后,会把作业的关键信息缓存到本地,后续执行不依赖索引中的元数据记录。
对你问题的直接解答
_delete_by_query返回200后,后台确实还在继续执行删除匹配文档的任务,直到所有符合条件的文档都被处理完毕。- 待处理作业并非只是从UI移除:未被Worker拾取的Pending作业会被彻底终止(不会执行);已被Worker拾取的作业会继续运行到完成或3次失败。
另外你提到的“新创建的CSV导出先Pending再Processing”是正常的调度流程,和这次删除操作没有关系——新作业会重新走Kibana的任务调度逻辑,先进入Pending等待Worker拾取,之后才会进入Processing状态。
内容的提问来源于stack exchange,提问作者AsimRazaKhan

