日志管理

客户端日志

审计日志

挂载点的操作审计流水,审计日志存放在客户端本地指定目录,方便接入第三方的日志采集平台。

  • 启动客户端时,可以在客户端配置中修改 enableAudit 参数的值选择开启或者关闭本地审计日志功能
  • 在服务运行时,可以通过 HTTP 发送命令到客户端来主动开启或者关闭日志功能,无需重新挂载
  • 客户端审计日志记录在本地。当日志文件大小超过 200MB 时会进行滚动,滚动后的陈旧日志会在 7 天后进行删除。这意味着审计日志默认保留 7 天的审计流水。每小时会触发一次陈旧日志文件扫描删除。

审计日志格式

[集群名(master域名或者ip),卷名,subdir,mountpoint,时间戳,clientip,client hostname,操作类型op(创建、删除、Rename),源路径,目标路径,错误信息,操作耗时,源文件inode, 目的文件inode]

审计操作类型

目前接入审计的操作如下:

  • Create,创建文件
  • Mkdir,创建目录
  • Remove,删除文件或者目录
  • Rename,mv操作

日志写入方式

审计日志是异步落盘,不会同步阻塞客户端操作。

审计日志接口

启动审计

curl -v "http://192.168.0.2:17410/auditlog/enable?path=/cfs/log&prefix=client2&logsize=1024"

提示

192.168.0.2为挂载点客户端的 ip 地址,下同

参数类型描述
pathstring审计日志目录
prefixstring制定审计日志的前缀目录,可以是模块名或者“audit”,用来区分流水日志和审计日志的目录
logsizeuint32用来设置日志滚动的 size 阈值,不设置默认为 200MB

关闭审计日志

curl -v "http://192.168.0.2:17410/auditlog/disable"

服务端日志

日志种类

  1. MetaNode,DataNode,Master 都存在两类日志,分别为服务运行日志和 raft 日志,client 由于没用到 raft,所以只有服务运行日志
  2. 各个服务日志以及 raft 日志的日志路径都是可以配置的,具体在启动配置文件的如下字段:
{
    "logDir": "/cfs/log",
    "raftDir": "/cfs/log",
    ......
}
  1. ObjectNode 存在一种日志类型,即服务运行日志
  2. 纠删码子系统的各个模块均存在两类日志,分别为服务运行日志与审计日志,审计日志默认关闭,如果开启请参考基础服务配置

日志设置

  1. 如果您是开发及测试人员,希望进行调试,可以将日志级别设置为 Debug 或者 info
  2. 如果生产环境,可以将日志级别设置为 warn 或者 error,将大大减少日志的量
  3. 支持的 log-level 有 debug、info、warn、error、fatal、critical(纠删码系统不支持critical级别)

日志的设置有2种方式:

  • 在配置文件中设置,具体如下:
"logLevel": "debug"
  • 可以通过命令动态的修改,命令如下
# profPort 为 golang 调试端口,在服务端配置文件中为 prof
curl -v "http://192.168.0.2:{profPort}/loglevel/set?level={log-level}"

提示

纠删码的日志设置稍有不同

日志格式

日志格式为如下格式

[时间][日志级别][日志路径及行数][详细信息]
举例说明:
2023/03/08 18:38:06.628192 [ERROR] partition.go:664: action[LaunchRepair] partition(113300) err(no valid master).

提示

纠删码系统的格式稍有不同,这里分别介绍服务运行日志与审计日志

服务运行日志格式如下

[时间][日志级别][日志路径及行数][TraceID:SpanID][详细信息]
2023/03/15 18:59:10.350557 [DEBUG] scheduler/blob_deleter.go:540 [tBICACl6si0FREwX:522f47d329a9961d] delete shards: location[{Vuid:94489280515 Host:http://127.0.0.1:8889 DiskID:297}]

审计日志格式如下

[请求][服务名][请求时间][请求类型][请求接口][请求头部][请求参数][响应状态码][响应长度][请求耗时,单位微秒]
REQ	SCHEDULER	16793641137770897	POST	/inspect/complete	{"Accept-Encoding":"gzip","Content-Length":"90","Content-Type":"application/json","User-Agent":"blobnode/cm_1.2.0/5616eb3c957a01d189765cf004cd2df50bc618a8 (linux/amd64; go1.16.13)}	{"task_id":"inspect-45800-cgch04ehrnv40jlcqio0","inspect_err_str":"","missed_shards":null}	200	{"Blobstore-Tracer-Traceid":"0c5ebc85d3dba21b","Content-Length":"0","Trace-Log":["SCHEDULER"],"Trace-Tags":["span.kind:server"]}		0	68
在github上编辑