로그 모니터링 환경 구축 : Elastic stack with Docker

Record For a Better Life ·2023년 5월 28일
0

현재 진행중인 프로젝트의 로그를 어떻게 모니터링할지 고민하다가, 이전부터 사용하고 싶었던 ELK 스택을 적용해보기로 했다.

ELK를 하나씩 세팅하기에는 상당히 오랜 시간이 걸릴 듯 하여, Docker & Docker Compose를 사용해서 쉽게 구성할 수 있는 컨테이너가 제공되어있기에 클론받아왔다.

docker-elk 컨테이너를 제공하는 레포는 다양하지만, 그 중 가장 유명한 아래 레포지토리를 사용했다.
https://github.com/deviantony/docker-elk.git

버저닝으로 인해 버전마다 설정 파일이 꽤나 다르며, 버전으로 인한 에러 상황도 잦았기에 나는 현재 버전에서 다운그레이드 하여 7. * 버전 사용했다.

$ git clone -b release-7.x https://github.com/deviantony/docker-elk.git

셋팅 방법은 비교적 간단하다. 적용할 비밀번호 정도를 설정해주면 된다.

cd docker-elk

이렇게 도커 폴더에 들어가게 되면 다음과 같은 폴더 및 파일들이 존재한다.

LICENSE README.md docker-compose.yml elasticsearch extensions kibana logstash setup




파일을 하나씩 설정해보자.

1. docker-compose.yml

~/docker-elk$ vi docker-compose.yml
setup:
	environment:
      ELASTIC_PASSWORD:

이부분을 원하는 비밀번호로 바꾸어주면 된다.


2. elasticsearch.yml

~/docker-elk$ vi elasticsearch/config/elasticsearch.yml
xpack.security.authc.api_key.enabled: true
xpack.security.enabled: true

xpack.security.enabled는 기본적으로 false로 되어있으며, true로 지정해줘야 xpack에서 제공하는 기본적인 보안 기능을 적용할 수 있다. 적용하지 않는다면 Elasticsearch에 연결하는 모든 클라이언트가 사용자 인증을 거치지 않고도 클러스터에 접근할 수 있게 되며 심각한 보안 위협을 초래할 수 있다.


3. kibana.yml

~/docker-elk$ vi kibana/config/kibana.yml
elasticsearch.username: elastic
elasticsearch.password: password

kibana.yml에서도 마찬가지로 elasticsearch와 연동하기 위한 아이디 및 비밀번호를 설정해주면 된다. username의 경우 default는 elastic으로 되어있다.

4. logstash.yml

~/docker-elk$ vi logstash/config/logstash.yml
xpack.monitoring.enabled: true
xpack.monitoring.elasticsearch.username: elastic
xpack.monitoring.elasticsearch.password: password

Logstash에서 x-pack 모니터링 기능을 활성화 할 수 있다.

5. logstash.conf

~/docker-elk$ vi logstash/pipeline/logstash.conf

logstash를 통해 로그가 들어오고, 필터링을 거쳐 elasticsearch로 보내지는 파이프라인의 구성파일이다.

filter {} 부분에는 로그를 특별히 파싱하거나 필터링 하는 패턴을 입력하면 된다. 보통 message라는 필드 안에 찍혔던 로그가 그대로 들어가기 때문에, json이나 특정 형태로 필터링하고 싶을 때 이 기능을 사용한다.
특정 패턴을 가진 로그를 파싱하기 위해서 grok을 자주 사용하고는 한다. elasticsearch에서는 패턴을 통한 output을 미리보기 할 수 있도록 하는 기능을 제공한다.

output에는 설정한 elastic의 아이디 및 비밀번호를 입력해주면 된다.

output {
        elasticsearch {
                hosts => "elasticsearch:9200"
                user => "elastic"
                password => "yourpassword"
        }
}

이상으로 간단한 설정이 마무리되었다. 이후 Filebeats를 사용해서 logfile의 변화를 감지하여, 변경사항을 logstash로 보내면 로그 모니터링 환경이 완성된다.
profile
모든 것을 기록하는 벨로그 💻

0개의 댓글