logstash grok 다중 일치

2149 단어 elk
업무 장면: 새 버전 로그는 필드를 추가해야 하며, 새 버전과 낡은 로그가 일치해야 합니다.
버전:logstash-2.3
filter {
    grok {
         match => [
            "message" , "%{DATA:hostname}\|%{DATA:tag}\|%{DATA:types}\|%{DATA:uid}\|%{GREEDYDATA:msg}",
            "message" , "%{DATA:hostname}\|%{DATA:tag}\|%{GREEDYDATA:msg}"
         ]
        remove_field => ['type','_id','input_type','tags','message','beat','offset']
    }
}

4
filter {
    grok {
	match => {
	    "message"=>[
		"%{DATA:hostname}\|%{DATA:tag}\|%{DATA:types}\|%{DATA:uid}\|%{GREEDYDATA:msg}",
		"%{DATA:hostname}\|%{DATA:tag}\|%{GREEDYDATA:msg}"]
	    }
    }
}
DATA와 GREEDYDAYA를 너무 많이 사용하면 성능 cpu 부하가 심각해질 수 있다.정규 일치나 루비 코드 블록을 많이 사용하는 것을 권장합니다
filter {
     grok {
        match => [
               "message", "(?[a-zA-Z0-9._-]+)\|%{DATA:tag}\|%{NUMBER:types}\|(?[0-9]+)\|%{GREEDYDATA:msg}",
               "message", "(?[a-zA-Z0-9._-]+)\|%{DATA:tag}\|%{GREEDYDATA:msg}",
        ]
       remove_field => ['type','_id','input_type','tags','message','beat','offset']
    }
}
filter {
    ruby {
        code =>'
        arr = event["message"].split("|")
        if arr.length == 5
            event["hostname"] = arr[0]
            event["tag"] = arr[1]
            event["types"] = arr[2]
            event["uid"] = arr[3]
            event["msg"] = arr[4]
        elsif arr.length == 3
            event["hostname"] = arr[0]
            event["tag"] = arr[1]
            event["msg"] = arr[2]
        end'
       remove_field => ['type','_id','input_type','tags','message','beat','offset']
    }
}

참조 문서:https://github.com/chenryn/logstash-best-practice-cn/blob/master/filter/grok.md

좋은 웹페이지 즐겨찾기