跳转到内容

会话生命周期日志

Session 是最核心的业务实体,每次状态变更都会产生结构化日志。通过这些日志可以追踪完整的会话生命周期。

事件触发时机关键字段
[OpenSession]新 Session 创建user, session
[OpenSession] session not closed, skipping尝试打开已有未关闭的 Sessionsession, status
[CloseSession]Session 关闭user, session
[CloseSession] session already closed重复关闭已关闭的 Sessionsession
[UpdateSession]Session 属性更新user, session
[CompactSession]触发上下文压缩user, session
[CompactSession] enqueued压缩任务入队session, has_custom_instruction
[ForkSession] startSession 分叉开始user, old_session, old_message, limit
事件触发时机关键字段
[SendMessage]用户发送消息user, device, content_len, session_id, client_id
[StopTurn]用户中断 Turnuser, session
[GetSession]查询 Session 详情user, session
[ListSessions]列出 Session 列表user, count, has_next
[MessageList]查询消息列表user, session, count, has_next

查看特定用户的所有 Session 操作

Section titled “查看特定用户的所有 Session 操作”
{service="server"} | json user="user" | msg=~"\\[(Open|Close|Update|Compact|Fork)Session\\]" | user="user-123"

追踪某个 Session 的完整生命周期

Section titled “追踪某个 Session 的完整生命周期”
{service="server"} | json session="session", session_id="session_id" | msg=~"\\[(Open|Close|Update|Compact|Fork)Session\\]|\\[SendMessage\\]|\\[StopTurn\\]" | session="abc-def-123"
{service="server"} | json | msg="[CloseSession]"
sum(count_over_time({service="server"} | json | msg="[SendMessage]"[1m]))
topk(10, count by (user) ({service="server"} | json user="user" | msg="[SendMessage]"))
{service="server"} | json | msg=~"\\[SendMessage\\].*failed"
{service="server"} | json session="session" | msg=~"\\[CompactSession\\]"
{service="server"} | json | msg=~"\\[ForkSession\\]"

查找重复关闭 Session 的异常情况

Section titled “查找重复关闭 Session 的异常情况”
{service="server"} | json session="session" | msg="[CloseSession] session already closed"

提取 content_len 字段,观察消息大小:

{service="server"} | json content_len="content_len" | msg="[SendMessage]"

排查 Session 打开失败(已有未关闭 Session)

Section titled “排查 Session 打开失败(已有未关闭 Session)”
{service="server"} | json session="session", status="status" | msg="[OpenSession] session not closed, skipping"

每条日志都自动包含 trace_id,可以跨服务追踪:

{service="server"} | json trace_id="trace_id", session_id="session_id" | msg="[SendMessage]" | session_id="abc-def-123"

拿到 trace_id 后在 Grafana Tempo 中查看完整调用链。

Session 相关操作通过 RPC 中间件自动记录:

指标说明
rtc_turn_total按 work_kind 和 status 统计的 Turn 总数
rtc_turn_duration_secondsTurn 执行耗时分布
# 每分钟 Session 消息发送速率
sum(rate(rtc_turn_total[5m])) by (status)
# Turn 执行延迟 P95
histogram_quantile(0.95, sum(rate(rtc_turn_duration_seconds_bucket[5m])) by (le))