基于FlinkCDC-3.1.1&Flink-1.18实现MySQL DDL审计告警

本文基于FlinkCDC 3.1.1和Flink 1.18版本,对Mysql数据库的binlog增量监听,实现对DDL语句审计告警的能力。

一、项目能力:

基于FlinkCDC-3.1.1和Flink-1.18技术栈,采用Flink on yarn部署模式,实现增量监听Mysql数据库,对Mysql中的DDL语句做审计告警,将告警消息发送至钉钉告警群。

二、主要技术架构:
技术栈版本
java1.8
FlinkCDC3.1.1
Flink1.18.0
Hadoop (yarn)2.8.3
三、部署流程:
  1. 安装Java环境和Hadoop环境,步骤略;

  2. 安装Flink环境:

-> wget https://archive.apache.org/dist/flink/flink-1.18.0/flink-1.18.0-bin-scala_2.12.tgz
-> tar -zxvf flink-1.18.0-bin-scala_2.12.tgz
-> mkdir ./flink-1.18.0/job
  1. 下载FlinkHadoop整合相关依赖jar包:
-> cd flink-1.18.0/lib
-> wget https://repo.maven.apache.org/maven2/org/apache/flink/flink-shaded-hadoop-2-uber/2.8.3-10.0/flink-shaded-hadoop-2-uber-2.8.3-10.0.jar
  1. 配置flink-conf.yaml文件,主要配置如下参数
配置项value说明
state.backendfilesystem状态后端存储模式
state.checkpoints.dirhdfs://${HOST_NAME}:8020/flink/flink-checkpointscheckpoint地址,基于hdfs
state.savepoints.dirhdfs://${HOST_NAME}:8020/flink/flink-savepointssavepoint地址,同样基于hdfs
env.java.opts“-Dfile.encoding=UTF-8”全局编码(**重要配置,必须要加引号)
  1. 建立钉钉群,并创建告警机器人

    创建过程略;(注意:当前版本只能处理未加签机器人,关键字设置为告警审计);

  2. 打包并上传:

-> git clone 
-> mvn clean package -Dmaven.test.skip=ture

​ 将jar包上传到/flink-1.18.0/job目录下。

  1. 创建配置文件:

​ 你可以手动新增配置文件,也可以将项目中的config.json文件直接上传到/flink-1.18.0/job目录下,如下展示新增过程:

-> cd /flink-1.18.0/job
-> vim config.json
{
  "auditName": "sql-audit",
  "job": {
    "serverId": "",
    "startMode": "latest",
    "timestamp": ""
  },
  "source": {
    "sourceType": "mysql",
    "hostname": "127.0.0.1",
    "port": 3306,
    "username": "root",
    "password": "root",
    "databaseList": [],
    "tableList": [],
    "blackDatabaseList": []
  },
  "alarm": {
    "alarmType": "WEBHOOK",
    "webhook": "https://oapi.dingtalk.com/robot/send?access_token=${YOUR_TOKEN}",
    "msgtype": "text",
    "at": {
      "isAtAll": false,
      "atMobiles": [
        "13400000000"
      ]
    }
  }
}

配置文件内容描述如下:

参数名是否必填默认值说明
auditNamesql-audit任务名称
serverId-mysql slave server_id
startModelatestFlink启动模式(支持 initial,earliest,latesttimestamp四种模式)
timestampNull如果启动模式设置为timestamp,则该值必须设置
sourceTypemysql数据源类型,当前只支持mysql
hostname-mysql连接ip
port-mysql连接端口
username-mysql连接用户名
password-mysql连接密码
databaseList-Flinkcdc 监听的数据库列表
tableList-Flinkcdc 监听的数据表列表
blackDatabaseList-需要过滤掉的黑名单数据库列表
alarmTypeWEBHOOK告警类型,默认为钉钉,当前也只支持钉钉
webhook-webhook地址
msgtypetext消息类型,钉钉消息类型支持markdowntext
isAtAllfalse是否@所有人
atMobiles@人手机号
  1. 创建启动脚本
-> vim start.sh
-> sh start.sh
#!/bin/bash

export JAVA_HOME=${YOUR_JAVA_PATH}/jdk1.8.0_181
export PATH=$JAVA_HOME/bin:$PATH
export HADOOP_CLASSPATH=`hadoop classpath`
export HADOOP_USER_NAME=hdfs

flink_home=$PWD/../../bin
jar_path=$PWD/sql-audit.jar
config_path=$PWD/config.json
job_name=sql-audit-app

$flink_home/flink run -c com.someway.MySQLAuditExec -m yarn-cluster -ynm $job_name  -p 1 -yjm 1024 -ytm 1024 -yD env.java.opts="-Dfile.encoding=UTF-8" ${jar_path} ${config_path}
  1. 告警测试

通过在数据库创建表,删除表,truncate表和alert表,能够捕获如下审计告警:

  • Create 告警样例:
    在这里插入图片描述

  • DROP 告警样例
    在这里插入图片描述

  • Truncate 告警样例:
    在这里插入图片描述

  • Alter 告警样例:
    在这里插入图片描述

四、最后

当前项目属于V0.1版本,里面支持的数据源不是很全面,告警渠道也有限。如果有需要的小伙伴,可以自行下载代码,然后做二次开开发。FlinkCDC 3.0版本提供了很多新能力,为数据同步提供了更多的保障机制和可能性,后续会继续探索其他新功能和新使用场景。有需要交流的小伙伴,欢迎关注我的公众号,一起交流学习。

如果需要源码的小伙伴,关注公众号后回复"SQL审计"自动获取代码地址

在这里插入图片描述

  • 30
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值