filebeat를 이용한 웹로그 전처리.
processors: - include_fields: fields: "message" - if.contains: message: "?" then: - dissect: tokenizer: '%{clientip} %{} %{} [%{timestamp} %{}] "%{method} %{url}?%{param} %{}" %{status} %{}' field: "message" target_prefix: "" else: - dissect: tokenizer: '%{clientip} %{} %{} [%{timestamp} %{}] "%{method} %{url} %{}" %{status} %{}' field: "message" target_prefix: ""
{ "@timestamp": "2025-01-13T09:07:47.134Z",
"@metadata": {
"beat": "filebeat",
"type": "_doc",
"version": "8.17.0"
},
"status": "200",
"timestamp": "12/Oct/2015:02:42:00",
"uri": "/bbs/view.php?board_id=kor%5Fmedia&gul_no=1106&idx=17&m=4&upage=25&tpage=&PAGE=4",
"clientip": "192.168.71.168",
"url": "/bbs/view.php",
"param": "board_id=kor%5Fmedia&gul_no=1106&idx=17&m=4&upage=25&tpage=&PAGE=4",
"message": "192.168.71.168 - - [12/Oct/2015:02:42:00 +0900] \"GET /bbs/view.php?board_id=kor%5Fmedia&gul_no=1106&idx=17&m=4&upage=25&tpage=&PAGE=4 HTTP/1.1\" 200 37727",
"method": "GET"
}
{
"@timestamp": "2025-01-13T09:07:47.134Z",
"@metadata": {
"beat": "filebeat",
"type": "_doc",
"version": "8.17.0"
},
"status": "200",
"clientip": "192.168.71.168",
"uri": "/bbs/view.html",
"url": "/bbs/view.html",
"message": "192.168.71.168 - - [12/Oct/2015:02:42:00 +0900] \"GET /bbs/view.html HTTP/1.1\" 200 37727",
"timestamp": "12/Oct/2015:02:42:00",
"method": "GET"
}
script 프로세서를 사용하면 좀 더 우아(?)한 코드 작성도 가능.
processors: - include_fields: fields: "message" - dissect: tokenizer: '%{clientip} %{} %{} [%{timestamp} %{}] "%{method} %{uri} %{}" %{status} %{}' field: "message" target_prefix: "" - script: lang: javascript source: > function process(evt) { if (evt.Get("uri").match("\\?")) { var result = evt.Get("uri").split("?"); evt.Put("url", result[0]); evt.Put("param", result[1]); } else { evt.Put("url", evt.Get("uri")) } } # - if.contains: # message: "?" # then: # - dissect: # tokenizer: '%{clientip} %{} %{} [%{timestamp} %{}] "%{method} %{url}?%{param} %{}" %{status} %{}' # field: "message" # target_prefix: "" # else: # - dissect: # tokenizer: '%{clientip} %{} %{} [%{timestamp} %{}] "%{method} %{url} %{}" %{status} %{}' # field: "message" # target_prefix: ""
그런데 안 되네? 구문은 맞는데?
Exiting: error initializing processors: SyntaxError: inline.js: Line 9:3 Unexpected token ILLEGAL (and 14 more errors)PS D:\ELK\filebeat-8.17.0-windows-x86_64>
끙끙대다 첫 번째 주석 라인의 들여쓰기를 제거하니 정상 실행됨. 들여쓰기 간격이 같으면 주석 라인도 이어지는 코드로 인식한다는 얘기.
processors: - include_fields: fields: "message" - dissect: tokenizer: '%{clientip} %{} %{} [%{timestamp} %{}] "%{method} %{uri} %{}" %{status} %{}' field: "message" target_prefix: "" - script: lang: javascript source: > function process(evt) { if (evt.Get("uri").match("\\?")) { var result = evt.Get("uri").split("?"); evt.Put("url", result[0]); evt.Put("param", result[1]); } else { evt.Put("url", evt.Get("uri")) } }# - if.contains: # message: "?" # then: # - dissect: # tokenizer: '%{clientip} %{} %{} [%{timestamp} %{}] "%{method} %{url}?%{param} %{}" %{status} %{}' # field: "message" # target_prefix: "" # else: # - dissect: # tokenizer: '%{clientip} %{} %{} [%{timestamp} %{}] "%{method} %{url} %{}" %{status} %{}' # field: "message" # target_prefix: ""
윈도우용 VIM이 주편집기인데 yml 파일 편집을 하다보면 들여쓰기가 자동으로 적용될 때가 있다. (리눅스 VIM은 안 그런다) 그동안은 그냥 참고 썼는데 이번에 제대로 빡쳐서 yml 자동 들여쓰기 해제 기능 폭풍 검색. _vimrc에 다음 설정을 추가하면 해결된다.
autocmd FileType yaml setlocal ts=2 sts=2 sw=2 expandtab autoindent smartindent indentexpr=
역시 빡침 정도가 커야 문제 해결 가능성도 커진다.
댓글 없음:
댓글 쓰기