hdfs审计日志(Auditlog)记录了用户针对hdfs的所有操作,详细信息包括操作成功与否、用户名称、客户机地址、操作命令、操作的目录等。对于用户的每一个操作,namenode都会将这些信息以key-value对的形式组织成固定格式的一条日志,然后记录到audit.log文件中。通过审计日志,我们可以实时查看hdfs的各种操作状况、可以追踪各种误操作、可以做一些指标监控等等。

hdfs的审计日志功能是可插拔的,用户可以通过实现默认接口扩展出满足自己所需的插件来替换hdfs默认提供的审计日志功能,或者与之并用。

启用审计日志

如果仅仅只启用默认的AuditLogger(DefaultAuditLogger),则在log4j.properties添加如下配置(hdfs.audit.logger必须配置为INFO级别)即可,审计日志会与namenode的系统日志独立开来保存,log4j.appender.RFAAUDIT.File可配置保存的位置及文件。 FSNamesystem根据log4j.properties中hdfs.audit.logger是否为INFO,以及是否配置了DefaultAuditLogger之外的其他AuditLogger,来决定是否启用审计日志功能。

#

# hdfs audit logging

#

hdfs.audit.logger=INFO,NullAppender

hdfs.audit.log.maxfilesize=256MB

hdfs.audit.log.maxbackupindex=20

log4j.logger.org.apache.hadoop.hdfs.server.namenode.FSNamesystem.audit=${hdfs.audit.logger}

log4j.additivity.org.apache.hadoop.hdfs.server.namenode.FSNamesystem.audit=false

log4j.appender.RFAAUDIT=org.apache.log4j.RollingFileAppender

log4j.appender.RFAAUDIT.File=${hadoop.log.dir}/hdfs-audit.log

log4j.appender.RFAAUDIT.layout=org.apache.log4j.PatternLayout

log4j.appender.RFAAUDIT.layout.ConversionPattern=%d{ISO8601} %p %c{2}: %m%n

log4j.appender.RFAAUDIT.MaxFileSize=${hdfs.audit.log.maxfilesize}

log4j.appender.RFAAUDIT.MaxBackupIndex=${hdfs.audit.log.maxbackupindex}

审计日志的接口及实现

Namenode开放了AuditLogger接口,并定义抽象类HdfsAuditLogger 实现AuditLogger,默认提供实现类DefaultAuditLogger。构造FSNamesystem时通过initAuditLoggers(Configuration conf)方法创建AuditLogger列表。在记录用户操作时,会将操作信息逐一传给列表中的每一个AuditLogger,由其做对应的审计处理。

通过实现Auditloger接口或者扩展HdfsAuditLogger类,用户可以实现自己的AuditLogger来满足所需,例如有针对性的记录审计日志(当集群、访问量上规模之后疯狂刷日志必然对namenode有影响,有针对性的记录有必要的日志是缓解此状况的一种可选方案)、扩展功能、将日志接入实时系统做实时分析或监控等。用户通过配置项dfs.namenode.audit.loggers在hdfs-site.xml中配置Auditloger的实现类,多个实现可以通过逗号分开,更改配置后重启namenode接口生效。FSNamesystem的initAuditLoggers(Configuration conf)方法通过该配置项加载并实例化实现类,初始化后存入集合。如果用户没有配置,那么默认使用DefaultAuditLogger。如果启动了nntop功能,还会使用TopAuditLogger。

FSNamesystem 初始化所有的AuditLogger:

private List initAuditLoggers(Configuration conf){

// Initialize the custom access loggers if configured.

//DFS_NAMENODE_AUDIT_LOGGERS_KEY=dfs.namenode.audit.loggers

if (alClasses != null && !alClasses.isEmpty()) {

for (String className : alClasses) {

try {

if (DFS_NAMENODE_DEFAULT_AUDIT_LOGGER_NAME.equals(className)) {

new DefaultAuditLogger();

else {

add(logger);

catch (RuntimeException re) {

throw re;

catch (Exception e) {

throw new RuntimeException(e);

// Make sure there is at least one logger installed.

// 如果用户没有提供AuditLoggers,则默认使用DefaultAuditLogger

if (auditLoggers.isEmpty()) {

add(new DefaultAuditLogger());

// Add audit logger to calculate top users

// 默认topConf.isEnabled是开启的,用于指标聚合、上报

// TopAuditLogger类似 top命令

if (topConf.isEnabled) {

new TopMetrics(conf, topConf.nntopReportingPeriodsMs);

add(new TopAuditLogger(topMetrics));

return Collections.unmodifiableList(auditLoggers);

DefaultAuditLogger记录日志:

if (auditLog.isInfoEnabled()) {

0);

append("allowed=").append(succeeded).append("\t");

append("ugi=").append(userName).append("\t");

append("ip=").append(addr).append("\t");

append("cmd=").append(cmd).append("\t");

append("src=").append(src).append("\t");

append("dst=").append(dst).append("\t");

if (null == status) {

append("perm=null");

else {

append("perm=");

append(status.getOwner()).append(":");

append(status.getGroup()).append(":");

append(status.getPermission());

if (logTokenTrackingId) {

append("\t").append("trackingId=");

if (ugi != null && dtSecretManager != null

for (TokenIdentifier tid: ugi.getTokenIdentifiers()) {

if (tid instanceof DelegationTokenIdentifier) {

break;

append(trackingId);

append("\t").append("proto=");

append(NamenodeWebHdfsMethods.isWebHdfsInvocation() ? "webhdfs" : "rpc");

审计过程

客户端对hdfs的所有操作,不管成功与否都会由FSNamesystem记录下。以删除操作为例,FSNamesystem在正常删除给定src后调用logAuditEvent(true, "delete", src)记录此次成功的delete操作,如果删除失败抛出异常,则调用logAuditEvent(false, "delete", src)记录此次失败的delete操作。

boolean delete(String src, boolean recursive, boolean logRetryCache)

throws IOException{

null;

boolean ret = false;

try {

"Cannot delete " + src);

this, src, recursive, logRetryCache);

null;

catch (AccessControlException e) {

false, "delete", src);

throw e;

finally {

if (toRemovedBlocks != null) {

// Incremental deletion of blocks

true, "delete", src);

return ret;

//判断是否是外部调用,只对rpc调用和webHdfs调用做审计

boolean isExternalInvocation(){

return Server.isRpcInvocation() || NamenodeWebHdfsMethods.isWebHdfsInvocation();

//判断是否启用审计日志功能

public boolean isAuditEnabled(){

return !isDefaultAuditLogger || auditLog.isInfoEnabled();

//succeeded:操作是否成功     cmd:操作命令     src:操作对象

private void logAuditEvent(boolean succeeded, String cmd, String src)

throws IOException{

null, null);

private void logAuditEvent(boolean succeeded, String cmd, String src, throws IOException{

if (isAuditEnabled() && isExternalInvocation()) {

//获取操作对象的信息,调用所有的auditloger 做审计

private void logAuditEvent(boolean succeeded,{

null;

if (stat != null) {

new Path(stat.getSymlink()) : null;

null ? new Path(dst) : new Path(src);

new FileStatus(stat.getLen(), stat.isDir(),

for (AuditLogger logger : auditLoggers) {

if (logger instanceof HdfsAuditLogger) {

else {

审计日志接入实时系统的方法

方法1:扩展Log4J的appender,由appender将日志发送到kafka。

方法2:直接让kafka的producer读取日志文件。

android审计日志,hdfs auditlog(审计日志)相关推荐

  1. hdfs auditlog(审计日志)

    hdfs审计日志(Auditlog)记录了用户针对hdfs的所有操作,详细信息包括操作成功与否.用户名称.客户机地址.操作命令.操作的目录等.对于用户的每一个操作,namenode都会将这些信息以ke ...

  2. snmp获取交换机日志_日志审计系统和数据库审计系统的区别

    今天就易混淆的日志审计系统与数据库审计系统进行辨析.从日志审计系统和数据库审计系统的技术特点和原理来切入,来分析日志审计系统与数据库审计系统的异同. 01.日志审计系统 系统日志 系统日志是记录系统中 ...

  3. linux日志auditd,linux 审计工具auditd日志audit.log时间戳转换查看

    最近由于机房安全规范的要求,需要第三方软件进行系统安全审计,linux操作系统默认有登陆.定时任务等审计,要查看其日志的时候发现时间格式为unix时间戳格式,阅读起来很不方便,便想将其中的时间戳转换成 ...

  4. GBase 8a 的日志管理1-备份恢复日志、重分布日志、审计日志

    备份恢复日志   备份恢复日志类型信息一览表: 日志名称 日志路径 日志说明 备份调度日志 $GLUSTER_BASE/log/gcluster/gcrcma n.log 集群内在每组的第一个节点上 ...

  5. 日志审计Graylog审计华为交换机用户登录日志

    上期讲解了日志审计graylog安装,这期讲解graylog的部分实用功能的使用. 上期内容链接:https://blog.csdn.net/weixin_43886932/article/detai ...

  6. 网络安全之认识日志采集分析审计系统

    日志对于大家来说非常熟悉,机房中的各种系统.防火墙.交换机.路由器等等,都在不断地产生日志.无数实践告诉我们,健全的日志记录和分析系统是系统正常运营与优化以及安全事故响应的基础.我们一起来认识日志采集 ...

  7. 什么是日志审计?目前哪款日志审计软件更靠谱?

    什么是日志审计? 综合日志审计平台,通过集中采集信息系统中的系统安全事件.用户访问记录.系统运行日志.系统运行状态等各类信息,经过规范化.过滤.归并和告警分析等处理后,以统一格式的日志形式进行集中存储 ...

  8. linux审计日志发送,Linux审计日志

    最近在Linux日志中发现有如下信息: vi /var/log/messages type=CRYPTO_KEY_USER msg=audit(1448528863.866:163): user pi ...

  9. 信息审计服务器功能,服务器审计日志

    服务器审计日志 内容精选 换一换 Manager的审计日志默认保存在数据库中,如果长期保留可能引起数据目录的磁盘空间不足问题,管理员如果需要将审计日志保存到其他归档服务器,可以在FusionInsig ...

最新文章

  1. 专访旷视副总裁彭广平:旷视为何选择收购艾瑞思?
  2. 深入理解 Java 虚拟机 - 你了解 GC 算法原理吗
  3. kafka数据 落盘_Kafka架构原理?也就这么回事!
  4. Java 技术篇 - 启动web服务接收浏览器请求并响应实例演示,解决socket响应浏览器显示中文乱码问题,web服务response响应设置浏览器显示字体方法
  5. Scanf连续调用多次并且存在%c的问题
  6. java学习开发环境的构建
  7. 智能情绪分析技术_石化缘推荐:炼化企业智能机器人巡检技术应用前景分析!...
  8. CreateThread用法详解
  9. matlab 矩阵中的矩阵的特征值,当矩阵的所有条目都是变量时,如何在matlab中找出矩阵的特征值?...
  10. C语言UDP socket编程
  11. 《手机屏幕》参数与选择
  12. w10恢复出厂设置_笔记本电脑w10怎么恢复出厂设置
  13. Linux获取外网IP
  14. 使用stm32+esp8266-01s与电脑进行mqtt交互
  15. ThreeJs 学习之旅(七)
  16. ListView和条目点击事件、条目长按事件
  17. Linux之父、大数据之父确认参加2021世界人工智能大会
  18. WPF快速入门2—布局WrapPanel,DockPanel,StackPanel,Canvas
  19. 【xsy2440】【GDOI2016】疯狂动物城
  20. 码住这些视频配音软件,一键完成配音

热门文章

  1. 提车自检手册(3系,其他车辆类似)
  2. Django学习笔记2-HTML的相关知识
  3. 单身模式(Singleton)
  4. PowerPoint (PPT) 文档 文本内容提取
  5. 翻转英文句子,标点位置不变
  6. Visual C++6.0的安装和使用
  7. Ubuntu 卸载软件 清理系统垃圾
  8. 史上最全的dB分贝单位合集: dB,dBFS, dB FS, dBTP, dB TP, dBO, dBov, dBu/dBv, dBV, dBm/dBmW, dBW,...
  9. Comsol Multiphysics 粉末冶金过程计算机仿真
  10. excel函数应用技巧:如何查找各销售员自己的最高业绩?