一. 背景:
多种不规则日志,需要通过正则表达式解析,事实写进es
二. 方式
flink sql + 自定义format + 正则表达式文件。
三. 代码
1. table 定义
String source=" create table source_table (\n" +
"$_logName string, \n"+
"f0 string , \n" +
"f1 string , \n" +
"f2 string , \n" +
"f3 string , \n" +
"$_logSendTime string , \n" +
"$_logId string , \n" +
"$_projectName string \n" +
") with ( \n" +
"'connector'='filesystem' , \n" +
" 'path'='file:///d:/data/pwrd2' , \n " +
" 'format'='pwrd_decode' \n" +
")";
2. 解析用的正则表达式,文件名字和表名字一致,方便读取
filter 过滤日志, 正则表达式别名和上面见表的列明匹配时赋值。
{
"columns": [{
"regular": "savg=(?<f0>\\d+)"
}, {
"regular": "^.*IOPS=(?<f2>\\d+)\\b.*\\bavg=(?<f1>\\d+)\\b.*$"
},{
"regular": "savg=(?<f3>\\d+)"
}],
"filter": "^AAA.*$"
}
3. 自定义 DeserializationFormatFactory ,DecodingFormat ,DeserializationSchema 根据ddl和正则表达式对日志进行解析
4. DeserializationFormatFactory 服务发现