예전 포스팅에서 regRFC5424 을 간략하게 했었습니다. 마침 Grok 보고 있다가 RFC5424를 리팩토링 해보겠습니다. 여기가 주요 포인트 입니다. g.Parse("%{NUMBER:version:int} %{TIMESTAMP_ISO8601:datetime} %{USERNAME:hostname} %{DATA:application} %{DATA:structure_data} %{DATA:message_id} %{GREEDYDATA:msg}", string(r)) hostname, application, structure_data, message_id 는 명확하게 패턴을 몰라 USERNAME, DATA로 정의하였습니다. 미스매치 나는 로그가 있다면 상황에 따라 다른 패턴으로 정의 필요합니다. 다음과 같은..
Grok 패턴은 로그 파싱을 편하게 하기 위해 나왔습니다. 아래 patterns.go를 봐보면, 정규식들의 집합체입니다. 그래서 정규식을 직접 쓰는 것보다 간편하게 string을 파싱하는데 유용합니다. 동시에 매칭 시 Key, Value를 사용할 수 있어 깔끔한 코딩을 하는 데 도움이 됩니다. (어느정도는... 만능은 아닙니다.)이번 포스팅에는 간단하게 오픈소스 검증만 하고, 다음 포스팅에 예전에 만들었던 syslog파싱에 적용해 봐야겠습니다. 정의되어있는 grok 패턴들... https://github.com/vjeantet/grok/blob/master/patterns.go package main import ( "fmt" "github.com/vjeantet/grok" ) func main() { ..
이전 포스팅에서 오류가 나는 경우가 있어서 직접 작성하였습니다. 정규식으로 한 줄만 처리하도록 하였습니다. '//' 주석만 처리할 수 있습니다. 특별한 설명 없이 바로 가보실까요? 테스트 json파일 { "service_ip": "1.1.1.1", // 안아ᄋᆫ안 "node_name": "node_1", //kljfds "info": { // kjfdklsj "service_name": "TheGolangOfFuture",// jkjdsj_kfdjs!#@#$%^^&*()()_ jfj // jdjd// "desc": "미래의 고"// 안아ᄋᆫ안안ㅇ } } 결과는 다음과 같습니다. package main import ( "encoding/json" "fmt" "os" "path" "regexp" ) type..