- 사용하는
elasticsearch
와kibana
의 버전은 8.11.1입니다
1-1. 8.x 버전 끼리는 크게 차이 없을 것으로 예상되나 이외의 버전에서 진행에 문제가 생긴다면 반드시 검색을 통해 확인해 봐야합니다elastic
에서 제공하는 공식elasticsearch
와kibana
이미지를 받아 세팅하는 방법만 다루고있습니다docker compose
를 사용하지 않고, 설명하지 않습니다. 관련 정보를 얻고싶다면 다음의 링크를 통해 학습해주세요.
링크: Getting started with the Elastic Stack and Docker Compose: Part 1
이 글을 작성하는 이유는 되게 간단한 설정인데도 elastic
에서 제공하는 공식문서가 복수 존재하고, 개인이 연습하기 위해 필요한 내용이 심화 내용과 함께 섞여있어 이 글을 보는 사람들은 나처럼 고생하지 않았으면 하는 마음에 작성하게되었다. (물론 이 글에서 작성하는 것보다 이후 작성할 Java Low Level REST Client
를 연결하는 것의 난이도가 숨막히게 어려웠다)
매 단계마다 우선적으로 참고할만한 사이트나 공식문서의 링크를 남겨두지만 영어로 되어 있기도하고 처음 접하는 사람에게는 어려울 수 있기 때문에 과정을 설명하며 작성하겠다.
그럼 바로 시작!
링크: Install Elasticsearch with Docker
링크: Understanding Docker Networking
링크: Networking overview
컨테이너 간의 통신을 편하게 하기 위해서는 docker network
를 사용할 필요가있다.
만약 자신이 elasticsearch
만 사용하고 나머지는 필요없다 생각되면 해당 단계는 건너 뛰어도 된다.
docker network create elastic
=> docker network create <생성할 네트워크 이름>
docker pull docker.elastic.co/elasticsearch/elasticsearch:8.11.1
docker pull docker.elastic.co/kibana/kibana:8.11.1
=> docker pull <다운 받을 이미지의 경로>
docker run --name es01 --net elastic -p 9200:9200 -it -m 1GB docker.elastic.co/elasticsearch/elasticsearch:8.11.1
docker run --name kib01 --net elastic -p 5601:5601 docker.elastic.co/kibana/kibana:8.11.1
=> docker run --name <시작할 컨테이너 이름> --net <사용할 네트워크 이름> -p <호스트 포트>:<컨테이너 포트> <사용할 이미지>
=> -it 옵션: 컨테이너 내부에 대화형 bash shell 생성
=> -m 1GB: 컨테이너에 할당될 메모리의 최대 크기를 1GB로 설정
위에 2개의 명령어를 보여줬지만, 백그라운드로 실행하지 않는 이상 터미널을 추가로 열러줘야할 것이다.
그리고 여기서 중요한 과정이 있는데, "가장 처음 elasticsearch
를 실행할 때만" 아래와 같은 것이 출력 될 것이다.
이것들은 바로, 또 계속 사용할 것들이기 때문에 따로 메모장에라도 적어두고 사용하면 된다.
물론 fingerprint
를 제외하고는 모두 재발급이 가능하니 실수로 넘기거나 지워버린 사람들은 아래의 명령어를 이용해 재발급 받아서 사용하자 (아래 2개는 유효시간이 30분 밖에 안되기도 하다)
docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic
=> 비밀번호 재발급
docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana
=> kibana enrollment token 재발급
docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s node
=> es01의 cluster enrollment token 재발급
fingerprint
의 경우 elasticsearch
내부에 존재하는 https 인증서
를 사용하는 것으로 대체할 수 있으나 그래도 재발급을 하고 싶다면 아래의 링크를 참고하면 된다.
링크: Where can I see my Certificate Fingerprint?
docker
에서 로컬 호스트로 인증서를 복사하는 명령어는 아래와 같다.
docker cp es01:/usr/share/elasticsearch/config/certs/http_ca.crt .
=> docker cp <컨테이너 이름>:<인증서 경로> <인증서를 저장할 로컬 호스트의 경로>
curl --cacert http_ca.crt -u elastic:$ELASTIC_PASSWORD https://localhost:9200
=> curl --cacert <인증서 경로> -u <elasticsearch 유저명>:<비밀번호> <요청 경로>
http_ca.crt
는 위에서 설명한 elasticsearch
내부에 들어있는 https 인증서
다.
위 명령어는 해당 인증서가 있는 경로에서 실행되었으므로 경로가 다르다면 수정해야한다.
추가적으로 Window
에서는 powershell
에서 curl 명령어
를 지원하지 않아 cmd
를 이용해야하고 cmd
에서는 해당 명령어를 실행하면 아래와 같은 문제가 발생한다.
curl: (60) schannel: CertGetCertificateChain trust error CERT_TRUST_REVOCATION_STATUS_UNKNOWN
More details here: https://curl.se/docs/sslcerts.html
Window
에서는 curl
이 CRL
을 확인 할 수 없기 때문에 발생하는 문제인데 이를 무시하는 옵션인 --ssl-no-revoke
를 추가하면 요청을 보내고 응답을 받을 수 있다.
curl --ssl-no-revoke --cacert http_ca.crt -u elastic:$ELASTIC_PASSWORD https://localhost:9200
해당 문제관련 토론은 아래의 링크에서 확인해 볼 수 있다.
링크: cURL request not working with CA certificate on Windows
위와 같은 과정을 모두 진행했다면(1-4는 무관) http://localhost:5601/ 를 통해 Kibana
에 접속이 가능하다.
성공적으로 접속했다면 아래와 같은 이미지가 나올텐데 위에서 언급했듯 elasticsearch
를 처음 실행했을 때 제공하는 Kibana enrollment token
을 입력하면 되고, 없다면 재발급해서 넣으면된다.
이후에는 Kibana verification code
를 추가로 입력해줘야한다.
해당 코드는 팝업에 적혀있다시피 현재 실행시키고 있는 Kibana 서버
의 터미널을 확인하면 출력되어 있으며, 거기서 확인을 못한 경우, Kibana 터미널
에서 아래의 명령어를 실행하면 재발급된다.
bin/kibana-verification-code
마지막으로 로그인만 해주면된다.
아이디는 공식이미지에서 elastic
으로 고정시켜 배포했으므로 elastic
을 사용하고, 비밀번호는 kibana enrollment token
과 마찬가지로 처음 실행했을 때 제공한 것을 사용하고, 없으면 재발급해서 넣으면된다.
여기까지 성공했다면 짜잔!
위와 같은 화면을 볼 수 있을 것이다.
Kibana
를 이용하면 샘플 데이터를 사용하거나 데이터 보안, 분석 그래프 등을 쉽게 쉽게 볼 수 있고 명령어를 테스트 해볼 수 있다는 큰 장점이 있다.
만약 Elasticsearch
를 처음 사용해 본다면 여기서 여러가지 명령어를 시험해보는 편이 좋다.
위 과정을 보면 20~30분이면 끝날 과정을 처음할 때는 뭐든 몇 시간 씩 소모하게 되는 것이... 참...
그런 머리를 박으면 검색하고 알아보는 과정이 역량을 키우는데 아주 도움 되는 것은 알지만, 왠지 씁슬한 마음이 드는건 어쩔 수 없나보다 ㅋㅋ
만약 이제 막 입문해서 docker
를 통해 elasticsearch
를 사용할 사람들이 이 글을 보게된다면 부디 많은 도움이 되었으면 좋겠다.