用ELK分析每天4亿多条腾讯云MySQL审计日志(3)--下载日志
当初分析日志,麻烦的是腾讯云的SQL审计日志下载,有下列限制:
1,单次最多1000万条下载
2,单个实例最多生成5条日志文件,多的要先删除以前文件才能生成
腾讯云日志文件生成界面:
一开始用手工下载,想想也不多,可以忍受,弄了一段时间后,研发的要求越来越高,不能一直这样手工,刚好旁边的运维小伙用GO实现了程序单实例下载日志---filebeat--kafka--ELK, 给了我很大信心,后来就用Python3重新开发一套下载日志的小系统。弄了2周终于可用:
1,数据配置放到表里
CREATE TABLE `audit_server` ( `id` int(11) NOT NULL AUTO_INCREMENT, `instance_id` varchar(200) DEFAULT NULL COMMENT '机器id', `slow_name` varchar(300) DEFAULT NULL COMMENT '慢日志名称', `status` tinyint(255) DEFAULT '0', `difftime` int(255) DEFAULT NULL COMMENT '间隔分钟', `dept` varchar(300) DEFAULT NULL, `ordernum` decimal(6,1) DEFAULT NULL COMMENT '1-10 排序\r\n10-30 各业务主库排序\r\n30以后会随机,排序降序asc输出', `ld_time` datetime DEFAULT NULL COMMENT '上次下载时间', `type` tinyint(255) DEFAULT NULL COMMENT '分类', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=110 DEFAULT CHARSET=utf8mb4 CREATE TABLE `audit_log` ( `id` int(11) NOT NULL AUTO_INCREMENT, `instance_id` varchar(100) DEFAULT NULL, `filename` varchar(300) DEFAULT NULL, `starttime` datetime DEFAULT NULL, `endtime` datetime DEFAULT NULL, `is_down` tinyint(255) DEFAULT '0' COMMENT '是否已经完成下载,0:刚创建 1:正在下载 2:下载完成', `is_deleted` tinyint(255) DEFAULT '0' COMMENT '是否删除文件 0,未删除,1:已经删除', `create_time` datetime DEFAULT CURRENT_TIMESTAMP, `ds_time` datetime DEFAULT NULL COMMENT '开始下载时间', `de_time` datetime DEFAULT NULL COMMENT '结束下载时间', `del_time` datetime DEFAULT NULL COMMENT '文件删除时间', `filesize` int(10) DEFAULT NULL COMMENT '文件大小,MB', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=65509 DEFAULT CHARSET=utf8mb4
程序实现:
1, audit_server表配置时间(字段difftime),不同实例,每次生成不同的时间日志,如30分钟,60分钟,240分钟等,保证每次能生成文件
2,audit_server表上次已下载时间(字段ld_time), 生成新日志文件: ld_time+difftime, 成功后,更新ld_time,实现增量不停循环抽取
3, 下载的日志文件记录在audit_log, 可以分析每次的下载时间,生成时间等,
4,python脚本,配置每2分钟执行一次,兼容不停抽取,如果下载完成,自动删除腾讯云的审计日志文件
5,audit_server表配置多机器并行下载日志(字段type),目前配置3台云主机(type为1,2,3),不同机器同时下载不同的实例日志,并可以动态调整。
6,配置截止抽取时间,先保证按天完成,减少对共用的ELK影响,默认是当天0点
记录的audit_log审计日志:
相关文档: