社区 topic/1057715 分析报告 — Dashboard 日志搜索 CANCELLED
社区问题:dashboard日志搜索所有tikv节点的日志
版本:v8.5.3 | 客户:社区用户 | 现象:Dashboard 日志搜索搜不到 tikv(10.0.1.228:20160) 的日志,PD 报 LogSearchTask stopped with error... rpc error: code = Canceled desc = CANCELLED
1. 问题澄清
Dashboard log search 搜不到特定 TiKV 节点日志,PD 日志同时出现两类告警:
LogSearchTask { id=116, target=tikv(10.0.1.228:20160) }→rpc error: code = Canceled desc = CANCELLEDSendRequest failedfor/pd/api/v2/ms/members/tso和/pd/api/v2/ms/members/scheduling
2. 核心结论
LogSearchTask 调用链是 Dashboard → TiKV 直连 gRPC(diagnosticspb.SearchLog),完全不经过 PD,代码层面没有 timeout 设置(只有 context.WithCancel)。
CANCELLED 的触发条件只有三条路径:
- 用户在 UI 上主动停止搜索 →
AsyncAbort→t.cancel()→ gRPC client 发 CANCELLED - Dashboard 进程重启(lifecycleCtx 关闭)→ 所有 in-flight task 全部 cancel
- 该 TiKV 节点 gRPC 响应慢/卡顿(大日志文件、debugger 线程卡住、OOM/GC)→ client keepalive 触发或连接中断
PD 报的 /tso /scheduling API 失败是 PD microservice 内部通信异常,与 log search 无直接因果(两条独立故障线,可能共享同一网络/资源根因)。
3. 依据
| 依据 | 来源 |
|---|---|
task.go:173-184 — Dashboard 直接 grpc.Dial TiKV 并调用 diagnosticspb.SearchLog,不经过 PD |
@tidb源码解读 源码分析 |
task.go:53 — task ctx 用 context.WithCancel,无 WithTimeout/WithDeadline,代码中没有任何 timeout |
@tidb源码解读 源码分析 |
task.go:264,275 — 日志时间戳由 TiKV 写日志时本地填(LogMessage.Time),不查 PD/TSO |
@tidb源码解读 源码分析 |
| TICKET-xxx v6.5.1 — TiKV debugger 线程卡住导致单节点 RPC 失败(与本案单节点 + 大文件高度相似) | @wiki_ticket KB 反查 |
TICKET-xxx v6.5.10 + tikv/pd#9743 — Dashboard 嵌入 PD 时默认 temp-dir="",大日志搜索可写满 /tmp |
@wiki_ticket KB 反查 |
PD microservice /pd/api/v2/ms/members/* 失败 — 与 log search 无调用链关系,但反映集群 PD 层有独立问题 |
@ticket-analysis 运维分析(已修正因果链) |
4. 对客回复建议
Dashboard 日志搜索是 Dashboard 直接调用 TiKV 的
diagnostics.SearchLoggRPC 接口,不经过 PD,代码层面没有超时设置。您看到的rpc error: code = Canceled desc = CANCELLED通常来自以下原因:
- Dashboard 进程是否有过重启 — 重启会关闭所有正在进行的搜索任务
- 该 TiKV 节点(10.0.1.228)是否有资源压力 — debugger 线程卡住、CPU/IO 高、GC 等会导致 gRPC 响应慢,触发连接断开
- PD 节点
/tmp是否写满 — Dashboard 嵌入 PD 运行时,搜索产生的临时文件默认写在/tmp,可导致异常PD 报的
/tso/schedulingAPI 失败是 PD microservice 内部问题,与日志搜索失败是两条独立的故障线,但可能存在共享的网络或资源根因。建议排查步骤:
- 查看 Dashboard 日志中是否有
Scheduler abort task group或进程重启记录- 在 tikv(10.0.1.228) 上执行
top -H -p <tikv-pid>看 debugger 线程状态- 在 PD 节点上执行
df -h /tmp和ls /tmp/dashboard-log*检查磁盘- 缩小搜索时间范围重试,排除大文件超时因素
5. 确认方法
- Dashboard 日志 grep
Scheduler abort task group/lifecycle→ 确认是否人为取消或进程重启 - tikv(10.0.1.228) 同时间
top -H+ tikv.log 中 diagnostics 相关报错 → 确认 TiKV 端是否卡顿 df -h /tmp+ls /tmp/dashboard-log*→ 确认是否空间问题- 缩时间范围搜索验证 → 排除大文件因素
分析基于 @tidb源码解读(task.go 源码链路)、@wiki_ticket(TICKET-1854/6620/6216 KB 反查)、@ticket-analysis(PD microservice 运维诊断)三方汇总。