-
[도커 + 엘라스틱서치] Docker로 ElasticSearch ELK 스택 디플로이[IT] 공부하는 개발자/Open Source 2019. 8. 26. 00:54
도커를 사용하는 이유
- 다른 OS 플랫폼을 사용하는 유저들도 동일한 로컬 개발환경을 구성할 수 있다.
- 쉽고 간단한 버전 매니지먼트가 가능하다.
도커로 ELK 스택 디플로이
도커(Docker)를 이용하여 엘라스틱서치 + 키바나 + 로그스태쉬, 일명 ELK스택을 기동한다.
오리지널 빌드
별도 플러그인이나 config 수정이 필요하지 않으면 깃허브에서 공식 이미지를 그대로 pull해와서 그대로 빌드할수 있다. 키바나, 로그스태쉬 이미지를 pull한다. 버전명은 물론 편의에 따라 수정할 수 있다.
# docker pull docker.elastic.co/elasticsearch/elasticsearch:7.3.1 $ docker pull docker.elastic.co/kibana/kibana:7.3.1 $ docker pull docker.elastic.co/logstash/logstash:7.3.1
커스텀 빌드
엘라스틱서치의 경우, 한국어 분석기 플러그인인 'nori'를 함께 설치하기 위하여 DockerFile을 만들어 커스텀 빌드를 해보자.
$ vi Dockerfile
FROM elasticsearch:7.3.1 RUN /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch analysis-nori
Dockerfile 을 만든 후, 파일이 있는 디렉토리안에서 빌드 커맨드를 실행한다. elasticsearch-custom 이라는 이름으로 태그를 달아주었다.
$ docker build --tag elasticsearch-custom .
** 태그를 달지 않고 그대로 진행하는 경우, 후술할 키바나의 config 수정 파트는 건너 뛰기 바란다. default는 elasticsearch다.
컨테이너 런
$ docker run -p 9200:9200 -p 9300:9300 --name elk-e -e "discovery.type=single-node" elasticsearch-custom $ docker run -d --link elk-e:elasticsearch-custom --name elk-k -p 5601:5601 docker.elastic.co/kibana/kibana:7.3.1 $ docker run -d --link elk-e:elasticsearch-custom --name elk-l -p 5044:5044 docker.elastic.co/logstash/logstash:7.3.1
1) 엘라스틱서치 RUN
엘라스틱서치를 커스텀 빌드할때 elasticsearch-custom 이라는 태그를 달았으므로, elasticsearch-custom의 이름의 이미지를 지정하여 컨테이너에 올려주었다. --name 옵션으로 컨테이너의 이름을 지정해주는 것이 여러모로 편리하다. -e 옵션은 환경변수를 새로 지정하거나, 변경하는 옵션인데, 예제에서는 사용하지 않았지만 JVM 의 Heap 메모리를 설정할 수 있는 ES_JAVA_OPTS 정도는 기억해두는 것이 좋다.
-e ES_JAVA_OPTS="-Xms16g -Xmx16g"
2) 키바나 RUN
컨테이너 'elk-k'에 아까 pull해온 이미지 kibana 7.3.1을 올린다.
3) 로그스태쉬 RUN
컨테이너 'elk-l'에 아까 pull해온 이미지 logstash 7.3.1을 올린다.
* 커맨드뒤에 /dev/null 2>&1 를 붙여주면, 컨테이너는 백그라운드 실행되고 stdout은 /dev/null 으로 가게된다. 콘솔에 로그메시지가 자동으로 출력되는 것이 번거로울때에 붙여주면 좋다.
$ docker run -d --link elk-e:elasticsearch-custom --name elk-k -p 5601:5601 docker.elastic.co/kibana/kibana:7.3.1 /dev/null 2>&1
컨테이너 프로세스 확인
$ docker container ps
컨테이너가 잘 돌고 있다.
컨피그 수정
$ docker container exec -it elk-k bash bash-4.2$ vi config/kibana.yml
키바나 세팅을 수정하기 위하여 키바나 컨테이너의 shell에 액세스한다. 키바나에 연동할 엘라스틱서치 이미지이름을 바꿔주기 위해서이다. default 이미지 이름이 elasticsearch로 되어있는데, elasticsearch-custom으로 빌드했으므로 config에서 아래와같이 수정해주었다.
bash-4.2$ cat config/kibana.yml # # ** THIS IS AN AUTO-GENERATED FILE ** # # Default Kibana configuration for docker target server.name: kibana server.host: "0" elasticsearch.hosts: [ "http://elasticsearch-custom:9200" ] #elasticsearch.hosts: [ "http://elasticsearch:9200" ] xpack.monitoring.ui.container.elasticsearch.enabled: true
그리고 컨테이너 쉘을 빠져나와 컨테이너를 재시작해준다.
bash-4.2$ exit $ docker container restart elk-k
같은 작업을 logstash에서도 해준다. (logstash는 설명을 생략한다.)
동작 확인
각 컨테이너의 포트로 접속했을 때 아래와 같이 기동되면 정상이다.
도커 커맨드
컨테이너 쉘 실행
# docker container exec [OPTIONS] CONTAINER COMMAND [ARG...] $ docker container exec -it elk-e $ docker container exec -it elk-e bash
옵션 상세는 링크를 참조.
컨테이너 로그 체크
# docker container logs [OPTIONS] CONTAINER $ docker container logs elk-e $ docker container logs elk-l $ docker container logs elk-k
컨테이너 스탑, 삭제
$ docker container stop elk-container $ docker container rm elk-container
컨테이너 프로세스 체크
$ docker container ps
엘라스틱서치 관련 포스팅
2019/09/08 - [[IT] 공부하는 개발자/Open Source] - [엘라스틱서치] ElasticSearch & 키바나 시큐리티 기능 구현
2022.02.20 - [[IT] 공부하는 개발자/Open Source] - [ELK Logstash] config 파일 작성 예시 - input, filter, output
'[IT] 공부하는 개발자 > Open Source' 카테고리의 다른 글
logstash 'unknown setting *** for jdbc' 에러 메시지 (0) 2020.12.07 [Kafka] 터미널에서 카프카 토픽 생성, 발행, 컨슘하기 (0) 2020.05.07 [엘라스틱서치] ElasticSearch & 키바나 시큐리티 기능 구현 (0) 2019.09.08 [ElasticSearch 엘라스틱서치] 멀티 필드 맵핑, 정렬과 검색을 동시에 (2) 2019.08.21 NOOK Glowlight plus 누크뿔 크레마 설치하기 [2019년판] (윈도우/맥OS) (2) 2019.08.12