본문 바로가기

리눅스

[WIP] Docker Compose로 EFK(Elasticsearch, Fluentd, Kibana) 스택을 구성하는 방법

728x90

Docker Compose로 EFK(Elasticsearch, Fluentd, Kibana) 스택을 구성하는 방법

EFK 스택은 로그 수집 → 저장 → 분석 → 시각화를 위한 대표적인 오픈소스 조합입니다.

  • Elasticsearch → 로그 저장 및 검색
  • Fluentd → 로그 수집 및 전달
  • Kibana → 로그 시각화 및 분석

프로젝트 구조 준비

mkdir -p efk-stack/fluentd/conf
cd efk-stack
efk-stack/
├── docker-compose.yml
└── fluentd/
    └── conf/
        └── fluent.conf

1. Docker Compose 파일 생성

프로젝트 디렉토리에 docker-compose.yml 파일을 생성합니다.

vim docker-compose.yml

2. Docker Compose 구성

docker-compose.yml 파일에 Elasticsearch, Fluentd 및 Kibana 서비스를 정의합니다.

version: '3.9'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.14.0
    environment:
      - discovery.type=single-node
    ports:
      - "9200:9200"
    networks:
      - efk-network

  fluentd:
    image: fluent/fluentd:v1.14-1
    volumes:
      - ./fluentd/conf:/fluentd/etc
    environment:
      - FLUENTD_CONF=fluent.conf
      - ELASTICSEARCH_HOST=elasticsearch
      - ELASTICSEARCH_PORT=9200
    links:
      - elasticsearch
    networks:
      - efk-network

  kibana:
    image: docker.elastic.co/kibana/kibana:7.14.0
    ports:
      - "5601:5601"
    environment:
      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200
    links:
      - elasticsearch
    networks:
      - efk-network

networks:
  efk-network:
    driver: bridge

3. Fluentd 설정 파일 작성

프로젝트 디렉토리에 fluentd 디렉토리를 생성하고 그 안에 fluent.conf 파일을 작성합니다.

vim fluentd/conf/fluent.conf
<source>
  @type forward
  port 24224
  bind 0.0.0.0
</source>

<match **>
  @type elasticsearch
  host elasticsearch
  port 9200
  logstash_format true
  logstash_prefix fluentd
  logstash_dateformat %Y%m%d
  include_tag_key true
  type_name access_log
</match>

주요 포인트

  • logstash_format true → Kibana에서 바로 사용 가능
  • index: fluentd-YYYYMMDD

4. Docker Compose 실행

터미널에서 프로젝트 디렉토리로 이동한 후 아래 명령을 실행하여 Docker Compose를 실행합니다.

docker-compose up -d

확인

docker-compose ps

5. Elasticsearch 확인

curl http://localhost:9200
{
  "cluster_name": "docker-cluster",
  "tagline": "You Know, for Search"
}

6. Kibana 접속

웹 브라우저에서 http://localhost:5601에 접속하여 Kibana 대시보드를 사용하여 로그를 시각화하고 분석합니다.

http://efk-stack:5601

Elasticsearch

7. Elasticsearch 8.x 토큰 기반 인증

Kibana Enrollment Token 생성

docker-compose exec elasticsearch bin/elasticsearch-create-enrollment-token -s kibana
docker-compose exec elasticsearch bash
bin/elasticsearch-create-enrollment-token --scope kibana
elasticsearch@6fa025e294cd:~$ bin/elasticsearch-create-enrollment-token --scope kibana
WARNING: Owner of file [/usr/share/elasticsearch/config/users] used to be [root], but now is [elasticsearch]
WARNING: Owner of file [/usr/share/elasticsearch/config/users_roles] used to be [root], but now is [elasticsearch]
eyJ2ZXIiOiI4LjEuMyIsImFkciI6WyIxNzIuMjIuMC4yOjkyMDAiXSwiZmdyIjoiZGY2ODI4MTAyZmU3ZTMwNDVlNDViNmE0YWJhMDBlMzg1NjFhMWIxYWE4NTU3YmQ5MTI4MDYxNWUyOWNmMmFiOCIsImtleSI6IjVVU21qSUFCb0lWaHgxbDJUNG9sOi0tSDdtdjlIUUNTMlR1cEx0VVZMV1EifQ==

Elasticsearch
Elasticsearch

Kibana Verification Code

docker-compose exec kibana bin/kibana-verification-code
docker-compose exec kibana bash
bin/kibana-verification-code
kibana@b299b7a363e8:~$ bin/kibana-verification-code
Your verification code is:  001 189

Elasticsearch
Elasticsearch
Elasticsearch

 

위의 단계를 따라 Docker Compose를 사용하여 EFK 스택을 구성할 수 있습니다. Elasticsearch, Fluentd 및 Kibana가 함께 실행되며 로그 수집, 분석 및 시각화를 위한 환경이 구성됩니다.

 

728x90