본문 바로가기
ELK

[Kibana] 처음 세팅 : docker 와 kibana 세팅

by 슈슈슉민 2025. 3. 29.

앞선 글에서 elastic search를 docker 로 사용하였고, kibana 또한 docker 로 사용할 것이라 세팅이 필요하다.

다른 두 컨테이너가 통신이 되어야 하는데 그렇기 위해서는 네트워크 연결이 필요하다. 

 

[호스트 시스템] ---  포트 포워딩 ---> [Docker 컨테이너들]

 

Elasticsearch 포트

9200: application layer, 9300: network layer

 

Kibana 포트

5601: application layer

 

				+------------------+
                                |   호스트 시스템   |
                                +------------------+
                                         |
                   +------------------------+------------------------+
                   |                        |                        |
            포트 9200/9300              포트 5601                      |
                   |                        |                        |
+------------------v--+        +-----------v------------+            |
|                     |        |                        |            |
| Elasticsearch 컨테이너|◄------►|    Kibana 컨테이너        |            |
|                     |        |                        |            |
+---------------------+        +------------------------+            |
          ^                              ^                           |
          |                              |                           |
          +------------------------------+---------------------------+
                                         |
                                 +----------------+
                                 | Docker 네트워크 |
                                 |  (elastic-net) |
                                 +----------------+

 

먼저 docker 네트워크를 생성한다.

# 네트워크 생성
docker network create elastic-net
# 네트워크 리스트
docker network ls
# 잘못 만들었다면 사용하지 않는 네트워크 정리
docker network prune

 

기존 Elasticsearch 컨테이너를 중지하고 네트워크에 연결하여 다시 시작한다.

docker stop your-elasticsearch-container
# elastic container가 없다면
docker run -d \
  --name elasticsearch \
  --net elastic-net \
  -p 9200:9200 -p 9300:9300 \
  -e "discovery.type=single-node" \
  -e "xpack.security.enabled=true" \
  -e "ELASTIC_PASSWORD=elastic" \
  docker.elastic.co/elasticsearch/elasticsearch:8.12.2
  
  # elastic container가 이미 있다면
  docker network connect elastic-net elasticsearch

 

현재 네트워크가 잘 연결 되었는지 확인한다.

% docker inspect -f '{{range $key, $value := .NetworkSettings.Networks}}{{$key}} {{end}}' elasticsearch
bridge elastic-net

 

 이제 kibana 컨테이너를 같은 네트워크에 연결하여 생성한다. elasticsearch 8.0 부터는 superuser 계정을 직접 사용할 수 없다. elastic search 에서 tocken을 만들고, 그 토큰을 kibana 에서 사용할 것이다. 토큰을 문을 여는 열쇠같이 사용한다. 그렇기에 토큰을 잘 보관해놓아야 한다.

 kibana 또한 독립적인 컨테이너이기에 같은 네트워크 안에 놓아야 elastic search 와 통신이 가능하다.

 

docker run -d \
  --name kibana \
  --net elastic-net \
  -p 5601:5601 \
  -e "ELASTICSEARCH_HOSTS=https://elasticsearch:9200" \
  -e "ELASTICSEARCH_SERVICEACCOUNTTOKEN=<token_>" \
  -e "ELASTICSEARCH_SSL_VERIFICATIONMODE=none" \
  docker.elastic.co/kibana/kibana:8.12.2

 

% docker exec elasticsearch /bin/bash -c "bin/elasticsearch-service-tokens create elastic/kibana kibana-token"
SERVICE_TOKEN elastic/kibana/kibana-token = [token]

 

kibana 도 위와 마찬가지로 network 연결을 확인하면 좋다.

 

잘 되었다면 browser 에  http://localhost:5601/app/home#/ 를 치고 로그인하면 된다.

 

 

 

 

-link 옵션 사용하지 마세요.

 

-link 는 명시적으로 컨테이너 간 링크를 정의하는 것이다. 컨테이너 시작 순서에 의존성이 생길 뿐더러 스케일링에 제한이 있다. 반면, docker network 는 내장 dns 를 사용하여 컨테이너 이름으로 서로 찾을 수 있다. 컨테이너들끼리 서로의 존재를 알 수 있기에 독립적으로 시작/ 중지가 가능하고 그렇기에 확장성이 좋고 더 유연하다.

'ELK' 카테고리의 다른 글

[ElasticSearch] bucket aggregation  (0) 2025.03.29
[ElasticSearch] metric aggregation  (0) 2025.03.29
[ElasticSearch] search  (0) 2025.03.23
[ElasticSearch] mapping  (0) 2025.03.23
[ElasticSearch] 데이터 입력, 조회, 수정, 삭제  (0) 2025.03.23