要求以logstash显示开头的6位数字和结尾的4位数字,并掩盖信用卡的剩余数字。我应用了gsub / mutate过滤器,但替换字符串不允许使用正则表达式。还有其他方法可以在logstash中完成吗?
if [message] =~ '\d{16}' {
mutate {
gsub => ["message", "\d{6}\d{4}\d{4}", "\d{6}######\d{4}"]
add_tag => "Masked CardNo"
}
}
此代码会将3456902345871092信用卡屏蔽为\ d {6} ###### \ d {4},但应将其屏蔽为345690 ###### 1092。
或者,如果可能的话,即使仅显示卡的前6位或后4位也是有帮助的。
答案 0 :(得分:1)
您可以在正则表达式中使用捕获组,并在替换部分中使用这些组:此正则表达式(\d{6})(\d{6})(\d{4})
在匹配时会创建三个组(see here)。可以在替换字符串中使用该组:\1######\3
此字符串将使用第一个和第三个替换组。
因此,在您的情况下,您的配置应如下所示:
mutate {
gsub => ["message", "(\d{6})(\d{6})(\d{4})", "\1######\3"]
add_tag => "Masked CardNo"
}
此外,您的正则表达式\d{6}\d{4}\d{4}
与16位信用卡号匹配是错误的,第二个\d
需要抓取6个字符。