RPC 系列(三十):用 rpcz 观测 RPC

用户能通过 /rpcz 看到最近请求的详细信息,并可以插入注释(annotation)。不同于 tracing system(如 Dapper)以全局视角看到整体系统的延时分布,rpcz 更多是一个调试工具。虽然角色有所不同,但在 brpc 中 rpcz 和 tracing 的数据来源是一样的。当每秒请求数小于 1 万时,rpcz 会记录所有的请求;超过 1 万时,rpcz 会随机忽略一些请求,把采样数控制在 1 万左右。rpcz 可以淘汰时间窗口之前的数据,通过 -rpcz_keep_span_seconds 选项设置,默认 1 小时。

提示:关于开销——rpcz 的实现完全规避了线程竞争,开销极小。在 qps 30 万的测试场景中,观察不到明显的性能变化,对大部分应用而言应该是”free”的。即使采集了几千万条请求,rpcz 也不会增加很多内存,一般在 50 兆以内。rpcz 会占用一些磁盘空间(就像日志一样),如果设定为存一个小时的数据,一般在几百兆左右。

开启 rpcz

rpcz 默认不开启,加入 -enable_rpcz 选项会在启动后开启。

相关的 flags 如下:

Name Value Description Defined At
enable_rpcz (R) true (default:false) Turn on rpcz src/baidu/rpc/builtin/rpcz_service.cpp
rpcz_hex_log_id (R) false Show log_id in hexadecimal src/baidu/rpc/builtin/rpcz_service.cpp
rpcz_database_dir ./rpc_data/rpcz For storing requests/contexts collected by rpcz. src/baidu/rpc/span.cpp
rpcz_keep_span_db false Don’t remove DB of rpcz at program’s exit src/baidu/rpc/span.cpp
rpcz_keep_span_seconds (R) 3600 Keep spans for at most so many seconds src/baidu/rpc/span.cpp

若启动时未加 -enable_rpcz,则可在启动后访问 SERVER_URL/rpcz/enable 动态开启 rpcz,访问 SERVER_URL/rpcz/disable 则关闭。这两个链接等价于访问 SERVER_URL/flags/enable_rpcz?setvalue=true 和 SERVER_URL/flags/enable_rpcz?setvalue=false。在 r31010 之后,rpcz 的 html 版本中增加了一个按钮,可视化地开启和关闭:

rpcz 页面未开启时显示 enable 按钮

rpcz 开启后显示 disable 按钮及最近请求列表

提示:如果你的程序只是一个 brpc client 或没有使用 brpc,也可以启动 dummy server 来提供同样的内置服务页面。

两层展现

/rpcz 展现的数据分为两层。

第一层展现最新请求的概况,点击链接进入第二层:

rpcz 第一层:最近请求的概况列表,包含开始时间、延时、trace 与 span 链接

第二层展现某系列(trace)或某个请求(span)的详细信息。一般通过点击第一层中的链接进入,也可以把 trace= 和 span= 作为 query-string 拼出链接:

rpcz 第二层:一个 trace 中各 span 的详细时间流,显示每个阶段发生的时间与耗时

使用 TRACEPRINTF 打印注释

只要你使用了 brpc,就可以使用 TRACEPRINTF 打印内容到事件流中,比如:

TRACEPRINTF("Hello rpcz %d", 123);

这条 annotation 会按其发生时间插入到对应请求的 rpcz 中。从这个角度看,rpcz 是请求级的日志。如果你用 TRACEPRINTF 打印了沿路的上下文,便可看到请求在每个阶段停留的时间、牵涉到的数据集和参数,这是个很有用的功能。

系列导航


   转载规则


《RPC 系列(三十):用 rpcz 观测 RPC》 由 吴杭沉 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
RPC 系列(三十一):bvar 与性能指标 RPC 系列(三十一):bvar 与性能指标
bvar 是多线程环境下的计数器类库,方便记录和查看用户程序中的各类数值。它利用了 thread local 存储减少了 cache bouncing,相比 UbMonitor(百度内的老计数器库)几乎不会给程序增加性能开销,也快于竞争频繁
2024-04-02
下一篇 
RPC 系列(二十九):brpc 的 gflags 配置 RPC 系列(二十九):brpc 的 gflags 配置
brpc 使用 gflags 管理配置。如果你的程序也使用 gflags,那么你应该已经可以修改和 brpc 相关的 flags,你可以浏览 flags 服务了解每个 flag 的具体功能。如果你的程序还没有使用 gflags,我们建议你使
2024-03-19
  目录