알람 및 키바나 대시보드 구성과 ES성능 향상을 위해서 로그에서 필요한 부분만 가져오게끔 하는 파싱룰이 정말 중요하다. logstash에는 grok이라는 filter가 있는데 해당 filter를 통해서 원하는 데로 로그를 파싱 할 수 있다.
grok filter란?
Grok filter plugin | Logstash Reference [8.12] | Elastic
Variable substitution in the id field only supports environment variables and does not support the use of values from the secret store.
www.elastic.co
정규화된 패턴을 통하여 로그를 파싱 할 수 있는데, 기본적인 패턴은 grok-patterns 파일을 참조하면 알 수 있다.*7 버전에서는 grok-patterns 파일이 기본패키지에 patterns하단에 저장되어 있던 거로 기억하는데,
8 버전부터는 다른 경로에 있는 것으로 보인다.
기본적으로 아래와 같이 패턴 구문으로 구성된다.
%{SYNTAX:SEMANTIC}
* SYNTAX = 패턴명 : 정규화된 패턴 혹은 커스텀패턴의 이름이다.
* SEMANTIC= 식별자명 : 인덱스에 쌓을 때의 field명이다.
아래는 grok filter 예시문이다.
#로그
Feb 17 14:45:11 logmonitortest sshd[138557]: PAM service(sshd) ignoring max retries; 6 > 3
#파싱룰
%{SYSLOGBASE} PAM service\(sshd\) ignoring max retries\; %{INT:[failcount]} \> %{INT}
해당 룰을 아래 Test grok pattern에 접속하여 돌려보면 결괏값이 나온다.
Test Grok Pattern
SYSLOGBASE라는 패턴을 통해 기본적인 timestamp와 program pid 등은 저장이 되었고,
%{INT:[failcount]} 패턴을 통하여 실패 횟수를 failcount라는 field에 저장했다. 추후 키바나에서 해당 로그를 통하여 시각화를 할 수 있다.
*만약 특정 패턴 데이터를 인덱스에 굳이 쌓고 싶지 않다면 식별자를 부여하지 않으면 된다. (파싱룰 끝자리 %{INT} 참고)
만약 정규화된 패턴 이외에 커스텀패턴을 원한다면 grok 옵션의 patterns_dir을 통해 커스텀패턴을 만들 수 있다.
위에 예시로 생성한 파싱룰을 ZOSYSPATTERN이라는 커스텀 패턴으로 선언하여 진행해 보겠다.
커스텀패턴을 통하여 파싱 하더라도 기존과 같이 동일한 결괏값이 나오는 걸 확인할 수 있다.
로그파싱룰을 잡을 때 최대한 정규화된 패턴을 이용하되, 필요시 커스텀하는 게 좋아 보인다.
처음 테스트를 진행할 때 모든 로그에 대해 수집하여 각 로그별로 룰을 하나씩 잡다 보니 굉장히 많은 시간이 소요되었는데, %{SYSLOGBASE}라는 시스로그 기본 패턴을 알게 되어 룰 작성 시간과 룰 길이가 상당 부분 줄어들었다.
'Project > ElasticStack' 카테고리의 다른 글
beat-rsyslog 연동 이슈 (1) | 2024.09.26 |
---|---|
ElastAlert2 Alert UTC 타임존 문제 해결 (0) | 2024.09.25 |
로그 모니터링 시스템 구축 도전기 #1 index? query? documents? (0) | 2024.02.02 |
로그 모니터링 시스템 구축 도전기 #0.1 ElastAlert (0) | 2024.01.28 |
로그 모니터링 시스템 구축 도전기#0 (0) | 2023.02.09 |