适用版本: 6.8-8.x
1. 错误异常的基本描述 #
could not parse input for watch [id]. unknown input type [type] 表示 Watcher 已经读到了 input 对象里的类型字段名,但在当前节点上找不到与之对应的 InputFactory,因此无法继续构造可执行输入。
这类错误通常发生在 input 第一层类型声明上,常见于把 search、http、simple、chain 写错,或者把并不受当前版本支持的类型写进 watch。
2. 为什么会发生这个错误 #
input的类型字段拼写错误,例如把search写成seach。- 从别的版本、别的集群复制 watch 时,使用了当前版本不支持的 input 类型。
- 自定义插件或扩展没有加载,导致对应工厂没有注册。
- 模板渲染后把真实类型覆盖成了空字符串、变量占位符或错误值。
3. 如何排查和解决这个异常和解决这个异常 #
- 先检查 watch 定义中
input对象的第一层字段名,确认它是不是当前版本支持的合法类型。 - 如果 watch 由模板生成,输出渲染后的最终 JSON,而不是只看模板源文件。
- 对照目标版本文档确认可用类型,尤其要核对
chain、http、search这类配置复杂的 input。 - 如果依赖插件或二次开发扩展,确认对应节点确实完成安装并成功启动。
4. 如何解决这个错误 #
常用修复思路 #
- 把错误的类型名改成受支持的值。
- 不要把业务字段直接放在
input根下,input根下应先声明类型,再写该类型的配置。
错误示例:
{
"input": {
"seach": {
"request": {
"indices": ["logs-*"],
"body": {
"query": {
"match_all": {}
}
}
}
}
}
}
修正示例:
{
"input": {
"search": {
"request": {
"indices": ["logs-*"],
"body": {
"query": {
"match_all": {}
}
}
}
}
}
}
5. 小结 #
unknown input type 的根因不是查询执行失败,而是 Watcher 在解析 input 的第一步就无法识别类型。优先核对类型名、版本兼容性和插件注册状态,通常可以很快定位问题。
相关错误 #
附:日志上下文 #
token
);
} else if (token == XContentParser.Token.START_OBJECT) {
InputFactory factory = factories.get(type);
if (factory == null) {
throw new ElasticsearchParseException("could not parse input for watch [{}]. unknown input type [{}]", watchId, type);
}
input = factory.parseExecutable(watchId, parser);
} else {
throw new ElasticsearchParseException(
"could not parse input for watch [{}]. expected an object representing input [{}]; " + "but found [{}] instead",





