自定義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中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章