도커로 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 라이센스를 따릅니다.
