1. ELK 스택 구성
- Elasticsearch : 가장 핵심적인 검색 및 데이터 저장 엔진으로, 스택의 기반 역할
- Logstash : 로그 데이터 수집과 파싱, 변환 역할을 하는 중간 처리기 역할
* 파일비트는 DB나 클라우드 서비스 등 다양한 소스에서 데이터를 받을 수 없음.
- Kibana : 최종적으로 데이터를 시각화하는 역할
* 구성 흐름 : 데이터 수집 (Logstash) → 데이터 저장 및 검색 (Elasticsearch) → 데이터 시각화 (Kibana)
•제품의 중요도와 역할 강조에 따라 Elasticsearch 가 가장 앞에 위치
* Filebeat : 서버에서 로그를 수집해 전송 (경량 수집기)
•Beats 제품군 중 하나로 Elastic Stack 에 Beats 포함.
2. 설치 과정
2.1. 환경 준비
- Elasticsearch 와 logstash 는 Java 환경에서 실행
- Docker 활용 권장(복잡한 설치 없이 컨테이너로 쉽게 환경 구축 가능)
2.2. Elasticsearch 설치
2.2.1. docker-compose yml 파일 준비
* version 은 obsolete 됨.
- "ES_JAVA_OPTS = -Xms512m -Xmx512m"
•JVM 에 할당하는 최소와 최대 힙 메모리 크기를 제한
- discover.type=single-node
•Elasticsearch 를 단일 노드 모드로 실행
•보통 개발용, 테스트용 > 클러스터 미구성 1대 노드 모든 역할(마스터, 데이터, 인제스트 등) 수행
* 클러스터 구성할 경우 해당 옵션 사용 안함. 운영환경에서는 보통 3대 이상 노드로 클러스터 구성(가용성, 안정성 보장)
- volumes 의미
•컨테이너 데이터의 영속성을 위한 저장 공간
- logstash 가 2개의 포트를 사용하는 이유
•5044: Beats 가 로그를 보내는 입력 포트
•9600: Logstash 내부 상태 모니터링 등 메트릭을 제공하는 API 포트(출력 포트)
- esdata:
•도커 볼륨 이름만 명시, 추가 설정이 없으므로 기본 설정으로 생성되고 관리됨.
• Elasticsearch 컨테이너가 삭제되어도 데이터는 유지하도록 영속적인 저장 공간을 확보.
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.7.1
container_name: elasticsearch
environment:
- discovery.type=single-node
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ports:
- "9200:9200"
volumes:
- esdata:/usr/share/elasticsearch/data
- ./elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
networks:
- elk-network
logstash:
image: docker.elastic.co/logstash/logstash:8.7.1
container_name: logstash
ports:
- "5044:5044"
- "9600:9600"
volumes:
- ./logstash/pipeline/:/usr/share/logstash/pipeline
kibana:
image: docker.elastic.co/kibana/kibana:8.7.1
container_name: kibana
ports:
- "5601:5601"
environment:
elasticsearch.hosts: http://elasticsearch:9200
networks:
- elk-network
filebeat:
image: docker.elastic.co/beats/filebeat:8.7.1
container_name: filebeat
user: root
volumes:
- ./filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro
- ./:/var/log:ro
depends_on:
- elasticsearch
networks:
- elk-network
volumes:
esdata:
networks:
elk-network:
driver: bridge
docker app 실행 상태 > 터미널 > docker compose up 실행
* received plaintext http traffic on an https channel 이슈 발생
- elasticsearch ssl 기능 종료 (개발용)
* logstash 종료
- logstash.conf 파일 작성
- logstash 제외 하고, filebeat 로 EK 스택 구성으로 변경
2.3. Filebeat 란?
- ELK 스택을 구성하는 경량 로그 수집기
(로그 파일을 수집 / 따라서 port 가 없고 network 설정이 존재함)
* 동일한 docker compose 네트워크에 속하는 모든 컨테이너는 이름 또는 서비스 이름으로 통신
(DNS 이름처럼)
•elk-network 에 컨테이너들이 속해있어야 통신 가능
•docker network ls > docker network inpect local_elk-network
(local_ 이 디폴트로 생성)
•filebeat.yml 작성 필요함.
- 수집한 로그를 Logstash (or elasticsearch) 로 전달
•Prospector (현재는 Input): 읽을 로그 파일을 식별하는 역할
•Harvester: 각 로그 파일을 실제로 한 줄씩 읽어 처리
•Spooler: 읽은 로그를 일괄 수집해 목적지로 전달
•Registry 파일: 각 로그파일의 읽은 위치를 저장해 재시작 시 중복을 방지
2.4. 도커에서 Filebeat, Electricsearch, Kibana 실행
- 로컬 웹서버에서 로그 파일을 생성 > Filebeat 가 로그파일 수집 > Elasticsearch 로 전달 > Kibana 에서 시각화
- 연결 확인 후 키바나 접속 > Stack management > Data Views
2.4. 키바나
- 이름 : 각 데이터 뷰를 구분할 수 있도록 만드는 고유한 레이블
- 인덱스 패턴
•Elasticsearch에 저장된 여러 로그 인덱스를 Kibana에서 하나의 검색 단위로 묶어 다루기 위한 메타데이터 설계도
•실제 Elasticsearch 인덱스들은 여러 개 존재 가능
•공통된 이름 규칙(예: filebeat-*)으로 여러 인덱스를 포괄
- 타임스탬프(Timestamp field)
•이벤트나 로그가 기록된 정확한 날짜와 시간 정보를 담고 있는 데이터 필드
•로그가 언제 발생했는지를 추적, 검색, 시계열 분석하기 위해서 필수적으로 사용
- 수집된 데이터를 기반으로 시각화할 수 있음.

