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
posted @ 2020-11-23 16:26  技术颜良  阅读(1840)  评论(0编辑  收藏  举报