背景
项目中经常有需要接收三方日志的需求。日志格式各异,以往都需要定制化开发。先考虑使用配置化的策略实现
场景1
syslog 日志接收
非键值对日志:
-
需要三方将日志发送到dsc 指定端口 ,支持tcp / udp 协议
-
配置解析正则,如 (.?)(通过账号(.?)登录)[,,]在(.?)通过(.?)做登录(.?)操作[,,]操作失败。日志级别
-
配置字段值映射关系,例如登录映射成db_logon
-
配置正则解析的分组内容填充到epc对应的属性。第一个括号代表第一个分组。 e_type : #{g1}
键值对日志(JSON形式):
- 需要三方将日志发送到dsc 指定端口 ,支持tcp / udp 协议
- 配置字段值映射关系,例如“登录”映射成“db_logon”
- 配置正则解析的key对应value填充到epc对应属性。 e_type : #{abc}。支持springel
public static void test1() throws Exception {
String template = "I have a pig, Its name is '#{name.length()}', It's #{age} #{a1} years old";
Expression expression = new SpelExpressionParser().parseExpression(template, ParserContext.TEMPLATE_EXPRESSION);
HashMap<String, String> model = new HashMap<String, String>() {{
put("name", "poi");
put("age", "4");
put("a1", "4");
}};
StandardEvaluationContext context = new StandardEvaluationContext(model);
context.addPropertyAccessor(new MapAccessor());
System.out.println(expression.getValue(context));
}
场景2
kafka 日志接收
- 日志接收 一个topic 对应一套
场景3
API 日志拉取 (暂不支持),需求来源阿里云RDS审计日志的获取。