DAOS系统操作-日志管理

daos: 2.6.0

1. 概述

DAOS的日志功能是在DEBUG模块基础之上构建的,覆盖三个领域:GURT(通用)、CaRT、DAOS,不仅可以控制全局的日志开启和关闭,也可以更细粒度的控制DAOS系统中某个基础组件的某种操作流的日志开启和关闭,后者必须要开启DEBUG级别的日志等级才可以。

1.1. DEBUG(GURT)

DEBUG是整个日志管理系统的基础模块,也是通用模块。所以,DEBUG相关的所有定义都是在GURT模块中。DEBUG模块的设计思想:使用D_FOREACH_GURT_FAC宏来控制需要调试的组件,使用D_FOREACH_GURT_DB宏来控制需要调试的操作流。

D_FOREACH_GURT_FAC的定义如下:

#define D_FOREACH_GURT_FAC(ACTION, arg)                           \
  ACTION(misc, misc, arg)  /* misc debug messages */              \
  ACTION(mem,  mem,  arg)  /* memory debug messages */            \
  ACTION(swim, swim, arg)  /* swim debug messages (move ?) */     \
  ACTION(fi,   fi,   arg)  /* fault injection debug messages */   \
  ACTION(telem, telem, arg)  /* telemetry debug messages */

D_FOREACH_GURT_DB的定义如下:

#define D_FOREACH_GURT_DB(ACTION, arg)          \
  /** Set all debug bits */                     \
  ACTION(DB_ALL,   all,   all,   0, arg)        \
  /** Stream for uncategorized messages */      \
  ACTION(DB_ANY,   any,   any,   0, arg)        \
  /** Extremely verbose debug stream */         \
  ACTION(DB_TRACE, trace, trace, 0, arg)        \
  /** Memory operations */                      \
  ACTION(DB_MEM,   mem,   mem,   0, arg)        \
  /** Network operations */                     \
  ACTION(DB_NET,   net,   net,   0, arg)        \
  /** I/O operations */                         \
  ACTION(DB_IO,    io,    io,    0, arg)        \
  /** Test debug stream */                      \
  ACTION(DB_TEST,  test,  test,  0, arg)

DEBUG对外提供D_DEBUG接口,以便在整个DAOS中使用,相关定义如下:

#define D_DEBUG(flag, fmt, ...)                 \
  _D_DEBUG(_D_LOG_NOCHECK, flag, fmt, ##__VA_ARGS__)

除了D_DEBUG接口之外,提供了基于D_DEBUG接口衍生出来的D_INFO、D_WARN、D_ERROR等接口,相关定义如下:

#define D_INFO(fmt, ...)	D_DEBUG(DLOG_INFO, fmt, ## __VA_ARGS__)
#define D_NOTE(fmt, ...)	D_DEBUG(DLOG_NOTE, fmt, ## __VA_ARGS__)
#define D_WARN(fmt, ...)	D_DEBUG(DLOG_WARN, fmt, ## __VA_ARGS__)
#define D_ERROR(fmt, ...)	D_DEBUG(DLOG_ERR, fmt, ## __VA_ARGS__)
#define D_ALERT(fmt, ...)	D_DEBUG(DLOG_ALERT, fmt, ## __VA_ARGS__)
#define D_CRIT(fmt, ...)	D_DEBUG(DLOG_CRIT, fmt, ## __VA_ARGS__)
#define D_FATAL(fmt, ...)	D_DEBUG(DLOG_EMERG, fmt, ## __VA_ARGS__)
#define D_EMIT(fmt, ...)	D_DEBUG(DLOG_EMIT, fmt, ## __VA_ARGS__)

1.2. CaRT

CaRT模块同样也提供了CRT_FOREACH_LOG_FAC宏来控制需要调试的组件,但是没有提供针对操作流控制的宏。

1.3. DAOS

DAOS模块提供的DAOS_FOREACH_LOG_FAC宏使用需要调试的组件范围更广。同样也提供了DAOS_FOREACH_DB宏来控制需要调试的操作流。

   

2. 分类

DAOS日志可以从不同角度进行分类。

如果从server/client角度看,可以分为2大类:server端日志和client端日志。在server端,又可以分为Control Plane Log、Data Plane Log以及Privileged Helper Log。而client端有Daos Agent Log和Dfuse Log。

如果从平面角度看,可以分为2大类:数据平面日志和控制平面日志。控制平面的日志只有等级设置,没有操作流日志设置,而且等级只有TRACE, DEBUG, INFO, NOTICE, ERROR这几类,是通过control_log_mask参数设置的。数据平面日志既有等级设置,也有操作流日志控制。

server端既有控制平面日志也有数据平面日志。同样,client端也是如此。

   

3. 使用方法

DAOS日志的设置方式有3种:配置文件参数设置设置环境变量使用set-logmasks命令配置文件参数设置通常应用于控制平面日志的设置,参数有2个:control_log_maskcontrol_log_file设置环境变量的方式只适应于数据平面日志(包括dfuse)的设置,而不适应于控制平面日志的设置。set-logmasks命令只能用来动态控制daos_engine的日志。

3.1. 环境变量

DAOS提供了一系列环境变量来设置日志,主要涉及到的系统环境变量如下:

  • D_LOG_MASK: 设置全局日志级别。日志等级包括:DEBUG, DBUG, INFO, NOTE, WARN, ERROR, ERR, CRIT, ALRT, FATAL, EMRG, EMIT。在使用D_LOG_MASK设置全局日志级别的同时,可以指定某个组件的日志级别。比如:D_LOG_MASK=DEBUG,MEM=ERR,表示MEM组件的日志级别为ERR,其他组件的日志级别为DEBUG。
  • DD_SUBSYS:控制需要日志调试的DAOS基础组件。如之前分析所说,组件被分为3大类:DAOS组件、通用组件、CaRT组件。默认情况下,所有组件都被开启,即:DD_SUBSYS=all。如果需要同时调试多个组件,组件间用逗号隔开。比如:DD_SUBSYS=rpc,bulk
    • DAOS组件:daos, array, kv, common, tree, vos, client, server, rdb, rsvc, pool, container, object, placement, rebuild, mgmt, bio, tests, dfs, duns, drpc, security, dtx, dfuse, il, csum, stack
    • 通用组件:misc, mem, swim, fi, telem
    • CaRT组件:crt, rpc, bulk, corpc, grp, lm, hg, external, st, iv, ctl
  • DD_MASK:控制操作流日志的开启和关闭。如之前分析所说,操作流日志分2大类:DAOS操作流和通用操作流。默认情况下,所有的操作流日志都被开启,即:DD_MASK=all。如果需要开启多个操作流日志,操作流之间用逗号隔开,比如:DD_MASK=io,mem。DD_MASK只对DEBUG级别的日志才有效。
    • DAOS操作流:md, pl, mgmt, epc, df, rebuild, sec, csum, group_defaul, group_metadata, group_metadata_only
    • 通用操作流:any, trace, mem, net, io, test

3.1.1. 案例

查看服务端元数据操作流的日志调试信息,需要在每个engine的env_vars参数下添加环境变量和对应的值,然后重启服务才能生效。

  env_vars:
  - D_LOG_MASK=DEBUG
  - DD_SUBSYS=all
  - DD_MASK=group_metadata

查看客户端IO操作的日志调试信息,设置完环境变量后,需要重新dfuse挂载才能生效。

export D_LOG_FILE=/tmp/daos_client.log
export D_LOG_MASK=DEBUG
export DD_MASK=all

3.2. 命令行参数

在配置文件中配置环境变量后需要重启daos_server才能生效。DAOS提供了dmg server set-logmasks命令动态调整日志。该命令接受4个参数:--host-list, --masks, --streams, --subsystems,其中后面三个参数将会依次覆盖daos_server.yaml文件中每个engine配置项中log_mask参数的值、env_vars参数中环境变量DD_MASK和DD_SUBSYS的值。如果该命令不带任何参数,将使用配置文件中的值。

3.2.1. 案例

开启debug模式,并使能所有组件所有操作流日志。

dmg server set-logmasks -m DEBUG -d all -s all

上数命令等同于以下配置:

engines:
- log_mask: DEBUG
  env_vars:
  - DD_SUBSYS=all
  - DD_MASK=all

关闭debug模式

dmg server set-logmasks -m ERR -d all -s all

   

4. 参考资料