自定义logger采集hdfs的审计日志

      Hadoop提供了日志审计功能,可以记录对hdfs的操作,包括创建文件、上传文件、删除文件等。在某个业务场景中,我们期望将hdfs的操作日志记录到日志平台中,日志平台基于Kafka实现,因此需要将日志发送到Kafka中。

      首先继承log4j的AppenderSkeleton实现自定义的appender:

@Data
public class DcLog4jAppender extends AppenderSkeleton {

    private String code;

    private String dcKafkaUrl;

    private KafkaAppender kafkaAppender;

    @Override
    public void activateOptions(){
        super.activateOptions();
        kafkaAppender = new KafkaAppender(code, dataCenter, dcKafkaUrl);
        kafkaAppender.initTopic();
    }

    @Override
    protected void append(LoggingEvent event) {
        kafkaAppender.sendMsg(event.getMessage().toString());
    }

    @Override
    public void close() {
        kafkaAppender.stop();
    }

    @Override
    public boolean requiresLayout() {
        return false;
    }
}

      类中的KafkaAppender是对KafkaProducer的封装,其中完成了KafkaProducer的初始化以及数据发送等操作。

      修改Hadoop路径下的log4j.properties文件,首先添加自定义的appender:

log4j.appender.dcKafkaAppender=cn.taofu.dclog.appender.DcLog4jAppender
log4j.appender.dcKafkaAppender.code=vHmplP
log4j.appender.dcKafkaAppender.dcKafkaUrl=dp81:9092,dp82:9092,dp83:9092

      接下来添加dcKafkaAppender到audit的logger中:

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

     通过查看FSNamesystem的源码可以发现该类的auditLog定义的logger名即为FSNamesystem.class.getName()+".audit"。

     在CM中配置时,在NameNode日志记录高级配置代码段中添加以上配置即可。

     配置完成后,重启DataNode,进行hdfs操控(新建、查询、删除)时,日志即可发送到Kafka中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值