Elasticsearch docker로 시작하기

허석진·2023년 12월 16일
1

Elasticsearch

목록 보기
1/5
post-thumbnail
  1. 사용하는 elasticsearchkibana의 버전은 8.11.1입니다
    1-1. 8.x 버전 끼리는 크게 차이 없을 것으로 예상되나 이외의 버전에서 진행에 문제가 생긴다면 반드시 검색을 통해 확인해 봐야합니다
  2. elastic에서 제공하는 공식 elasticsearchkibana 이미지를 받아 세팅하는 방법만 다루고있습니다
  3. docker compose를 사용하지 않고, 설명하지 않습니다. 관련 정보를 얻고싶다면 다음의 링크를 통해 학습해주세요.
    링크: Getting started with the Elastic Stack and Docker Compose: Part 1

이 글을 작성하는 이유는 되게 간단한 설정인데도 elastic에서 제공하는 공식문서가 복수 존재하고, 개인이 연습하기 위해 필요한 내용이 심화 내용과 함께 섞여있어 이 글을 보는 사람들은 나처럼 고생하지 않았으면 하는 마음에 작성하게되었다. (물론 이 글에서 작성하는 것보다 이후 작성할 Java Low Level REST Client를 연결하는 것의 난이도가 숨막히게 어려웠다)

매 단계마다 우선적으로 참고할만한 사이트나 공식문서의 링크를 남겨두지만 영어로 되어 있기도하고 처음 접하는 사람에게는 어려울 수 있기 때문에 과정을 설명하며 작성하겠다.

그럼 바로 시작!

elasticsearch, kibana의 이미지 다운로드하고, 실행하기

링크: Install Elasticsearch with Docker

1. docker network 생성하기

링크: Understanding Docker Networking
링크: Networking overview
컨테이너 간의 통신을 편하게 하기 위해서는 docker network를 사용할 필요가있다.
만약 자신이 elasticsearch만 사용하고 나머지는 필요없다 생각되면 해당 단계는 건너 뛰어도 된다.

docker network create elastic
=> docker network create <생성할 네트워크 이름>

2. docker image 당겨오기

docker pull docker.elastic.co/elasticsearch/elasticsearch:8.11.1
docker pull docker.elastic.co/kibana/kibana:8.11.1
=> docker pull <다운 받을 이미지의 경로>

3. container 시작하기

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를 실행할 때만" 아래와 같은 것이 출력 될 것이다.
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 <컨테이너 이름>:<인증서 경로> <인증서를 저장할 로컬 호스트의 경로>

4. 실행 중인지 테스트 (curl를 통한 request 보내기)

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에서는 curlCRL을 확인 할 수 없기 때문에 발생하는 문제인데 이를 무시하는 옵션인 --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

5. Kibana 접속하기

위와 같은 과정을 모두 진행했다면(1-4는 무관) http://localhost:5601/ 를 통해 Kibana에 접속이 가능하다.

성공적으로 접속했다면 아래와 같은 이미지가 나올텐데 위에서 언급했듯 elasticsearch를 처음 실행했을 때 제공하는 Kibana enrollment token을 입력하면 되고, 없다면 재발급해서 넣으면된다.
Kibana enrollment token

이후에는 Kibana verification code를 추가로 입력해줘야한다.
해당 코드는 팝업에 적혀있다시피 현재 실행시키고 있는 Kibana 서버의 터미널을 확인하면 출력되어 있으며, 거기서 확인을 못한 경우, Kibana 터미널에서 아래의 명령어를 실행하면 재발급된다.

 bin/kibana-verification-code

Kibana verification code

마지막으로 로그인만 해주면된다.
아이디는 공식이미지에서 elastic으로 고정시켜 배포했으므로 elastic을 사용하고, 비밀번호는 kibana enrollment token과 마찬가지로 처음 실행했을 때 제공한 것을 사용하고, 없으면 재발급해서 넣으면된다.
Kibana login

여기까지 성공했다면 짜잔!
Kibana dashboard

위와 같은 화면을 볼 수 있을 것이다.
Kibana를 이용하면 샘플 데이터를 사용하거나 데이터 보안, 분석 그래프 등을 쉽게 쉽게 볼 수 있고 명령어를 테스트 해볼 수 있다는 큰 장점이 있다.

Kibana Dev Tools Console

만약 Elasticsearch를 처음 사용해 본다면 여기서 여러가지 명령어를 시험해보는 편이 좋다.


마무리

위 과정을 보면 20~30분이면 끝날 과정을 처음할 때는 뭐든 몇 시간 씩 소모하게 되는 것이... 참...
그런 머리를 박으면 검색하고 알아보는 과정이 역량을 키우는데 아주 도움 되는 것은 알지만, 왠지 씁슬한 마음이 드는건 어쩔 수 없나보다 ㅋㅋ
만약 이제 막 입문해서 docker를 통해 elasticsearch를 사용할 사람들이 이 글을 보게된다면 부디 많은 도움이 되었으면 좋겠다.

0개의 댓글