实时通信层基于 Centrifuge 实现 WebSocket 双向通信,所有客户端交互通过 RPC Handler 处理。这些日志覆盖连接管理、RPC 调用链路和 HTTP 请求。
| 事件 | 触发时机 | 关键字段 |
|---|
[Centrifuge] OnConnecting started | 客户端发起连接 | client_id, transport |
[Centrifuge] OnConnecting succeeded | 连接认证成功 | client_id, user_id |
[Centrifuge] JWT verification failed, rejecting connection | JWT 验证失败 | client_id, error |
[Centrifuge] OnConnect started | 连接建立 | client_id |
[Centrifuge] client connected | 客户端连接就绪 | client_id, user_id |
[Centrifuge] OnConnect panic | 连接处理异常 | panic, stack |
CheckOrigin: origin allowed | CORS 检查通过 | origin |
CheckOrigin: origin NOT allowed | CORS 检查拒绝 | origin |
| 事件 | 触发时机 | 关键字段 |
|---|
[RPC] -> | RPC 请求接收 | method, user, device |
[RPC] <- ok | RPC 响应成功 | method, elapsed |
[RPC] <- err | RPC 响应失败 | method, error, elapsed |
[RPC] marshal response failed | RPC 响应序列化失败 | method, error |
RPC handler returned non-API error | RPC 处理器返回非预期错误 | method, error |
| 事件 | 触发时机 | 关键字段 |
|---|
HTTP request | 请求成功(2xx/3xx) | method, path, status, duration, trace_id |
HTTP request client error | 客户端错误(4xx) | method, path, status, duration, trace_id, error_response |
HTTP request failed | 服务端错误(5xx) | method, path, status, duration, trace_id, error_response |
WebSocket upgrade request completed | WebSocket 升级请求 | method, path, duration, trace_id |
| 事件 | 触发时机 | 关键字段 |
|---|
Readyz: DB check failed | 数据库健康检查失败 | error |
Readyz: Redis check failed | Redis 健康检查失败 | error |
Readyz: Centrifuge check failed | Centrifuge 健康检查失败 | error |
Readyz check failed | 整体健康检查失败 | checks |
| 事件 | 触发时机 | 关键字段 |
|---|
authorization_code authentication succeeded | OAuth2 登录成功 | provider, user_id |
refresh_token refresh succeeded | Token 刷新成功 | user_id |
ExchangeCode failed | 授权码交换失败 | provider, error |
findOrCreateUser: concurrent create detected | 并发创建用户冲突(已自动处理) | provider, external_id |
| 事件 | 说明 |
|---|
pubsub message missing meta/data separator | PubSub 消息格式异常 |
pubsub message invalid meta format | 元数据解析失败 |
failed to handle publication for channel | 消息处理失败 |
failed to handle join for channel | Join 事件处理失败 |
failed to handle leave for channel | Leave 事件处理失败 |
| 事件 | 触发时机 | 关键字段 |
|---|
[UpdatePublisher] published update | 更新推送成功 | channel, update_type |
[UpdatePublisher] push failed | 推送失败(数据已提交) | error |
[UpdatePublisher] publish to centrifuge failed | Centrifuge 发布失败 | error |
[UpdatePublisher] saved user_updates | 用户更新持久化 | count |
{service="server"} | json | msg=~"\\[Centrifuge\\] (OnConnecting|OnConnect|client connected|JWT verification failed)"
{service="server"} | json client_id="client_id" | msg=~"\\[Centrifuge\\]" | client_id="client-xyz"
{service="server"} | json | msg="[Centrifuge] JWT verification failed, rejecting connection"
topk(10, count by (user_id) ({service="server"} | json user_id="user_id" | msg="[Centrifuge] client connected"))
{service="server"} | json method="method" | msg=~"\\[RPC\\] (->|<-)" | method="SendMessage"
{service="server"} | json elapsed="elapsed", method="method" | msg="[RPC] <- ok"
{service="server"} | json method="method", error="error" | msg="[RPC] <- err"
count by (method) ({service="server"} | json method="method" | msg="[RPC] <- err")
count by (method) ({service="server"} | json method="method" | msg=~"\\[RPC\\] <- (ok|err)")
{service="server"} | json elapsed="elapsed" | msg="[RPC] <- ok" | elapsed > 1000
{service="server"} | json | msg="HTTP request failed"
{service="server"} | json path="path" | msg=~"HTTP request" | path=~"/api/.*"
{service="server"} | json duration="duration" | msg="HTTP request"
sum by (path) (count_over_time({service="server"} | json path="path" | msg="HTTP request"[1m]))
{service="server"} | json | msg=~"Readyz.*failed"
{service="server"} | json | msg=~"(authorization_code|refresh_token).*succeeded"
{service="server"} | json | msg=~"(ExchangeCode|failed to).*(failed|error)"
{service="server"} | json | msg=~"\\[UpdatePublisher\\].*failed"
{service="server"} | msg=~"pubsub message|failed to handle (publication|join|leave)"
{service="server"} | json origin="origin" | msg="CheckOrigin: origin NOT allowed"
HTTP 日志自动包含 trace_id,可与 Tempo 联动:
{service="server"} | json trace_id="trace_id", path="path" | msg="HTTP request failed" | trace_id="abc123"
HTTP 相关指标通过中间件自动暴露(标准 Go HTTP metrics)。
sum by (status) (rate(http_requests_total[5m]))
histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket[5m])) by (le))
| 告警 | 条件 | 说明 |
|---|
| HTTP 5xx 率过高 | 5xx 请求占比 > 1% | 服务端异常 |
| RPC 错误率过高 | RPC 错误率 > 5% | RPC 处理器异常 |
| 健康检查失败 | Readyz check failed 持续出现 | 依赖服务不可用 |
| WebSocket 认证失败率高 | JWT 验证失败率 > 10% | 可能遭遇攻击或 Token 过期 |