在使用 Apache SkyWalking 进行性能监控的过程中,我们遇到如下异常:
Caused by: java.lang.RuntimeException: {"error":{"root_cause":[{"type":"index_not_found_exception","reason":"no such index [sw_profile_task]","resource.type":"index_or_alias","resource.id":"sw_profile_task","index_uuid":"_na_","index":"sw_profile_task"}],"type":"index_not_found_exception","reason":"no such index [sw_profile_task]","resource.type":"index_or_alias","resource.id":"sw_profile_task","index_uuid":"_na_","index":"sw_profile_task"},"status":404}
`这里博主是创建了一个新的索引sw_profile_task,但是在使用过程中,系统报错如下:
Caused by: java.lang.RuntimeException: {
"error": {
"root_cause": [{
"type": "query_shard_exception",
"reason": "No mapping found for [start_time] in order to sort on",
"index": "sw_profile_task"
}],
"type": "search_phase_execution_exception",
"reason": "all shards failed",
"status": 400
}
}
这类错误表明 SkyWalking 在访问名为 sw_profile_task
的 Elasticsearch 索引时,发现该索引 不存在或未正确映射字段 start_time
,导致查询失败。
在我们的监控平台中,SkyWalking 的后端使用 Elasticsearch 作为存储引擎。系统启动正常,但在使用过程中报出异常,堆栈提示如下:
index_not_found_exception: no such index [sw_profile_task]
query_shard_exception: No mapping found for [start_time] in order to sort on
这意味着 SkyWalking 尝试查询 sw_profile_task
索引中的 start_time
字段并进行排序,但该字段在当前索引中并不存在,或者索引压根未被创建。
虽然 sw_profile_task
是 SkyWalking 的合法索引之一,但它 不会在 OAP 服务启动时默认创建。该索引属于 Profile 分析功能(性能分析/火焰图),仅在你在 UI 中主动创建一次 Profile 分析任务后,SkyWalking 才会向 ES 写入相关数据并自动创建该索引。
索引名称 | 用途说明 |
---|---|
sw_profile_task |
存储 Profile 分析任务信息 |
sw_profile_snapshot |
存储堆栈快照数据 |
sw_profile_task_log |
存储分析任务的运行日志 |
造成此错误的常见原因如下:
start_time
字段或字段类型错误;action.auto_create_index: false
)。curl -X PUT "http://:9200/sw_profile_task" -H 'Content-Type: application/json' -d '
{
"mappings": {
"properties": {
"service_id": { "type": "keyword" },
"endpoint_name": { "type": "keyword" },
"start_time": { "type": "date" },
"duration": { "type": "long" },
"create_time": { "type": "date" },
"task_id": { "type": "keyword" }
}
}
}'
✅ 如果你不确定具体字段定义,可以先在 UI 上创建一次 Profile 任务,让 SkyWalking 自动创建,再查看其生成的 mapping 格式。
sw_*
索引状态,防止因索引缺失或字段错误造成系统报错;index.templates
以自动规范索引结构,防止字段错乱。本次问题的本质是:SkyWalking 的 Profile 索引 sw_profile_task
并非在系统初始化时自动创建,而是在使用 Profile 功能时才会生成。
我们通过手动创建缺失索引并补全字段映射的方式,成功解决了该异常,系统恢复正常运行。
如果你也遇到类似问题,不妨检查索引状态并参考上述解决方法。