현재 진행중인 프로젝트의 로그를 어떻게 모니터링할지 고민하다가, 이전부터 사용하고 싶었던 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"
}
}