•
Elastic Stack의 의미와 시스템 구성 방안
•
Filebeat, Logstash, Kibana의 설치 방법
•
Kibana를 통해서 데이터를 시각화 하는 방법
•
Elastic Stack의 가용성을 확보하기 위해 이중화하는 방법
8.1 Elastic Stack이란
: Elastic Stack은 로그를 수집, 가공하고 이를 바탕으로 분석하는데 사용되는 플랫폼을 의미
: 로그를 전송하는 Filebeat, 전송된 로그를 JSON 형태의 문서로 파싱하는 Logstash, 파싱된 문서를 저장하는 ElasticSearch, 데이터를 시각화할 수 있는 Kibana로 구성
1.
Filebeat는 지정된 위체이 있는 로그 파일을 읽어서 Logstash 서버로 보내주는 역할을 한다.
⇒ Filebeat는 로그 파일을 읽기만 하고 별도로 가공하지 않기 때문에 로그 파일의 포맷이 달라지더라도 별도의 작업이 필요하지 않다.
⇒ 로그 파일의 포맷이 달라지면 로그 파일을 실제로 파싱하는 Logstash의 설정을 바꿔주면 되기 때문에 Filebeat와 Logstash의 역할을 명확하게 나눠서 사용하는 것이 좋다.
2.
Logstash는 Filebeat로부터 받은 로그 파일들을 룰에 맞게 파싱해서 JSON 형태의 문서로 만드는 역할을 한다.
⇒ 하나의 로그에 포함된 정보를 모두, 혹은 일부 필드만 파싱해서 JSON 문서로 만들 수 있으며 파싱 시 다양한 패턴을 사용가능하나 대부분 grok 패턴을 이용해서 파싱
3.
ElasticSearch는 Logsatsh가 파시앟ㄴ JSON 형태의 문서를 인덱스에 저장, 이때의 ElasticSearch는 데이터 저장소 역할을 수행
⇒ 대부분의 경우 날짜가 뒤에 붙는 형태로 인덱스가 생성되며 해당 날짜의 데이터를 해당 날짜의 인덱스에 저장
4.
마지막으로 Kibana는 ElasticSearch에 저장된 데이터를 조회하거나 시각화할 때 사용
⇒ 데이터를 기반으로 그래프를 그리거나 데이터를 조회할 수 있음, Elastic Stack에서 사용자의 인입점을 맡게 됨
8.2 Filebeat 설치하기
파일 이름 | 역할 |
fields.yml | Filebeat가 Logsatsh를 거치지 않고 직접 ElasticSearch에 쓸 때 사용하는 타입과 필드들을 정의 |
filebeat.reference.yml | filebeat.yml 파일에서 설정할 수 있는 모든 설정들이 에제 형식으로 제공, 이 파일의 내용을 참고해서 filebeat.yml 파일을 설정하면 된다. |
filebeat.yml | Filebeat가 실행하면서 읽는 환경 설정 파일로 여기에 설정한 내용을 바탕으로 Filebeat가 설정 |
modules.d | Filebeat가 직접 JSON 파싱까지 할 때 사용하는 환경 설정들을 저장하는 디렉터리 |
filebeat.yml 파일 예제
8.3 Logstash 설치하기
파일 이름 | 역할 |
logstash.yml | Logsatsh와 관련된 설정을 할 수 있는 기본 설정 파일, 워커의 개수는 몇 개로 할지, 한 번에 처리할 배치의 사이즈는 어느 정도로 할지 등 전반적 사항을 설정 |
conf.d | 파싱에 사용할 플러그인과 그에 따른 파싱 룰을 정의하는 설정 파일이 모여 있는 디렉터리 |
jvm.options | Logstash를 실행할 때 함께 설정할 JVM 옵션들을 설정하는 파일, GC 방식, 힙 메모리 등 JVM과 관련한 옵션을 설정 |
log4j.properties | 로그 파일 기록과 관련된 설정에 사용하는 파일 |
•
logstash.yml
: logstash.yml에서 제공하는 기본 설정값은 특별히 튜닝할 부분이 없지만 조금 더 성능을 끌어내야할 필요가 있을 때 pipeline.workers, batch.size, delay 등을 튜닝
파일 이름 | 역할 |
pipeline.workers | Logsatsh가 파싱 시 사용 워커의 개수를 설정, 기본 CPU 코어 수로 설정되며 CPU 사용률을 높이고 더 많은 양을 처리하기 위해 코어 수보다 많게 설정하기도 함 |
pipeline.batch.size | 하나의 워커가 파싱하기 위한 로그의 단위를 의미, 125개 기본값으로 커지면 한번에 처리양이 늘지만 처리 속도는 떨어지는 경우가 생김 |
pipeline.batch.delay | 하나의 워커가 파싱을 하기 위해 로그를 모으는 시간을 의미, 125개의 로그가 쌓이지 않아도 여기에 설정한 시간이 지나면 자동으로 파싱 |
•
conf.d
◦
*.conf와 같이 정의
nginx-logs.conf 파일 작성하기
◦
Logsatsh 로그 파일 확인하기
•
elasticsearch output을 수정하여 ElasticSearch 서버로 보낼 수 있다.
8.4 Kibana를 통해 로그 조회하기
: 추후 실습 진행
8.5 Kibana로 시각화하기
: 추후 실습 진행
8.6 Elastic Stack의 이중화
: Elastic Stack을 구축한다면 각 구성 요소에 장애가 발생해도 동작할 수 있도록 이중화하는 작업이 필요
: Filebeat, Logstash, ElasticSearch, Kibana 이 네 가지 요소를 이중화할 수 있는지
•
Filebeat
: 로그 수집의 대상이 되는 서버에서 직접 동작하기 때문에 별도의 이중화 구성이 필요 없음
: 서버에 장애가 발생해서 서비스에서 제외되거나 하면 로그 자체가 쌓이지 않으므로 이중화 구성에 대해서 크게 고민할 필요 없음
•
Logsatsh
: Logstash는 Filebeat로부터 로그를 전달받아서 파싱한 후에 JSON 문서로 변환하여 ElasticSearch에 문서를 저장하는 역할
: 때문에 Logsatsh 서버군에 장애가 발생하여 동작하지 않는다면 ElasticSearch에 로그를 넣지 못하게 되고 로그 수집 불가 상태가 됨, 이중화가 필요
◦
로드밸런서를 활용하는 방안
: 로드밸런서에 VIP를 설정하고 포트를 바인딩한 후에 백엔드에 n대의 Logstash 서버를 배치
: 이 경우, Filebeat는 해당 로드 밸런서로 요청을 보내면 로드 밸런서에서 요청을 분배하여 처리해줌
◦
Filebeat 서버에서 환경을 설정할 때 다수의 Logstash 서버를 기록하는 것
: 다수의 Logstash 서버를 배열 형태로 기입한 후, loadbalance 옵션을 키면 됨
8.7 마치며
1.
Elastic Stack은 Filebeat, Logstash, ElasticSearch, Kibana 이렇게 여러 개의 컴포넌트들을 조합하여 로그를 수집, 분석, 시각화하는 시스템을 의미
2.
Filebeat는 로그가 발생하는 애플리케이션 서버에 설치하며 애플리케이션에서 발생하는 로그를 그대로 Logstash에 저장하는 역할을 수행
3.
Logstash는 Filebeat로부터 전달 받은 로그들을 파싱하여 JSON 형태의 문서로 만든 다음 ElasticSearch 클러스터에 저장하는 역할
4.
ElasticSearch는 Logstash가 파싱한 JSON 형태의 문서를 저장하는 저장소 역할을 수행
5.
Kibana는 ElasticSearch에 저장된 로그들을 조회하거나 시각화하는 역할
6.
Elastic Stack의 각 요소들을 각각의 특성에 맞게 이중화할 수 있음, Logstash는 LB를 사용하거나 Logstash 서버를 리스팅하여 이중화할 수 있고
Kibana의 경우 Active/Stanby 방식으로 Active 서버에 문제가 발생했을 경우 StandBy 서버를 실행시켜서 장애가 나지 않은 것처럼 사용 가능