logstash实现敏感信息脱敏及超长字符截取
我们通过filebeat收集的日志通常没有进行敏感信息的脱敏工作,以及一些base64超长字符如果不做处理,存储到es及在kibana展示也会耗费性能。
针对这两个问题我们可以进行如下配置:
1.设置超长字符截取
进入logstash安装目录,config文件夹下新建文件logstash_to_es相关配置如下:
filter {
if [type] == "filebeat" {
grok {
match => [
"message","%{LOGLEVEL:level}",
"message","%{DATA:message}"
]
}
if [level] == "DEBUG" {
drop { }
}
if[message]=~"ASPECT"{
drop { }
}
if [message]=~"OVERLENGTH"{
grok{
match => {
"message" => "(?<MYELF>([\s\S]{500}))" #截取带RAW-CONTENT关键字的日志500个字符 作为MYELF的值
}
}
mutate {
rename => {"MYELF" => "message"} #重命名字段MYELF为message
}
}
if[message]=~"traceId"{
grok {
match => ["message","%{UUID:traceId}"] #自定义kibana筛选关键字
}
}
}
}
2.敏感字段脱敏
进入logstash安装目录,config文件夹下新建文件logstash_to_es相关配置如下:
filter {
if [type] == "filebeat" {
ruby {
path => "/usr/local/logstash-6.0.1/config/text.rb"
script_params => { "message" => "message" }
}
}
}
text.rb也就是我们配置的敏感字段脱敏ruby的过滤条件。
def register(params)
@message = params["message"] # 通过params获取script_params传参
end
def filter(event)
msg = event.get(@message)
if(msg =~ /certNo:(.*)/) # 获取日志中的关键字certNo
cerNoExp = /(?<=certNo:)(\w{6})(\w{8})(\w{4})/
cerNoExp =~ msg
cerNoInFor = $2
msg.gsub!(cerNoInFor, "******")
end
if(msg =~ /mobileNo:(.*)/) # 获取日志中的关键字mobileNo
mobileNoExp = /(?<=mobileNo:)(\w{3})(\w{4})(\w{4})/
mobileNoExp =~ msg
mobileNoInFor = $2
msg.gsub!(mobileNoInFor, "****")
end
#event.set("msg", msg)
return [event]
end