Project/MSA 프로젝트

[프로젝트][ES] ElasticSearch와 Kibana 설치 (feat. docker-compose)

쉬지마 이굥진 2024. 7. 11. 21:22

금방 끝날 줄 알았는데 생각보다 쫌쫌따리 에러가 많아서 조금 시간이 걸렸다. 이 긴 여정과 각종 명령어를 잘 남겨두기 위해 포스팅 .. 

 

ElasticSearch 설치

1. docker-compose.yml 파일 설정

기존의 docker-compose.yml 파일에 엘라스틱 서치 관련 코드를 넣어줬다.

  es_lecture:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.6.0
    container_name: es_lecture
    ports:
      - "9200:9200"
    environment:
      - discovery.type=single-node
    networks:
      - neulpoom_network

 

2. 보안 인증 파일을 로컬에 복제

이 파일은 로컬에서 curl로 Elasticsearch 사용 시 필요하다.

docker cp es_lecture:/usr/share/elasticsearch/config/certs/http_ca.crt .

 

3. 유저 (아이디: elastic) 접속에 대해 인증

curl --cacert http_ca.crt -u elastic https://localhost:9200

 

4. elastic이 잘 떴는지 확인

curl --cacert http_ca.crt -u elastic -X GET "https://localhost:9200/_cluster/health?pretty"

이런 로그가 뜨면 엘라스틱서치가 잘 떴다는 거다.

docker-compose 파일을 통해 띄우지 않고, 엘라스틱서치 이미지부터 pull 받고 도커를 run 하면 로그로 elastic 비밀번호와 키바나 토큰 값이 함께 뜨는 것 같은데 나는 docker-compose.yml로 띄워서 그런지 그 값들이 뜨지 않았다. 그래서 비밀번호 값과 키바나 토큰 값이 필요할 때 초기화 명령어로 초기화 시켜서 썼다 😢
📌 비밀번호 및 키바나 토큰 값 뜨면 메모 필수!!

 

Kibana 설치

그 다음 엘라스틱서치의 데이터를 시각화해서 보여줄 수 있는 키바나를 설치해야한다. 

docker-compose.yml 파일을 대폭 수정했다 .. kibana는 elasticsearch에 의존해야 하기 때문에 elasticsearch가 먼저 뜬 다음 👉 kibana가 떠야한다.

 

1. 위에서 작성한 docker-compose.yml 파일 수정

elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.6.0
    container_name: es_lecture
    ports:
      - "9200:9200"
    environment:
      - node.name=es_lecture
      - discovery.type=single-node
      - xpack.security.enabled=false
    networks:
      - neulpoom_network
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - es_data:/usr/share/elasticsearch/data

  kibana:
    image: docker.elastic.co/kibana/kibana:8.6.0
    container_name: kibana_lecture
    ports:
      - "5601:5601"
    environment:
      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200
    networks:
      - neulpoom_network
    depends_on:
      - elasticsearch

volumes:
  ...
  es_data:
    driver: local

networks:
  neulpoom_network:

 

2. kibana 접속

docker-compose를 통해 키바나를 띄웠으면 이제 접속 확인을 해보자. url로 주소를 입력해서 접속하면 된다.

http://localhost:5601

토큰 값 등록

그럼 토큰 값 입력 화면이 뜬다. 키바나 토큰 값을 몰라서 토큰 값을 다시 재발급 받는 방법을 택했다.

 

2-1. 해당 elastic search 컨테이너로 진입

docker exec -it [컨테이너 이름] /bin/bash

 

2-2. 토큰 초기화 및 재발급

elasticsearch-create-enrollment-token --scope=kibana
📌이 때 주는 kibana 토큰 값을 꼭 메모해두자!!!

토큰값을 넣고 Configure Elastic을 누르면 6자리 코드를 넣으라고 한다. 이것도 처음 본 코드이기 때문에 조회했다.

 

2-3. 코드값 조회

docker logs [kibana 컨테이너 이름]

이렇게 6자리 코드 값이 뜬다! (?code=802266)

두근두근

Welcome to Elastic 뜨면 성공 🥹 Explore on my own 클릭하면 kibana의 메인페이지로 이동할 수 있다.

 

이제 그 다음 스텝 가볼까나 ..^-^


docker-compose.yml 파일 전체 코드

version: '3.8'

services:
  db_neulpoom_user:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: neulpoom_user
    ports:
      - "3307:3306"
    volumes:
      - db_user:/var/lib/mysql
      - ./mysql-init/user:/docker-entrypoint-initdb.d
    restart: always
    networks:
      - neulpoom_network

  db_neulpoom_lecture:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: neulpoom_lecture
    ports:
      - "3308:3306"
    volumes:
      - db_lecture:/var/lib/mysql
      - ./mysql-init/lecture:/docker-entrypoint-initdb.d
    restart: always
    networks:
      - neulpoom_network

  db_neulpoom_coupon:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: neulpoom_coupon
    ports:
      - "3309:3306"
    volumes:
      - db_coupon:/var/lib/mysql
      - ./mysql-init/coupon:/docker-entrypoint-initdb.d
    restart: always
    networks:
      - neulpoom_network

  db_neulpoom_payment:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: neulpoom_payment
    ports:
      - "3310:3306"
    volumes:
      - db_payment:/var/lib/mysql
      - ./mysql-init/payment:/docker-entrypoint-initdb.d
    restart: always
    networks:
      - neulpoom_network

  db_neulpoom_lecture_resource:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: neulpoom_lecture_resource
    ports:
      - "3311:3306"
    volumes:
      - db_lecture_resource:/var/lib/mysql
      - ./mysql-init/lecture_resource:/docker-entrypoint-initdb.d
    restart: always
    networks:
      - neulpoom_network

  redis_user:
    hostname: redis_user
    container_name: redis_user
    image: redis:6
    ports:
      - "6381:6379"
    networks:
      - neulpoom_network

  redis_coupon:
    hostname: redis_coupon
    container_name: redis_coupon
    image: redis:6
    ports:
      - "6380:6379"
    networks:
      - neulpoom_network

  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.6.0
    container_name: es_lecture
    ports:
      - "9200:9200"
    environment:
      - node.name=es_lecture
      - discovery.type=single-node
      - xpack.security.enabled=false
    networks:
      - neulpoom_network
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - es_data:/usr/share/elasticsearch/data

  kibana:
    image: docker.elastic.co/kibana/kibana:8.6.0
    container_name: kibana_lecture
    ports:
      - "5601:5601"
    environment:
      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200
    networks:
      - neulpoom_network
    depends_on:
      - elasticsearch

volumes:
  db_user:
  db_lecture:
  db_coupon:
  db_payment:
  db_lecture_resource:
  es_data:
    driver: local

networks:
  neulpoom_network: