포스트

도커로 ELK 8버전 사용하기

도커로 ELK 8버전 사용하기

로그가 흩어져 있으면 분석이 안 된다

서버가 여러 대가 되면, 로그를 일일이 SSH로 들어가 tail하는 게 불가능해집니다. 로그를 한곳에 모아 검색·시각화하는 스택이 필요한데, 대표적인 게 ELK 스택입니다.

flowchart LR
    L["Logstash<br/>(수집·가공)"] --> E["Elasticsearch<br/>(저장·검색)"]
    E --> K["Kibana<br/>(시각화·대시보드)"]
    SRC["로그/데이터 소스"] --> L
  • Elasticsearch: 데이터 저장·검색 (역색인 기반)
  • Logstash: 데이터 수집·변환·적재 (다음 글에서 자세히)
  • Kibana: 검색 결과·집계를 대시보드로 시각화

docker-compose로 ELK 8 띄우기

8버전은 보안이 기본 활성화되어 있어 비밀번호·TLS가 켜집니다. 로컬 학습용으로는 보안을 끄고 단순하게 시작할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# docker-compose.yml (로컬 학습용 — 보안 off)
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.15.0
    environment:
      - discovery.type=single-node
      - xpack.security.enabled=false
      - ES_JAVA_OPTS=-Xms1g -Xmx1g
    ports: ["9200:9200"]

  kibana:
    image: docker.elastic.co/kibana/kibana:8.15.0
    environment:
      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200
    ports: ["5601:5601"]
    depends_on: [elasticsearch]

  logstash:
    image: docker.elastic.co/logstash/logstash:8.15.0
    volumes:
      - ./pipeline:/usr/share/logstash/pipeline
    depends_on: [elasticsearch]
1
2
3
docker compose up -d
# Elasticsearch: http://localhost:9200
# Kibana:        http://localhost:5601

xpack.security.enabled=false는 로컬 전용입니다. 운영에서는 보안을 켜고, Elasticsearch가 발급하는 비밀번호·인증서로 각 구성요소를 연결해야 합니다.

메모리 설정 주의

ELK는 메모리를 꽤 먹습니다. 특히 Elasticsearch는 힙(ES_JAVA_OPTS)을 적절히 줘야 하고, 도커 호스트의 vm.max_map_count를 올려야 기동되는 경우가 많습니다.

1
sudo sysctl -w vm.max_map_count=262144

이 설정을 안 하면 Elasticsearch 컨테이너가 부팅 중 죽는 경우가 흔합니다.

동작 확인

1
2
curl localhost:9200      # ES 응답 확인
# 브라우저에서 localhost:5601 → Kibana 접속

Kibana의 Dev Tools에서 바로 쿼리를 날려볼 수 있어, ES 쿼리 학습·디버깅에 아주 편합니다.

정리

  • ELK = Elasticsearch(저장/검색) + Logstash(수집/가공) + Kibana(시각화).
  • 8버전은 보안 기본 ON — 로컬 학습은 off로 단순화(운영은 보안 필수).
  • vm.max_map_count 상향과 힙 설정이 기동 안정성의 핵심.
  • 다음 글에서 Logstash로 PostgreSQL 데이터를 Elasticsearch에 적재합니다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

시리즈 · Logstash (2편)

  1. 도커로 ELK 8버전 사용하기 지금 보는 글
  2. Logstash를 활용한 PostgreSQL 데이터 Elasticsearch Bulk Insert