Ozone Audit Log解析工具的应用

封飞
2023-12-01

前言


熟悉HDFS的同学可能经常会使用到audit log文件做问题的tracking。说起audit log,它的作用可不小,它按照时间顺序精确地记录了每次的请求操作。通过这些精确的记录,我们得以精确定位到问题发生时间点,哪个用户,执行了什么命令,请求来自哪个IP等等有用的信息,以此进一步帮助我们做问题的分析。当然,我们还能将audit log进行汇总分析,这样我们能知道总体RPC请求的一个分布情况和趋势。但是HDFS在对audit log的分析上并没有提供现有的工具,只是提供现成的hdfs-audit.log的文件。好在aduit log格式统一,我们常规的做法是将audit log进行文件读取解析,然后load到db表内进行二次分析。所以如果这里系统能够提供一个额外工具能方便我们进行audit log load到db的操作,无疑这会提升audit log的易用性,因为后续的分析完全就可以基于db query来做了。Ozone作为对象存储系统,它在此方面就实现了一个audit log的parser tool,本文笔者来聊聊此工具的使用。

Ozone的OM, SCM服务的audit log格式


在Ozone的主服务中,OM/SCM服务有其各自的audit log文件,但它们遵从一致的audit格式,以下为两者服务对应的audit log记录:

OM audit log:

2019-12-07 07:11:17,264 | INFO | OMAudit | user=yiqlin | ip=xx.xx.xx.xx | op=ALLOCATE_KEY {volume=testvolume1, bucket=testbucket1, key=testfile2, dataSize=12, replicationType=RATIS, replicationFactor=THREE, keyLocationInfo=null} | ret=SUCCESS |

SCM audit log:

2019-12-07 07:30:37,338 | INFO | SCMAudit | user=hdfs | ip=xx.xx.xx.xx | op=SEND_HEARTBEAT {datanodeUUID=da6703ec-903e-42bb-9af3-2a1e1759dca1, command=[]} | ret=SUCCESS |

上面audit log中,Ozone将关于请求操作更加详细的信息都放在了op列内,然后其它列为基本信息列。

OM, SCM服务audit log的load


为了方便做audit log的分析,Ozone内部实现了audit log的parser tool,不仅支持方便导入audit log到db的操作,还能进行自定义的query分析。

我们在使用此工具的时候,首先需要执行的是audit log load到db的操作,以om的audit log命令为例:

[hdfs@lyq ~]$ ~/ozone/bin/ozone auditparser ~/om_audit.db load ~/ozone/logs/om-audit-xx.xx.xx.xx.log
/home/hdfs/ozone/logs/om-audit-xx.xx.xx.xx.log has been loaded successfully

然后我们可以看到load成功的输出,然后在hdfs目录下会生成一个db文件。

通过比较audit log的记录条数和db中的记录条数,数据的确是完全被load的。

[hdfs@lyq ~]$ wc -l ~/ozone/logs/om-audit-xx.xx.xx.xx.log
6 /home/hdfs/ozone/logs/om-audit-xx.xx.xx.xx.log
[hdfs@lyq ~]$ ~/ozone/bin/ozone auditparser ~/om_audit.db query ‘select count(*) from audit’
6

load到db的audit表的表信息如下:

CREATE TABLE IF NOT EXISTS audit (
datetime text,
level varchar(7),
logger varchar(7),
user text,
ip text,
op text,
params text,
result varchar(7),
exception text,
UNIQUE(datetime,level,logger,user,ip,op,params,result))

然后后面我们就可以在上面做query操作了。

OM, SCM服务audit log的query和template query


Ozone audit log parser支持两种模式的query:

  • 第一种,自定义模式的query查询,你可以查你想要查询的条件
  • 第二种,通用常用的几个模板(template)查询,可以直接输入模板名称

比如下面的自定义query为例,

[hdfs@lyq logs]$ ozone auditparser ~/scm_audit.db query “select * from audit limit 5”
2019-12-06 06:06:22,203 INFO SCMAudit hdfs xx.xx.xx.xx SEND_HEARTBEAT {datanodeUUID=dab225c6-404b-420d-8aab-e6a6c5718d4e, command=[]} SUCCESS
2019-12-06 06:06:26,099 INFO SCMAudit hdfs xx.xx.xx.xx SEND_HEARTBEAT {datanodeUUID=5b3d0cab-4ca2-4269-9a39-39df721d404f, command=[]} SUCCESS
2019-12-06 06:06:32,592 INFO SCMAudit hdfs xx.xx.xx.xx SEND_HEARTBEAT {datanodeUUID=56a13816-8a2c-4f42-a56d-6f59f7049dd5, command=[]} SUCCESS
2019-12-06 06:06:35,986 INFO SCMAudit hdfs xx.xx.xx.xx SEND_HEARTBEAT {datanodeUUID=da6703ec-903e-42bb-9af3-2a1e1759dca1, command=[]} SUCCESS
2019-12-06 06:06:52,202 INFO SCMAudit hdfs xx.xx.xx.xx SEND_HEARTBEAT {datanodeUUID=dab225c6-404b-420d-8aab-e6a6c5718d4e, command=[]} SUCCESS

我们同样可以做常见的用户汇总分析,类似如下查询,

[hdfs@lyq ~]$ ~/ozone/bin/ozone auditparser ~/om_audit.db query ‘select user,count(user) from audit group by user’
hdfs 4
yiqlin 2

audit paser tool提供了下面3个常用的模板查询,

Template NameDescriptionSQL
top5usersTop 5 usersselect user,count(*) as total from audit group by user order by total DESC limit 5
top5cmdsTop 5 commandsselect op,count(*) as total from audit group by op order by total DESC limit 5
top5activetimebysecondsTop 5 active times, grouped by secondsselect substr(datetime,1,charindex(’,’,datetime)-1) as dt,count(*) as thecount from audit group by dt order by thecount DESC limit 5

比如我们以top5users为例,它将查到得到同上的查询结果

[hdfs@lyq ~]$ ~/ozone/bin/ozone auditparser ~/om_audit.db template top5users
hdfs 4
yiqlin 2

ozone audit pasrser工具的主要命令就是如上所描述的,但是笔者个人认为目前usage里信息还是有点少,不如官方文档描述地详细:

Usage: ozone auditparser [-hV] [--verbose] [-D=<String=String>]... <database>
                         [COMMAND]
Shell parser for Ozone Audit Logs
      <database>   Existing or new .db file
      --verbose    More verbose output. Show the stack trace of the errors.
  -D, --set=<String=String>

  -h, --help       Show this help message and exit.
  -V, --version    Print version information and exit.
Commands:
  load, l      Load ozone audit log files
  template, t  Execute template query
  query, q     Execute custom query

不过总体来说,Ozone提供的这个auditlog parser tool还是十分易用的,能够让管理员做本地的快速分析。不过如果我们想做区间时间段内的整体分析的话,还是得需要将audit log解析存到额外的db进行存储。

引用


[1]. https://issues.apache.org/jira/browse/HDDS-393 . Audit Parser tool for processing ozone audit logs

 类似资料: