openYuanrong datasystem 日志¶
日志类别¶
openYuanrong datasystem 的日志分为以下类型:
运行日志:记录客户端、服务端运行时的日志信息,包括 INFO、WARNING、ERROR、FATAL;更细粒度调试可通过
VLOG与 gflags(如--v)控制。访问日志:记录每一次访问客户端/服务端的请求,每个请求一条日志,用于定界上游是否访问客户端/服务端(需开启
log_monitor)。请求第三方日志(request_out):记录 Worker 访问第三方组件的请求,每个请求一条日志,可用于定界 openYuanrong datasystem 是否成功访问该外部组件;当前实现中 主要接入 ETCD gRPC(需开启
log_monitor)。资源日志:定时输出 Worker 运行时关键资源信息,包括共享内存、Spill 磁盘、线程池、队列、流缓存相关统计等(需
log_monitor且log_monitor_exporter=harddisk)。流缓存指标日志(sc_metrics):流缓存运行数据(需开启
log_monitor)。容器/进程相关日志:容器运行日志,管理和监控worker进程的生命周期。
日志目录一般为配置项 log_dir(如部署下的 yr_datasystem/logs);下文 /path/yr_datasystem/logs 表示该目录。
不同模块日志文件¶
序号 |
模块 |
日志路径及文件名 |
含义、用途 |
|---|---|---|---|
1 |
datasystem_worker |
|
Worker 运行日志; |
2 |
datasystem_worker |
|
访问 Worker POSIX 等接口的日志 |
3 |
datasystem_worker |
|
Worker 资源使用日志;默认关闭,由 |
4 |
datasystem_worker |
|
访问第三方(当前主要为 ETCD)接口日志 |
5 |
datasystem_worker |
|
流缓存运行数据;由 |
6 |
datasystem_worker |
|
容器运行日志,管理和监控worker进程的生命周期 |
7 |
Client |
|
SDK 运行日志;基名可由启动参数与环境变量 |
8 |
Client |
|
SDK 接口访问日志;基名可由 |
日志格式¶
格式总览¶
序号 |
日志 |
日志格式 |
|---|---|---|
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 |
日志字段¶
字段 |
长度 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 |
spill disk info |
47 |
记录Spill磁盘使用信息。单位为Byte,按照1T限制大小,每个长度 13 Byte,格式为:spaceUsage/physicalSpaceUsage/totalLimit/rate |
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 |
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 |
scLocalCache info |
47 |
记录scLocalCache使用信息,单位为Byte,按照1T限制大小,每个长度 13 Byte,格式为:usedSize/reservedSize/totalLimit/usedRate |
Cache Hit Info |
9 |
缓存命中统计,格式为:memHitNum/diskHitNum/l2HitNum/remoteHitNum/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 |
SDK 与 Worker 访问日志关键请求参数¶
关键请求参数 |
长度 Byte |
描述 |
|---|---|---|
Object_key |
255 |
对象的ID。长度:255Byte; |
object_keys |
1024 |
多个对象 KEY。单个 Item 最长 255 Byte,展示总长上限约 1KB;超出时仅显示总数等缩写。示例 JSON: |
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字段获取并打印。 |
日志采样¶
大流量场景下,可通过 log_rate_limit 参数限制每秒最大日志条数,避免高频路径上的 INFO/WARNING/ERROR 日志产生过多磁盘 I/O。
工作原理¶
采用令牌桶算法 + 等间隔采样策略
当日志速率超出设定值时,INFO、WARNING 和 ERROR 日志会被等间隔采样,被保留的日志末尾会追加
[sampled 1/N]标注,表示当前采样率FATAL 始终全量输出,不受限速影响
同一请求(trace)的日志保证链路完整性:首条日志通过限速后,后续同 trace 日志优先通过独立小桶(上限 20 条/秒),小桶耗尽后降级为全局等间隔采样
配置方式¶
场景 |
配置方式 |
示例 |
|---|---|---|
Worker 命令行 |
|
|
Embedded Worker |
|
|
Standalone Client |
环境变量 |
|
运行时动态修改 |
修改 |
— |
默认值为 0(不限速),完全向后兼容。