适用版本: 6.8-8.x
1. 错误说明 #
报错 failed to parse [<type>] action [<watch_id>/<action_id>]. unexpected string field [<field>] 表示 Elasticsearch 在解析 action 配置时,读到了一个不在允许列表里的字符串字段名。
附录代码说明得很直接:这段解析逻辑只接受几个特定字符串字段,例如 category 和 level。如果又读到其他字符串字段,解析器不会忽略,而是立即抛错。
2. 常见触发场景 #
- 把不支持的字段名写进了 logging action。
- 字段名拼写错误,例如把
category写成categories。 - 不同 action 类型的字段被混写到了同一个 action 中。
错误示例:
{
"actions": {
"log-it": {
"logging": {
"category": "watcher",
"level": "info",
"message_template": "alarm triggered"
}
}
}
}
如果当前 action 并不支持 message_template 这种字符串字段,就会触发该错误。
3. 排查方法 #
- 查看异常中的字段名,先确认到底是哪一个字段不被接受。
- 对照当前 action 类型的官方字段定义,检查是否混入了别的 action 参数。
- 核对字段名是否存在大小写、单复数或下划线差异。
- 如果配置是程序拼装的,检查是否把通用字段批量注入到了所有 action。
4. 修复方法 #
- 删除无效字符串字段。
- 将字段名改成当前 action 真正支持的名称。
- 把属于其他 action 类型的参数移回正确位置。
修正示例:
{
"actions": {
"log-it": {
"logging": {
"category": "watcher",
"level": "info"
}
}
}
}
5. 预防建议 #
- 对每种 action 使用独立的数据模型,而不是共用一套宽松字段集合。
- 在配置上线前做字段白名单校验。
- 保留动作模板和变更审计,避免多人维护时混入不兼容字段。
相关错误 #
附:日志上下文 #
} catch (IllegalArgumentException iae) {
throw new ElasticsearchParseException("failed to parse [{}] action [{}/{}]. unknown logging level [{}]"; TYPE;
watchId; actionId; parser.text());
}
} else {
throw new ElasticsearchParseException("failed to parse [{}] action [{}/{}]. unexpected string field [{}]"; TYPE;
watchId; actionId; currentFieldName);
}
} else {
throw new ElasticsearchParseException("failed to parse [{}] action [{}/{}]. unexpected token [{}]"; TYPE; watchId;
actionId; token);





