任务接口是干什么的
任务接口列出集群里正在执行的任务(搜索、reindex、force merge、创建索引等)及其耗时,需要中断时用任务 ID 取消。它是排查"集群在忙什么、谁在占线程池"最直接的入口,也是判断某个长任务该继续等还是该干预的依据。
基本信息
| 列出任务 | GET /_tasks?detailed=true&actions=*_search |
|---|---|
| 单任务详情 | GET /_tasks/<task_id> |
| 取消 | POST /_tasks/<task_id>/_cancel |
| 常用过滤 | actions=*reindex、nodes=<node_id>、group_by=parents |
| 任务 ID 形态 | nodeId:taskId 组合 |
示例
示例
# 只看 reindex 类长任务
GET /_tasks?detailed=true&actions=*reindex
# 按父任务分组,看清是谁派生的子任务
GET /_tasks?group_by=parents&human=true
# 单任务详情:包含描述与耗时
GET /_tasks/oTUltX4IQMOUUVeiohTt74:42
# 取消任务
POST /_tasks/oTUltX4IQMOUUVeiohTt74:42/_cancel典型使用场景
- 集群变慢时先确认有没有长任务在占线程池
- 查看 reindex 或 force merge 的进度与剩余量
- 取消误提交的批量任务(例如全量重建索引)
- 定位某个客户端发出的搜索风暴
- 变更窗口前确认没有正在进行的集群级任务
任务字段读法
| 字段 | 含义 | 关注点 |
|---|---|---|
| action | 任务类型与来源 | search 类与 reindex 类的判断依据 |
| running_time_in_nanos | 已运行时长 | 远超日常水平时要介入 |
| cancellable | 是否支持取消 | false 的任务发取消请求不生效 |
| description | 任务文本描述 | reindex 会带源索引、目标索引与条件 |
| parent_task_id | 父任务标识 | 批量场景子任务多,按父任务分组看 |
取消是协作式的:任务在检查点响应取消请求,搜索类任务通常较快停止,写入类任务会先完成当前批次,因此取消后短时间内资源不会立即释放。
不带 detailed 的列表响应看不到描述与进度,排查长任务时统一加上 detailed=true 与 human=true,可读性会好很多。
任务为什么会堆积
每个正在执行的请求都会注册成任务,正常情况下任务生灭很快,列表里只看到零星几条。当并发超过线程池处理能力时任务开始排队,running_time 随之增长;协调节点上的批量操作还会派生出大量子任务,让列表看着很长。所以判断集群是否健康,看的不是任务条数本身,而是长耗时任务的类型、数量与来源客户端。
任务列表是瞬时快照,短任务可能在两次采样之间就结束了;要统计某类任务的耗时分布,应结合慢日志或连续采样,而不是只看一次输出。