반응형
안녕하세요.
로그 통합하는 과정에서 logstash, filebeat를 최대한 활용하는 과정에서 생긴 내용을 정리하는 글입니다.
log format
각각의 application 공통 로그의 형식은 같다.
error, info 등의 활용은 다르다.
logstash vs filebeat
각각의 application은 파일 형태로 남기고 있다.
현 상태에서 logstash로 별도로 보내는 log4j 추가가 적합한가를 고민하게 됐는데요.
기존 개발자들이 로그를 보던 방식은 유지하고, 기능의 확장을 선택하였습니다.
추후에 logstash에서 custom ui를 위해 kafka 같은 메시징 서버에 전송으로 추가 확장을 생각하게 되었습니다.
또, container로 전환했을 때 filebeat container log를 활용하는 것도 괜찮다고 생각이 들었습니다.
그러나 기존에 file을 생성하지 않았다면 굳이 IO를 발생시키진 않았을 것 같습니다.
설정
filebeat.yml 설정은 아래와 같습니다.
# filebeat.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/service1/\*/\*.log
tags: [ "service1", "user", "multiline"]
multiline.pattern: '(\d{1,2}:\d{2}:\d{2}.\d{3})\[http.*'
multiline.negate: true
multiline.match: after
fields:
app_id: "users"
- type: log
enabled: true
paths:
- /var/log/service1/\*.log
# ex) /var/log/service1/err.log
# ex) /var/log/service1/request.log
tags: [ "system" ]
fields:
app_id: "system"
- filebeat.inputs: 입력 설정
- type: log, filestream (실험 타입) ...
- paths: 수집할 파일 경로
- tags: 태그 추가
- fields[key]: 필드 추가
- multiline:
- pattern: 정규표현식 기준으로 append할 line을 정의
- negate: 아래 이미지 캡처함
- match: 패턴 적용할 위치 (after 예제)
non 멀티라인 vs 멀티라인: Kibana discovery
위 캡처는 실제 키바나 로그입니다.
한 메시지 묶음으로 볼 수 있는 장점이 있으나 비동기 로직의 경우 Thread가 여러 줄로 나뉠 것 같아서 실제 운영에서 수정할 필요는 있지 않을까 생각이 듭니다.
이해가 잘 되지 않는 부분이 있어 설정을 변경하며 하나씩 테스트하는 과정이 쉽지 않은 것 같습니다.
감사합니다.
반응형