在logstash中屏蔽信用卡号的中间6位数字

时间:2019-01-30 04:11:37

标签: logstash elastic-stack logstash-grok logstash-configuration

要求以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位也是有帮助的。

1 个答案:

答案 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个字符。