[Spring-ELK] Docker: Elastic Search , Kibana를 설치해서 springboot와 연결하자! (1)

kang·2024년 11월 5일

Spring_ELK

목록 보기
2/10

엘라스틱 서치 -> es
kibana -> 키바나
라고 정의하겠다.

일단 es와 키바나를 설치하여보자.


일단 설치 환경은
나는 윈도우환경이고
개발은 인텔리제이에서 스프링부트 3.3.4를 이용하고있다.

1. Espring에서 Elasitc Search를 사용하는 방법

Elastic Search Engine의 Sprign Client인 spring-data-elasticsearch를 사용했다.

1-1. 의존성 추가하기

  • gradle
implementation 'org.springframework.boot:spring-boot-starter-data-elasticsearch'
implementation 'co.elastic.clients:elasticsearch-java:8.10.2'

미리고백하자면 사실, 의존성 문제가 엄청 터졌다. 내가 보고 따라했던 블로그는 3.0.x 버전의 스프링을 사용하고 있었는데 나는 3.3.x의 스프링을 사용해서라고 지금은 추측한다 (괜찮을 줄 알았다. ㅎ)

아무튼, 방법은 비슷하니 후에 버전을 조심하도록...

버전확인을 꼭하자 (원본블로그글에서도 조심하라고 일렀지만 나는 무지성으로 따라해서 후에 애를 많이 먹었다...그 후기는 다른 글에 풀어보도록 하겠다!)

1-2. docker image를 사용한 elastic search 환경 구성하기

docker-compose.yml

version: '3.7'

services:

    es:
      image: docker.elastic.co/elasticsearch/elasticsearch:8.5.3
      container_name: es
      environment:
        - node.name=es-node
        - cluster.name=search-cluster
        - discovery.type=single-node
        - xpack.security.enabled=false
        - xpack.security.http.ssl.enabled=false
        - xpack.security.transport.ssl.enabled=false
      ports:
        - 9200:9200 # https
        - 9300:9300 #tcp
      networks:
        - es-bridge


    kibana:
      image: docker.elastic.co/kibana/kibana:8.5.3
      container_name: kibana
      environment:
        SERVER_NAME: kibana
        ELASTICSEARCH_HOSTS: http://es:9200
      ports:
        - 5601:5601
      # Elasticsearch Start Dependency
      depends_on:
        - es
      networks:
        - es-bridge


networks:
  es-bridge:
    driver: bridge

docker-compose.yml file으로 일관된 환경을 구현할 수 있었다!

  • image : docker에서 제공하는 elastic stack의 image를 넣어주면 되는데 : 뒤에 version을 적어주고 우리가 사용하는 elastic search client와 맞춰준다.

  • container_name : 말그대로 image를 띄우면 container가 생성되는데 이때 container의 이름을 의미한다.

  • environment : environment는 환경변수를 전달해줘야할때 사용한다.

    1. elastic search : local에서 돌릴 것이기에 security는 false로 설정해준다.
      security설정을 따로 하지 않는이상 해당 환경변수 설정이 없다면 돌아가지 않는다.
      그리고 돌리다보면 memory exception이 발생할 수 있는데 - ES_JAVA_OPTS=-Xms512m -Xmx512m #ERROR: Elasticsearch exited unexpectedly 대안 -> memory size up 해당 줄을 environment에 추가하면 메모리를 늘릴 수 있다.
    2. kibana : kibana는 어떤 elastic search와 연결할것인지 host를 정해줘야한다.
      이때 우리는 container가 서로 연결이 되어있기에 es container를 사용한다. 따라서 http://es:9200으로 해줘야한다. 만약에 elastic search의 image name을 es로 설정하지 않았고 elasticsearch라고 했다면? http:elasticsearch:9200이 될 것이다.
  • ports

    1. elastic search
      docker container에서 허용할 port number를 적어줘야하는데 elasitc search는 node끼리의 통신을 하는데 이때 tcp(9300 port)를 사용하고 client와 node의 통신을 위해 http(9200 port)를 사용하게 된다.
    2. kibana
      kibana는 5601 port를 사용하게 된다.
  • network

    container들 사이의 network를 연결해줘야한다. 이때 bridge를 es-bridge라는 이름을 가지도록 만들어주고 두개의 container에 각각 등록하면 된다. 이때 kibana는 elastic search가 먼저 띄워져야 작동하게끔 의존관계를 명시해야해서 depends_on:es을 사용한다.

1-3. 실행
compose 파일이 있는 곳에서 powershell을 열었다!

그다음 명령어를 입력해준다

docker compose up -d

docker ps를 입력하면 실행중인 container를 확인할 수 있다.

docker - desktop에서 확인하면 이렇게 보인다!

profile
뉴비 개발 공부중

0개의 댓글