GBase 8a
工具
文章

GBase 8a 审计日志自动转储到hadoop

发表于2026-07-20 13:26:3715次浏览0个评论

注意修注释部分修改为实际部分。

drop event if exists gclusterdb.evt_exp_audit;
delimiter //
CREATE EVENT evt_exp_audit
ON SCHEDULE EVERY 1 day    – 调用间隔
STARTS '2026-06-24 19:00:00'  –- 启动时间
ON COMPLETION PRESERVE
ENABLE
global 
DO

begin
   -- 异常变量定义
   declare sqlcode varchar(100);
   declare sstate varchar(100);
   declare sqlerrm varchar(1000);
   
    -- 定义业务变量
    declare v_log varchar(1000);
   -- 异常捕获处理
   declare exit handler for sqlexception
   begin
       get diagnostics condition 1 
       sqlcode=gbase_errno,sstate=returned_sqlstate,sqlerrm=message_text;        
        
       -- 异常:拼接错误日志
       set v_log = substr(concat('报错:错误码=', sqlcode, ',信息=', sqlerrm),1,1000);
       -- 写入异常日志
      insert into gclusterdb.audit_info (id,start_time,end_time,rst,log_info) values (@time_serial,@start_time,sysdate(),'FAILED',v_log);
   end;

   --  1、创建表
   create table if not exists gclusterdb.audit_info
   (
    id bigint ,
   start_time datetime ,
   end_time datetime,
   rst varchar(10),
   log_info  varchar(2000) 
   ) replicated ;
    
    
    --  2、记录时间并导出
    set @start_time=sysdate();
    set @time_serial=date_format(sysdate(),'%Y%m%d%H%i%s') ;
    
    -- 设置参数
    
    set gbase_export_directory=0; –- 导出时候不带目录
    set gbase_hdfs_namenodes='IP1,IP2'; --  修改为实际的hadoop 的namenode
    set gbase_hdfs_principal='xxx@xxx.COM';  –- 修改为实际的,一般为 用户名@网名后缀
    set gbase_hdfs_protocol='RPC';

    set @v_sql='select * from gclusterdb.audit_log_express into outfile '|| '''hdfs://用户名@IP:端口/bonc/gbaselog/auditlog_'||@time_serial||'.txt'''||' fields terminated by '||'''\\x01''  escaped by '''' null_value ''%NULL%'' lines terminated by ''\\x02'' outfilemode by hdfs filecount 1 writemode by overwrites'; --  修改为实际的用户名、IP 、端口 。
    
    
    PREPARE s1 FROM @v_sql;
    EXECUTE s1;
    DEALLOCATE PREPARE s1;
    
    -- 3、清空审计日志表
    truncate  table gclusterdb.audit_log_express;
    
    -- 4、记录日志表
    insert into gclusterdb.audit_info (id,start_time,end_time,rst,log_info) values (@time_serial,@start_time,sysdate(),'SUCCESS','导出成功');

    -- 5、顺便记录下导入语句
    set @imp= 'load data infile hadoop_str into table gclusterdb.tmp fields terminated by \x01 null_value %NULL% lines terminated by \x02  time format %H:%i:%s.%f';


end //
delimiter ;

评论

登录后才可以发表评论