회사에서 프로젝트에 처음으로 ELK 를 도입하여 로그 모니터링을 하기로 했었다.
그때 구성했던 내용을 바탕으로 가이드를 적어본다.
목차
0. 구성
1. Filebeat
2. ELK
a. LogStash
b. Elastic Search
c. Kibana
0. 구성
- 로그 파일이 저장되는 서버에서 로그 수집을 위한 Filebeat 를 도커 컨테이너로 구성
- 로그를 수집, 변환, 시각화(Kibana) 하기 위한 서버의 도커 컨테이너
1. Filebeat
- 개요
- 로그 파일 수집 및 전송하는 역할
- 로그가 생성되는 서버에 도커 컨테이너로 올라감
- 구성
- Dockerfile
- filebeat 이미지를 가져와 만듦
- Dockerfile

- docker-compose.yml
- 위 Dockerfile 을 통해 filebeat 컨테이너 구성하도록 함
- volumes : 서버에서 수집 중인 로그 파일 디렉토리들을 시스템 별로 각각 가리키도록 함
- type, source, target : 컨테이너 올렸다 내릴때마다 filebeat도 재실행 되도록 함
- networks : Logstash가 같은 서버에 있기 때문에 Logstash 측으로 데이터를 전송하기 위해 동일 network 설정

- filebeat.yml
- filebeat 설정
- filebeat.inputs : filebeat가 바라보는 경로의 파일 변경 감지
- multiline : 기본적으로 데이터를 한 줄 단위로 끊어서 전송하게 되어 있지만, 이 설정을 통해 정규식이 일치한다면 여러줄을 한번에 보내도록 함
- output.logstash : inputs에서 변경 감지한 데이터를 logstash로 전송

2. ELK
- ELK 도커 컨테이너 올리기
- 아래 깃허브 repository clone
GitHub - deviantony/docker-elk: The Elastic stack (ELK) powered by Docker and Compose.
The Elastic stack (ELK) powered by Docker and Compose. - GitHub - deviantony/docker-elk: The Elastic stack (ELK) powered by Docker and Compose.
github.com
- 기본적인 Elastic Search, LogStash, Kibana에 대한 구성이 되어있고, 가장 상위의 docker-compose를 빌드하면 세개의 컨테이너가 올라가게 됨
- http://localhost:5601 로 kibana 접속하여 화면 확인
LogStash
- 데이터 수집, 변환, 전송하는 역할
- Filebeat에서 로그 파일을 수집하고 있으므로, LogStash에선 로그 데이터를 전달받아 변환 및 Elastic Search에 전송하는 역할을 수행하도록 함.
- logstash.conf : Logstash 설정 파일
- input : Logstash 로 들어오는 데이터에 대한 설정
- beats : 각종 beats 로 부터 어떤 port로 데이터를 전송받을지 설정 host : “0.0.0.0” 적용 시 모든 호스트로부터 전송 받겠다는 의미 위에서 설정한 Filebeat로부터 로그 데이터를 전송받기 위함
- input : Logstash 로 들어오는 데이터에 대한 설정

- filter (옵션) : 들어온 데이터를 가공하기 위한 설정
- grok : filter 플러그인 중 하나로, 문자열 패턴을 grok 규칙을 통해 가공 가능
- match : 특정 필드를 검사해 정규패턴에 해당되는 부분을 잘라 필드로 등록
- ${정규 패턴명:사용자정의 필드}
- overwrite : 기존의 필드에 가공된 내용을 덮어씌움
- date : 기본 date 필드를 원하는 포맷으로 가공
- grok : filter 플러그인 중 하나로, 문자열 패턴을 grok 규칙을 통해 가공 가능

- output : input 으로 들어온 데이터를 filter에서 가공하여 최종적으로 어디로 어떻게 내보낼지에 대한 설정
- 현재 설정은 여러 어플리케이션으로 부터 수집된 로그 데이터들을 각각 별도의 index 로 저장하고자 하기 위함
- LogStash에서 수집된 데이터 기본 필드인 log.file.path(파일 경로)를 통해 index를 구분해주었음
- 최종적으로 가공된 데이터가 ELK 컨테이너가 올라간 서버의 Elastic Search 로 전송되어 저장

Elastic Search
- Logstash에서 가공된 데이터가 document 형식으로 Elastic Search로 저장
- index는 하나의 테이블과 비슷한 개념
Kibana
- Elastic Search의 데이터 시각화 하는 역할
- Discover
- 연동된 Elastic Search의 모든 데이터를 확인 가능
- 기본적으로 Elastic Search에 생성된 index 별로 조회가 가능하며 filter 를 걸어 새로운 view를 생성 가능

- 각각의 시스템 별 index 구성
- filter를 걸어 모든 어플리케이션을 조회할 수 있는 view 생성

- Dashboard
- Discover의 데이터를 바라보며 기본 제공되는 테이블, 차트 등 플러그인을 통해 대시보드에 들어갈 앱을 생성, 이 앱들을 통해 대시보드를 구성

댓글 피드백은 언제나 환영합니다!
