openYuanrong datasystem 日志

日志类别

openYuanrong datasystem 的日志分为以下类型:

  1. 运行日志:记录客户端、服务端运行时的日志信息,包括 INFO、WARNING、ERROR、FATAL;更细粒度调试可通过 VLOG 与 gflags(如 --v)控制。

  2. 访问日志:记录每一次访问客户端/服务端的请求,每个请求一条日志,用于定界上游是否访问客户端/服务端(需开启 log_monitor)。

  3. 请求第三方日志(request_out):记录 Worker 访问第三方组件的请求,每个请求一条日志,可用于定界 openYuanrong datasystem 是否成功访问该外部组件;当前实现中 主要接入 ETCD gRPC(需开启 log_monitor)。

  4. 资源日志:定时输出 Worker 运行时关键资源信息,包括共享内存、Spill 磁盘、线程池、队列、流缓存相关统计等(需 log_monitorlog_monitor_exporter=harddisk)。

  5. 流缓存指标日志(sc_metrics):流缓存运行数据(需开启 log_monitor)。

  6. 容器/进程相关日志:容器运行日志,管理和监控worker进程的生命周期。

  7. 操作审计日志(operation):记录进程启动/停止、配置初始化及运行时动态配置变更(UpdateConfig API 或 monitor_config_file 热更新),便于运维追溯配置操作历史。

  8. 资源快照日志(kv_resource)resource.log 同源字段的 JSON-Lines 快照,每行一个完整 JSON 对象,顶层含 pod_name/cluster_namemetrics 为按 resource_json_schema 配置的 metric 组及子字段(需 json_log_monitorlog_monitor_exporter=harddisk;与 resource.log 复用同一采集线程和周期,写入由 json_log_monitor 独立控制)。

  9. 指标摘要日志(kv_metrics)datasystem_worker.INFO.logmetrics_summary 摘要的 JSON-Lines 并行输出,每行一个完整 JSON 对象,顶层含 pod_name/cluster_name,body 与 INFO.log 逐字一致(需 json_log_monitor;INFO.log 原 metrics_summary 仍由 log_monitor 控制)。

日志目录一般为配置项 log_dir(如部署下的 yr_datasystem/logs);下文 /path/yr_datasystem/logs 表示该目录。

不同模块日志文件

序号

模块

日志路径及文件名

含义、用途

1

datasystem_worker

/path/yr_datasystem/logs/{log_filename}.INFO.log(及 .WARNING.ERROR 等轮转文件)

Worker 运行日志;log_filename 由部署配置决定,示例常为 datasystem_worker

2

datasystem_worker

/path/yr_datasystem/logs/access.log

访问 Worker POSIX 等接口的日志

3

datasystem_worker

/path/yr_datasystem/logs/resource.log

Worker 资源使用日志;默认关闭,由 log_monitor 控制

4

datasystem_worker

/path/yr_datasystem/logs/request_out.log

访问第三方(当前主要为 ETCD)接口日志

5

datasystem_worker

/path/yr_datasystem/logs/sc_metrics.log

流缓存运行数据;由 log_monitor 控制是否开启

6

datasystem_worker

/path/yr_datasystem/logs/container.log

容器运行日志,管理和监控worker进程的生命周期

7

datasystem_worker

/path/yr_datasystem/logs/{log_filename}_operation.log

操作审计日志;记录 Init/Shutdown、配置初始化快照及运行时 flag 变更(UpdateConfig 或配置文件热更新)

8

datasystem_worker

/path/yr_datasystem/logs/kv_resource.log

资源快照 JSON-Lines;resource.log 同源字段的纯 JSON 输出,顶层 pod_name/cluster_namemetrics 按 schema 输出已配置的 metric 组;由 json_log_monitorlog_monitor_exporter=harddisk 控制

9

datasystem_worker

/path/yr_datasystem/logs/kv_metrics.log

指标摘要 JSON-Lines;INFO.log 中 metrics_summary 的并行输出,body 逐字一致,额外前置 pod_name/cluster_name;由 json_log_monitor 控制(INFO.log 原输出仍由 log_monitor 控制)

10

Client

/path/client/ds_client.INFO.log(及 .WARNING.ERROR 等;关闭 DATASYSTEM_CLIENT_LOG_WITHOUT_PID 后恢复为 /path/client/ds_client_{pid}.INFO.log

SDK 运行日志;基名可由启动参数与环境变量 DATASYSTEM_CLIENT_LOG_NAME 覆盖

11

Client

/path/client/ds_client_operation.log(关闭 DATASYSTEM_CLIENT_LOG_WITHOUT_PID 后恢复为 /path/client/ds_client_{pid}_operation.log

Client 操作审计日志;记录 Init/Shutdown 及 UpdateConfig 动态配置变更

12

Client

/path/client/ds_client_access.log(关闭 DATASYSTEM_CLIENT_LOG_WITHOUT_PID 后恢复为 /path/client/ds_client_access_{pid}.log

SDK 接口访问日志;基名可由 DATASYSTEM_CLIENT_ACCESS_LOG_NAME 覆盖


日志格式

格式总览

序号

日志

日志格式

1

运行日志

Time | level | filename | pod_name | pid:tid | trace_id | cluster_name | message

2

访问日志

Time | level | filename | pod_name | pid:tid | trace_id | cluster_name | status_code | action | cost | data size | request param| response param

3

访问第三方日志

Time | level | filename | pod_name | pid:tid | trace_id | cluster_name | status_code | action | cost | data size | request param| response param

4

资源日志

Time | level | filename | pod_name | pid:tid | trace_id | cluster_name | shm info | spill disk info | client nums | object nums | object total datasize | WorkerOcService threadpool | WorkerWorkerOcService threadpool | MasterWorkerOcService threadpool | MasterOcService threadpool | write ETCD queue | ETCDrequest success rate | OBSrequest success rate | Master AsyncTask threadpool | stream nums | ClientWorkerSCService threadpool | WorkerWorkerSCService threadpool | MasterWorkerSCService threadpool | MasterSCService threadpool | remote stream push success rate | shared disk info | scLocalCache info | Cache Hit Info

5

流缓存数据日志

Time | level | filename | pod_name | pid:tid | trace_id | cluster_name | sc_metric

6

容器运行日志

Time | level | filename | pod_name | pid:tid | trace_id | cluster_name | message

7

操作审计日志

Time | level | filename | pod_name | pid:tid | trace_id | cluster_name | operation message

8

资源快照日志(kv_resource)

纯 JSON 单行:pod_namecluster_nameeventversionmetrics(无文本前缀)

9

指标摘要日志(kv_metrics)

纯 JSON 单行:pod_namecluster_nameeventversioncycleinterval_mspart_indexpart_countmetrics(无文本前缀)

日志字段

字段

长度 Byte

描述

time

26

ISO8601格式的时间戳,示例: 2023-06-02T14:58:32.081156

level

1

日志级别 (debug, info, warn等)

filename

128

输出该条日志的函数所在文件及行号,最大长度128Byte,超出则截断。示例:oc_metadata_manager.cpp:733

pod_name

128

输出当前worker所属的POD名称,超出长度则截断。示例:ds-worker-hs5qm

pid:tid

11

该日志所属的进程ID和线程ID。进程号最大值为32757,该字段最大长度11.示例:9:177

trace_id

36

请求的trace_id

cluster_name

128

输出日志的组件名,最大长度为128,超出长度则截断。示例:ds-worker

Message

1024

自定义消息内容

status_code

5

该请求的状态,不同消息类型状态值不一样。SDK/datasystem_worker 访问日志,0表示成功,其他表示失败

action

64

表示该请求所访问的接口名称。约定前缀:SDK接口:DS_KV_CLIENT、DS_OBJECT_CLIENT,Worker接口:DS_OBJECT_POSIX,ETCD:DS_ETCD,HTTP请求:POST {url path}

cost

16

记录该请求所花费的时间。单位:us

datasize

16

记录Publish请求接收到的Payload大小

request param

2560

记录该请求的关键请求参数,最大长度2048。请参考“关键请求参数”表格

response param

1024

记录该请求的响应信息。最大长度为1024 Byte,超出则截断

shm info

47

记录共享内存使用信息,单位为Byte,按照1T限制大小,每个长度 13 Byte,格式为:memoryUsage/physicalMemoryUsage/totalLimit/rate/scMemoryUsage/scMemoryLimit
1) memoryUsage 已分配的内存大小,是已缓存的对象大小总和。注意:由于系统中使用jemalloc管理内存,实际分配的内存会按size class对齐,因此memoryUsage通常比实际对象大小的总和高一些,包含一定的内存对齐开销。
2) physicalMemoryUsage 已分配的物理内存大小。
3) totalLimit 共享内存总大小。
4) Rate 共享内存使用率,memoryUsage/totalLimit, 保留3位有效数字,单位: %
5) scMemoryUsage 流缓存共享内存使用大小,单位:byte
6) scMemoryLimit 流缓存的共享内存限制,单位:byte

spill disk info

47

记录Spill磁盘使用信息。单位为Byte,按照1T限制大小,每个长度 13 Byte,格式为:spaceUsage/physicalSpaceUsage/totalLimit/rate
1) spaceUsage 已使用的磁盘大小,是已Spill的对象大小总和。
2) physicalSpaceUsage 已使用的物理磁盘大小。
3) totalLimit Spill磁盘总大小。
4) Rate Spill磁盘使用率,spaceUsage /totalLimit, 保留3位有效数字,单位: %

client nums

5

记录已和worker成功建立连接的Client数。最大值为10000

object nums

9

记录worker已缓存对象数。按照1亿对象限制数量

object total datasize

13

记录worker已缓存对象的大小。按照1T限制大小,长度 13 Byte

WorkerOcService threadpool

21

WorkerOcService threadpool使用信息,线程数限制最大128;格式为:idleNum/currentTotalNum/MaxThreadNum/waitingTaskNum/rate
1) idleNum 空闲线程数;
2) currentTotalNum 当前正在运行任务的线程数;
3) MaxThreadNum threadpool最大可申请的线程数;
4) waitingTaskNum 正在等待的任务数。
5) rate 线程利用率,currentTotalNum/ MaxThreadNum,单位:%,保留3位有效数字

WorkerWorkerOcService threadpool

21

threadpool使用信息

MasterWorkerOcService threadpool

21

threadpool使用信息

MasterOcService threadpool

21

threadpool使用信息

write ETCD queue

15

队列使用信息

ETCDrequest success rate

6

请求成功率,单位 %,保留3位有效数字

OBSrequest success rate

6

请求成功率,单位 %,保留3位有效数字

Master AsyncTask threadpool

21

threadpool使用信息,格式为:idleNum/currentTotalNum/MaxThreadNum/waitingTaskNum/rate

stream nums

9

记录本节点流的个数。本节点上的流:在本节点存在producer或者consumer

ClientWorkerSCService threadpool

21

线程池使用信息,格式为:idleNum/currentTotalNum/MaxThreadNum/waitingTaskNum/rate

WorkerWorkerSCService threadpool

21

线程池使用信息,格式为:idleNum/currentTotalNum/MaxThreadNum/waitingTaskNum/rate

MasterWorkerSCService threadpool

21

线程池使用信息,格式为:idleNum/currentTotalNum/MaxThreadNum/waitingTaskNum/rate

MasterSCService threadpool

21

线程池使用信息,格式为:idleNum/currentTotalNum/MaxThreadNum/waitingTaskNum/rate

remote stream push success rate

6

请求成功率,单位 %,保留3位有效数字

shared disk info

47

记录共享磁盘使用信息,单位为Byte,按照1T限制大小,每个长度 13 Byte,格式为:usage/physicaleUsage/totalLimit/rate
1) usage 已使用的磁盘大小,是已缓存的对象大小总和
2) physicaleUsage 已使用的物理磁盘大小
3) totalLimit 共享磁盘总大小
4) rate 共享磁盘使用率,usage/totalLimit, 保留3位有效数字,单位: %

scLocalCache info

47

记录scLocalCache使用信息,单位为Byte,按照1T限制大小,每个长度 13 Byte,格式为:usedSize/reservedSize/totalLimit/usedRate

Cache Hit Info

9

缓存命中统计,格式为:memHitNum/diskHitNum/l2HitNum/remoteHitNum/missNum,
1) memHitNum 本地内存命中次数。
2) diskHitNum 本地磁盘命中次数.
3) l2HitNum 二级缓存命中次数。
4) remoteHitNum 远端worker命中次数。
5) missNum 未命中次数。

sc_metric

1024

流缓存运行数据(sc_stream_metric)。worker上一个stream的的流缓存数据,格式:streamName [“exit”]/numLocalProd/numRemoteProd/numLocalCon/numRemoteCon/sharedMemUsed/localMemUsed/numEleSent/numEleRecv/numEleAck/numSendReq/numRecvReq/numPagesCreated/numPagesReleased/numPagesInUse/numPagesCached/numBigPagesCreated/numBigPagesReleased/numLocalProdBlocked/numRemoteProdBlocked/numRemoteConBlocking/retainData/streamState/numProdMaster/numConMaster
1) streamName [“exit”] stream名字,带有” exit”表示stream正要关闭
2) numLocalProd 本地producer数量
3) numRemoteProd - Number of remote workers with atleast one producewill be 0, if no local consumers)
4) numLocalCon 本地consumer数量
5) numRemoteCon 远端consumer数量
6) sharedMemUsed stream使用共享内存大小,单位: Byte
7) localMemUsed stream使用本地内存大小,单位: Byte
8) numEleSent - Total number of elements produced by all local producers
9) numEleRecv - Total number of elements received by all local consumers (value will be 0, if no local consumers)
10) numEleAck element acked数量
11) numSendReq client调用producer.send()次数
12) numRecvReq client调用consumer.receive()次数
13) numPagesCreated page创建次数
14) numPagesReleased page释放次数
15) numPagesInUse page in use数量
16) numPagesCached page cached数量
17) numBigPagesCreated big element page创建次数
18) numBigPagesReleased big element page释放次数
19) numLocalProdBlocked 本地producer blocked数量
20) numRemoteProdBlocked 远端producer blocked数量
21) numRemoteConBlocking 远端consumer blocking数量
22) retainData retain data state
23) streamState stream state
24) numProdMaster master上producer数量
25) numConMaster master上consumer数量
- 如果worker不是stream的master,24-25会没有数据。如果worker只有master数据,2-23会没有据

SDK 与 Worker 访问日志关键请求参数

关键请求参数

长度 Byte

描述

Object_key

255

对象的ID。长度:255Byte;

object_keys

1024

多个对象 KEY。单个 Item 最长 255 Byte,展示总长上限约 1KB;超出时仅显示总数等缩写。示例 JSON:{"object_keys":["id1xx","id2xx","id3xx","id4xx"],"total":100}

Nested_keys

1024

嵌套引用的对象KEY。单个Item长度:255Byte,全部长度:1KB;

keep

1

是否手动管理对象生命周期。取值:true/false, 长度:5Byte

Write_mode

1

写数据的模式,影响数据可靠性。取值:int32

consistency_type

1

数据一致性模式。取值:uint32

is_seal

1

数据是否不可修改。取值:0/1, 0表示false

is_retry

1

是否为重试场景。取值:0/1

ttl_second

32

TTL时间配置。取值:uint32

existence

1

配置Key存在时是否允许继续操作,默认允许。取值:int

sub_timeout

32

Get请求订阅时间。取值:int64

timeout

32

接口超时时间。取值:int32

访问第三方日志关键请求参数

外部组件

请求类型

关键请求参数

描述

ETCD

GRPC

key

将Key字段获取并打印。

操作审计日志消息类型

操作审计日志与运行日志共用 spdlog 文本前缀(见「格式总览」第 7 行),operation message 为审计正文。Worker 与 Client 在 Init 成功时自动创建 {log_filename}_operation.log / ds_client_operation.log,无需额外开关。

消息前缀

触发时机

正文格式与说明

OPERATION_START

进程 Init 成功

OPERATION_START: role={worker|client}

OPERATION_STOP

进程 Shutdown

OPERATION_STOP: role={worker|client}

CONFIG_INIT

配置初始化完成

CONFIG_INIT: 后接多行 gflags 快照(--flag=value 每行一项);敏感项见下表,值替换为 xxx

CONFIG_INIT_FAILED

配置初始化失败

CONFIG_INIT_FAILED: {detail}

CONFIG_CHANGED

UpdateConfig API 或 monitor_config_file 热更新成功

CONFIG_CHANGED: {name}={old} --> {new};敏感 flag 的 old/new 均为 xxx

CONFIG_FAILED

动态配置变更失败

CONFIG_FAILED: flag '{name}' {reason}

敏感 flag(审计日志中值一律脱敏为 xxxsystem_access_keysystem_secret_keysystem_data_keysc_encrypt_secret_keytenant_access_keytenant_secret_keyobs_access_keyobs_secret_keyetcd_passwordetcd_keyyuanrong_iam_passphraseyuanrong_iam_key

资源快照日志(kv_resource.log)字段

每行一个完整 JSON 对象,不含 time / level / file / pid:tid / trace_id 等文本前缀;采集周期与 resource.log 相同(log_monitor_interval_ms,默认 10s)。与 resource.log 共用同一次 handler 调用,避免区间计数器被重复清零。

行结构(顶层字段)

字段

类型

描述

pod_name

string

当前 Worker Pod 标识(GetPodIdentifier()

cluster_name

string

集群名(FLAGS_cluster_name

event

string

固定为 resource_snapshot

version

string

schema 版本,当前为 v0

metrics

object

资源 metric 组,键为 snake_case 组名,值为对象或标量

metrics 内已输出的 metric 组(与 resource.log 管道字段同源;未列出的组仅出现在文本 resource.log 中,JSON 行内省略整组):

JSON 组名

子字段(snake_case)

对应 resource.log 语义

shared_memory

memory_usagephysical_memory_usagetotal_limitworker_share_memory_usage

共享内存使用(Byte / %);不含 sc_memory_usage / sc_memory_limit

spill_hard_disk

space_usagephysical_space_usagetotal_limitworker_spill_hard_disk_usage

Spill 磁盘使用

active_client_count

(标量)

已连接 Client 数

object_count

(标量)

缓存对象数

object_size

(标量)

缓存对象总大小(Byte)

worker_oc_service_thread_pool 等 4 个 OC 线程池组

idle_numcurrent_total_nummax_thread_numwaiting_task_numthread_pool_usage

线程池状态;语义与「日志字段」表中 threadpool 五元组一致

etcd_queue

current_sizetotal_limitetcd_queue_usage

ETCD 写队列

etcd_request_success_rate

(标量)

ETCD 请求成功率(%)

master_async_tasks_thread_pool

同线程池五元组

Master 异步任务线程池

oc_hit_num

mem_hit_numdisk_hit_numl2_hit_numremote_hit_nummiss_num

缓存命中统计

运维约定

  • handler 返回空串、未注册或 token 数与 schema 不符时,该组输出全 0 结构(单字段组为 0),保证每行 group key 稳定;成功率类字段为 0 常表示「本周期无样本」而非必然失败。

  • 字段映射真源:resource_json_schema(与 res_metrics.def 对齐)。

行样例

{
	"pod_name": "ds-worker-hs5qm",
	"cluster_name": "recs",
	"event": "resource_snapshot",
	"version": "v0",
	"metrics": {
		"shared_memory": {
			"memory_usage": 73814,
			"physical_memory_usage": 80000,
			"total_limit": 1073741824,
			"worker_share_memory_usage": 0.069
		},
		"active_client_count": 3,
		"worker_oc_service_thread_pool": {
			"idle_num": 3,
			"current_total_num": 4,
			"max_thread_num": 8,
			"waiting_task_num": 0,
			"thread_pool_usage": 0.030
		}
	}
}

指标摘要日志(kv_metrics.log)字段

每行一个完整 JSON 对象,body 与 datasystem_worker.INFO.log 中同周期 metrics_summary 逐字一致,仅在行首额外插入 JSON 转义后的 pod_namecluster_name。摘要由 metrics::Ticklog_monitor_interval_ms 周期输出,关停时另有一次 PrintSummary

行结构(顶层字段)

字段

类型

描述

pod_name

string

当前 Worker Pod 标识

cluster_name

string

集群名

event

string

固定为 metrics_summary

version

string

当前为 v0

cycle

uint64

摘要周期序号,单调递增

interval_ms

int

本摘要覆盖的采集间隔(毫秒),与 log_monitor_interval_ms 一致

part_index

int

分片序号(从 1 起)

part_count

int

本分周期总分片数

metrics

array

本行包含的 metric 条目列表

metrics[] 元素结构(按 metric 类型区分):

类型

字段

描述

COUNTER / GAUGE

nametotaldelta

total 为进程启动以来累计值;delta 为本周期增量

HISTOGRAM

nametotaldelta

二者均为对象:count(样本数)、avg_us(平均耗时,微秒)、max_usp50p90p99

本周期无样本的 metric 不出现在 metrics 数组中。单行 JSON 超过 MAX_METRICS_LOG_BYTES 时按数组拆分为多行,各行 part_index / part_count 不同,cycle 相同。

metric 名称示例(完整列表见 kv_metrics.cppKV_METRIC_DESCS):

类别

name 示例

Client 请求

client_put_request_totalclient_get_request_totalclient_put_error_total

Client RPC 时延

client_rpc_create_latencyclient_rpc_publish_latencyclient_rpc_get_latency

Worker 处理 / RPC

worker_process_get_latencyworker_rpc_query_meta_latencyworker_rpc_create_meta_latency

ZMQ / URMA

zmq_rpc_e2e_latencyzmq_send_failure_totalurma_import_jfr

资源 Gauge

worker_object_countworker_allocated_memory_size

行样例

{
	"pod_name": "ds-worker-hs5qm",
	"cluster_name": "recs",
	"event": "metrics_summary",
	"version": "v0",
	"cycle": 1,
	"interval_ms": 10000,
	"part_index": 1,
	"part_count": 1,
	"metrics": [{
		"name": "worker_rpc_create_meta_latency",
		"total": {
			"count": 3,
			"avg_us": 171,
			"max_us": 249,
			"p50": 249,
			"p90": 249,
			"p99": 249
		},
		"delta": {
			"count": 3,
			"avg_us": 171,
			"max_us": 249,
			"p50": 249,
			"p90": 249,
			"p99": 249
		}
	}]
}

观测日志开关

log_monitorjson_log_monitor 独立控制文本观测日志与 JSON Lines 观测日志,可任意组合:

log_monitor

json_log_monitor

输出效果

on

on

resource.log + INFO metrics_summary + kv_resource.log + kv_metrics.log

on

off

resource.log 与 INFO metrics_summary

off

on

kv_resource.logkv_metrics.log

off

off

上述观测日志均不写入(采集循环不运行)

相关配置项:log_monitorjson_log_monitorlog_monitor_exporter(须为 harddisk)、log_monitor_interval_ms;详见 dscli 配置说明


日志采样

LogSampler 提供统一随机哈希阈值采样,替代旧的 log_rate_limit first-N 限速机制。

工作原理

  • 三类独立采样率:request_sample_rateaccess_sample_ratediagnostic_sample_rate(各 0.0–1.0,默认 1.0=全量保留)

  • 采样粒度是”请求(traceId)“,不是”单条日志”

  • 请求采样决策随 RPC 元数据传播(LogSampleState),跨 client/worker 保持同一 trace 的一致结果

  • request sampled-in 时,该请求的 INFO/VLOG/ERROR/WARNING/PLOG 都直接输出(请求日志完整性优先)

  • request reject 只直接阻断 INFO/VLOG;diagnostic/access 不把 reject 当作直接丢弃条件,继续各自补采样

  • 仅 SDK 请求 trace 参与采样;后台线程日志不受本方案控制

  • 配置权威源:worker;client 通过 register/heartbeat 接收 worker 下发的 LogSampleConfigPb

派生规则(request-only derivation)

当仅显式配置 request_sample_rate,而未显式设置 access_sample_ratediagnostic_sample_rate 时,两者自动按以下公式派生:

  • access_sample_rate = min(1.0, request_sample_rate × 3) (简称 3r 规则)

  • diagnostic_sample_rate = min(1.0, request_sample_rate × 4) (简称 4r 规则)

示例: 仅设置 request_sample_rate=0.2 → effective access=0.6, diagnostic=0.8

显式 1.0 阻止派生

即使 access_sample_rate=1.0 与默认值相同,显式设置也意味着”用户明确要求全量保留 access 日志”,阻止自动派生。这与”未设置时默认 1.0”有本质区别:

配置

access effective 值

派生行为

request_sample_rate=0.2

0.6 (派生)

派生生效

request_sample_rate=0.2 + access_sample_rate=1.0(显式)

1.0 (显式)

派生被阻止

request_sample_rate=0.2 + access_sample_rate=0.3(显式)

0.3 (显式)

派生被阻止

Sticky Explicit 行为

一旦某个采样率被显式设置(如 access_sample_rate=0.3),后续仅修改 request_sample_rate 的动态更新不会覆盖已显式设置的值。这防止了配置漂移导致的意外日志量变化。

示例:

  1. 首次配置 request=0.2 → access 派生 0.6

  2. 动态更新显式 access=0.3 → access 固定 0.3,标记为 ever-explicit

  3. 再次更新 request=0.1 → access 仍为 0.3(不会被派生覆盖为 0.3×3=0.3,而是保持显式值)

配置方式

场景

配置方式

示例

Worker 命令行

--request_sample_rate=0.5(仅 request 触发派生)

./datasystem_worker --request_sample_rate=0.5

Worker 命令行(阻止派生)

--request_sample_rate=0.5 --access_sample_rate=1.0

access=1.0(显式),阻止 3r 派生

K8s Helm

values.yaml 中仅设置 requestSampleRate: 0.5(access/diagnostic 留空)

自动派生

K8s Helm(阻止派生)

values.yaml 中设置 accessSampleRate: 1.0

access=1.0(显式)

dscli

dscli start --request_sample_rate 0.2(仅传 request)

自动派生

Embedded Worker

config.RequestSampleRate(0.5)(仅 request 触发派生)

config.RequestSampleRate(0.5)

Embedded Worker(阻止派生)

config.RequestSampleRate(0.5).AccessSampleRate(1.0)

access=1.0(显式)

运行时动态修改

修改 datasystem.configrequest_sample_rate

默认值均为 1.0(全量保留),完全向后兼容。


慢日志与 latencySummary

当请求的处理或 RPC 阶段时延超过配置阈值时,access log 中会额外输出 latencySummary 字段,包含各阶段耗时明细,便于快速定位慢请求瓶颈。

配置参数

参数

类型

默认值

格式与示例

描述

slow_log_process_slower_than

uint64

2000

正整数,单位微秒;例如 1000 表示 1ms 阶段

处理阶段时延阈值(微秒)。默认2000μs(2ms);设为0可禁用;启用后,当处理阶段的耗时(不含跨进程 RPC)超过此阈值时输出 latencySummary。process 指处理耗时,等于总耗时减去子 RPC 耗时。支持热更新。

slow_log_rpc_slower_than

uint64

5000

正整数,单位微秒;例如 2000 表示 2ms 阶段

跨进程 RPC 阶段时延阈值(微秒)。默认5000μs(5ms);设为0可禁用;启用后,当 RPC 子阶段耗时超过此阈值时输出 latencySummary。支持热更新。

client_slow_log_process_slower_than

uint64

2000

正整数,单位微秒

Client 侧处理阶段慢日志门限(微秒)。默认2000μs(2ms);设为0禁用。通过 DATASYSTEM_CLIENT_CONFIG_PATH 配置文件或 UpdateConfig API 热更新。详见 Client环境变量

client_slow_log_rpc_slower_than

uint64

5000

正整数,单位微秒

Client 侧 RPC 阶段慢日志门限(微秒)。默认5000μs(5ms);设为0禁用。通过 DATASYSTEM_CLIENT_CONFIG_PATH 配置文件或 UpdateConfig API 热更新。详见 Client环境变量

“process”含义说明process 阶段 = 总耗时 - 子 RPC 耗时,代表处理与等待时间,而非端到端整链路耗时。例如 client.process.get = 客户端从发起 Get 到收到响应的总耗时 - client.rpc.get(客户端→worker RPC耗时),即客户端排队、序列化、反序列化等处理耗时。

latencySummary 格式

latencySummary 字段以预计算字符串形式写入 access log 的 request param 区域,格式示例:

latencySummary:{client.process.get:200,client.rpc.get:896,worker.process.get:768,worker.rpc.query_meta:512}

各阶段耗时以 {phase:duration} 形式输出,多个阶段用 , 分隔,phaseduration 之间用 : 分隔,整体用 {} 包裹,单位为微秒。如有 tick 因 buffer 溢出被丢弃,尾部附加 tick_dropped:N;如有 phase 因数组溢出被丢弃,尾部附加 phase_dropped:N

可选 phase 名称如下:

命名规则process = 处理耗时(扣除子 RPC/跨进程调用),非 IP 地址;rpc = 跨进程 RPC 耗时;urma/ub = 用户态 RDMA(Urma-based)相关传输耗时。

phase 名称

含义

client.process.get

客户端 Get 处理耗时(总耗时扣除 RPC)

client.rpc.get

客户端→worker Get RPC 耗时

client.process.set

客户端 Set/Put 处理耗时(总耗时扣除子 RPC)

client.rpc.create

客户端→worker Create RPC 耗时(Set/Put 的 Create 子阶段)

client.process.memory_copy

客户端 Set/Put 数据拷贝到共享内存耗时

client.rpc.publish

客户端→worker Publish RPC 耗时

client.urma.ub_transfer

客户端 UB(Urma-based 用户态 RDMA)数据传输耗时

client.process.create

客户端 Create 处理耗时(总耗时扣除 RPC)

client.process.exist

客户端 Exist 处理耗时(总耗时扣除 RPC)

client.rpc.exist

客户端→worker Exist RPC 耗时

worker.process.get

worker Get 处理耗时(总耗时扣除子 RPC,与 worker IP 无关)

worker.rpc.query_meta

worker→master QueryMeta RPC 耗时

worker.rpc.remote_get

worker→远端 worker RemoteGet RPC 耗时

worker.urma.urma_total

worker URMA 协议栈总耗时(含 RDMA 数据搬运、远端响应等)

worker.process.l2cache_read

worker L2 缓存读取耗时

worker.process.create

worker Create 处理耗时

worker.process.publish

worker Publish 处理耗时(总耗时扣除子 RPC)

worker.rpc.create_meta

worker→master CreateMeta RPC 耗时

worker.rpc.update_meta

worker→master UpdateMeta RPC 耗时

worker.process.exist

worker Exist 处理耗时(总耗时扣除 QueryMeta RPC)

master.process.query_meta

master QueryMeta 处理耗时

master.process.create_meta

master CreateMeta 处理耗时

master.process.update_meta

master UpdateMeta 处理耗时

worker.process.remote_get

远端数据 worker RemoteGet 处理耗时

配置方式

场景

配置方式

示例

Worker 命令行

--slow_log_process_slower_than=1000 --slow_log_rpc_slower_than=2000

处理>1ms或RPC>2ms时输出

K8s Helm

values.yaml 中设置 slowLogProcessSlowerThan: 1000

同上

dscli

dscli start --slow_log_process_slower_than 1000

同上

Embedded Worker

config.SlowLogProcessSlowerThan(1000).SlowLogRpcSlowerThan(2000)

同上

Client 配置文件

DATASYSTEM_CLIENT_CONFIG_PATH 指定文件中设置 --client_slow_log_process_slower_than=1000

Client 侧处理>1ms时输出

Client API

UpdateConfig(R"({"client_slow_log_process_slower_than":"1000"})")

运行时动态修改 Client 侧门限

运行时动态修改

修改 datasystem.config 中对应参数

默认值为 2000/5000(进程内2ms/RPC 5ms),完全向后兼容,零开销。