跳转到内容

RTC 与 Turn 执行日志

RTC 是 LLM 调用外部工具的核心机制,每次工具调用创建一个 RTC 实例。Turn 是 Agent 的一次完整执行轮次,可能包含多个 RTC。通过这些日志可以追踪工具执行全链路。

事件触发时机关键字段
[SubmitRtcResult]客户端提交 RTC 执行结果user, rtc, success
[SubmitRtcResult] idempotent repeat重复提交(幂等去重)rtc, status, client_id
[UpdateRtcStatus]RTC 状态变更user, rtc, status
rtcToolBase.rtc_createdRTC 实例创建rtc_id, session_id, turn_id
事件触发时机关键字段
[turnagent] createTurn.createdTurn 创建完成turn_id, session_id, work_kind
[turnagent] createTurn.idempotent_hit幂等创建命中缓存turn_id, session_id
[turnagent] beginTurn.doneTurn 开始执行turn_id, session_id
[turnagent] completeTurn.doneTurn 正常完成turn_id, session_id
[turnagent] cancelTurn.doneTurn 被取消turn_id, session_id
[turnagent] failTurn.doneTurn 执行失败turn_id, session_id
[turnagent] interruptTurn.doneTurn 被中断turn_id, session_id, interrupt_id
[turnagent] resumeTurn.doneTurn 恢复执行turn_id
事件触发时机关键字段
[turnagent] turn.startTurn 开始执行turn_id, session_id, work_kind, work_id
[turnagent] turn.waiting_completionTurn 等待 LLM/RTC 完成turn_id, session_id, work_id
[turnagent] turn.work_completedTurn 工作完成turn_id, session_id, work_id
[turnagent] turn.loop_exitedTurn 循环退出turn_id, session_id, work_kind, exit_reason, has_error
[turnagent] turn.clean_exitTurn 干净退出turn_id, session_id, message
[turnagent] turn.endTurn 结束(最终事件)turn_id, session_id, work_kind, status, duration_ms
[turnagent] interruptTurn 被中断(含原因)turn_id, session_id, interrupt_id, interrupt_count, reason
事件触发时机关键字段
[rtcqueue] worker.received_notificationWorker 收到通知session_id
[rtcqueue] worker.claimingWorker 尝试认领任务session_id, worker_id
[rtcqueue] worker.claimedWorker 认领成功session_id, credential, work_id
[rtcqueue] worker.claim_emptyWorker 认领失败(队列为空)session_id
[rtcqueue] worker.processing_workWorker 开始处理session_id, work_id, hold_lock
[rtcqueue] worker.loaded_workWorker 加载工作数据session_id, work_id
[rtcqueue] worker.calling_onworkWorker 调用处理回调session_id, work_id
[rtcqueue] worker.onwork_returnedWorker 处理完成返回session_id, work_id
[rtcqueue] worker.queue_empty_releasing_lock队列清空,释放 Session 锁session_id
事件触发时机关键字段
[turnagent] tool.call_failed工具调用失败(如被中断)tool_name, session_id, turn_id, error
[turnagent] agent.processAgent 开始处理工作session_id, work_id, kind (submit/resume)
事件触发时机关键字段
[resumeTurnAfterRtc] entryRTC 完成后尝试恢复 Turnrtc, turn, remaining
[resumeTurnAfterRtc] batch progress批量恢复进度rtc, turn, remaining
[resumeTurnAfterRtc] batch item批量恢复单项rtc_id, interrupt_id, result_len
[resumeTurnAfterRtc] batch complete, resuming turn批量恢复完成,恢复 Turnturn, session, batch_size
[resumeTurnAfterRtc] resume published恢复事件已发布到队列rtc, session, turn, batch_size
[resumeTurnAfterRtc] skip: session closed跳过恢复(Session 已关闭)rtc, session
[resumeTurnAfterRtc] orphan submit published孤儿 RTC 提交已发布rtc, session
事件触发时机关键字段
[StopActiveTurns] cancelled turns批量取消活跃 Turnsession, count
{service="server"} | json rtc="rtc", rtc_id="rtc_id" | msg=~"\\[SubmitRtcResult\\]|\\[UpdateRtcStatus\\]|rtcToolBase\\.rtc_created|\\[resumeTurnAfterRtc\\]" | rtc_id="rtc-123"
{service="server"} | json | msg="rtcToolBase.rtc_created"
{service="server"} | json | msg="[SubmitRtcResult]" | json success="success" | success="false"

查看重复提交(可能表示客户端重试问题)

Section titled “查看重复提交(可能表示客户端重试问题)”
{service="server"} | json | msg="[SubmitRtcResult] idempotent repeat"
{service="server"} | json turn_id="turn_id", session_id="session_id" | msg=~"\\[turnagent\\] (create|begin|complete|cancel|fail|interrupt|resume)Turn" | turn_id="turn-456"
{service="server"} | json | msg="[turnagent] failTurn.done"
{service="server"} | json | msg="[turnagent] interruptTurn.done"

查看 Turn 执行速率(按类型和状态)

Section titled “查看 Turn 执行速率(按类型和状态)”
sum by (work_kind, status) (rate(rtc_turn_total[5m]))
histogram_quantile(0.95, sum(rate(rtc_turn_duration_seconds_bucket[5m])) by (le, work_kind))

排查 Turn 恢复异常(有 entry 但无完成)

Section titled “排查 Turn 恢复异常(有 entry 但无完成)”
{service="server"} | json | msg=~"\\[resumeTurnAfterRtc\\] (entry|batch complete|skip|orphan)"

按 rtc 字段排序,如果有 entry 但没有对应的完成事件,说明恢复流程异常。

{service="server"} | json | msg=~"\\[resumeTurnAfterRtc\\].*(failed|error)"
{service="server"} | json session="session", count="count" | msg="[StopActiveTurns] cancelled turns"

查看特定 Session 的所有 Turn 活动

Section titled “查看特定 Session 的所有 Turn 活动”
{service="server"} | json session_id="session_id", session="session" | msg=~"\\[turnagent\\]|\\[StopActiveTurns\\]|\\[resumeTurnAfterRtc\\]|\\[rtcqueue\\]" | session_id="session-abc"
{service="server"} | json turn_id="turn_id" | msg=~"\\[turnagent\\] turn\\.(start|waiting_completion|work_completed|loop_exited|clean_exit|end)" | turn_id="turn-456"
{service="server"} | json turn_id="turn_id", status="status", duration_ms="duration_ms", work_kind="work_kind" | msg="[turnagent] turn.end"
{service="server"} | json turn_id="turn_id", exit_reason="exit_reason", has_error="has_error" | msg="[turnagent] turn.loop_exited"
{service="server"} | json has_error="has_error" | msg="[turnagent] turn.loop_exited" | has_error="true"
{service="server"} | json session_id="session_id", work_id="work_id" | msg=~"\\[rtcqueue\\] worker\\.(claiming|claimed|claim_empty|processing_work|onwork_returned)"

查看队列为空(无任务可处理)

Section titled “查看队列为空(无任务可处理)”
{service="server"} | json session_id="session_id" | msg="[rtcqueue] worker.claim_empty"
{service="server"} | json tool_name="tool_name", error="error", session_id="session_id" | msg="[turnagent] tool.call_failed"
{service="server"} | json turn_id="turn_id", interrupt_id="interrupt_id", reason="reason", interrupt_count="interrupt_count" | msg="[turnagent] interrupt"
{service="server"} | json session_id="session_id", work_id="work_id", kind="kind" | msg="[turnagent] agent.process"
指标类型Labels用途
rtc_turn_totalCounterwork_kind, statusTurn 总数统计
rtc_turn_duration_secondsHistogramwork_kind, statusTurn 执行耗时
rtc_stale_turns_recovered_totalCounterstatus过期 Turn 恢复统计
# Turn 成功/失败速率
sum by (status) (rate(rtc_turn_total[5m]))
# Turn 执行延迟 P50 / P95 / P99
histogram_quantile(0.50, sum(rate(rtc_turn_duration_seconds_bucket[5m])) by (le))
histogram_quantile(0.95, sum(rate(rtc_turn_duration_seconds_bucket[5m])) by (le))
histogram_quantile(0.99, sum(rate(rtc_turn_duration_seconds_bucket[5m])) by (le))
# 每分钟恢复的过期 Turn 数
sum(rate(rtc_stale_turns_recovered_total[5m])) by (status)
告警条件说明
Turn 失败率过高rate(rtc_turn_total{status="failed"}[5m]) / rate(rtc_turn_total[5m]) > 0.1超过 10% 的 Turn 执行失败
Turn 延迟过高histogram_quantile(0.95, ...) > 60P95 延迟超过 60 秒
过期 Turn 恢复频繁rate(rtc_stale_turns_recovered_total[5m]) > 0.5每分钟恢复超过 30 个过期 Turn