zoukankan      html  css  js  c++  java
  • Ozone Audit Log解析工具的应用

    前言


    熟悉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 Name Description SQL
    top5users Top 5 users select user,count(*) as total from audit group by user order by total DESC limit 5
    top5cmds Top 5 commands select op,count(*) as total from audit group by op order by total DESC limit 5
    top5activetimebyseconds Top 5 active times, grouped by seconds select 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

  • 相关阅读:
    构建gitlab+Jenkins+harbor+kubernetes的DevOps持续集成持续部署环境
    iptables详解之filter
    运维自动化神器ansible之user模块
    运维自动化神器ansible之group模块
    利用sed将xml报文转换为分隔符形式报文
    你的火狐很慢吗?
    完全卸载Oracle11g
    MyEclipse注册代码
    css 空心字
    TEST 1 READING AND WRITING -- PART ONE
  • 原文地址:https://www.cnblogs.com/bianqi/p/12183502.html
Copyright © 2011-2022 走看看