ELK Stack이란?
ELK Stack은 IT 시스템에서 발생하는 반드하한 로그 데이터를 중앙에서 수집하고, 분석하며, 시각화할 수 있도록 해주는 오픈소스 기반의 로그 분석 플랫폼입니다.
이름은 세 개의 헌신 구성요소인 Elasticsearch, Logstash, Kibana의 앞글자를 따서 만든 단어입니다.
최근에는 Beats라는 감철 데이터 수집기가 포함되며, 전체를 Elastic Stack이라고도 불합니다.
주요 목적
- 시스템 및 애플리케이션 로그를 수집하고 저장
- 검색 및 필터링을 통해 로그 분석
- 시각화 대시보드를 통해 상태 모니터링
- 장애 발생 시 추적과 분석이 용이
- 보안 감사를 위한 로그 기반 추적 가능
구성 요소 및 역할
구성요소 | 역할 |
---|---|
Elasticsearch | JSON 기반의 실시간 검색 및 분석 엔진 (데이터 저장소 역할) |
Logstash | 로그 수집기. 다양한 입력으로부터 로그를 받아 파싱하고 필터링하여 Elasticsearch에 전달 |
Kibana | Elasticsearch 데이터를 시각화하는 대시보드 도구 |
Beats (선택) | 경량 로그 수집 에이전트 (Filebeat, Metricbeat 등) |
Elasticsearch – 데이터 저장소이자 분석 엔진
- 역할: 수집된 로그 데이터를 저장하고, 검색 및 분석을 빠르게 수행
- 특징:
- 실시간 분산 검색 엔진
- JSON 기반 문서 저장
- 강력한 검색 쿼리 및 필터 기능
- RESTful API 제공
- 활용 예시:
- “5분간 500 오류가 100건 이상 발생한 서버 찾기”와 같은 조건 검색
Logstash – 데이터 수집기 및 처리기
- 역할: 다양한 소스에서 로그를 수집하고, 필터링 및 구조화하여 Elasticsearch로 전달
- 특징:
- 플러그인 기반의 유연한 파이프라인 구성 (input → filter → output)
- 다양한 로그 포맷(grok, CSV, JSON 등) 파싱 가능
- 데이터 정제 및 변환 기능 제공
- 활용 예시:
- nginx 액세스 로그에서 IP, 요청 URL, 응답 코드 추출 및 구조화
Kibana – 시각화 및 대시보드 도구
- 역할: Elasticsearch에 저장된 데이터를 시각적으로 탐색하고 대시보드로 구성
- 특징:
- 막대그래프, 원형그래프, 지도 시각화 지원
- 로그 검색(Discover) 및 경고(Alert) 설정 가능
- 사용자 친화적인 웹 인터페이스 제공
- 활용 예시:
- 서비스별 오류 로그 발생 추이를 시각화하여 운영 상태 파악
Beats – Elastic Stack 확장 요소
- 역할: 각 서버에 설치되어 데이터를 경량으로 수집
- 주요 종류:
- Filebeat: 로그 파일 수집
- Metricbeat: 시스템 리소스 모니터링
- Packetbeat: 네트워크 트래픽 분석
- 특징:
- 설치가 간편하고 리소스 소모가 적음
- Logstash 없이도 Elasticsearch에 직접 전송 가능
데이터 흐름 구조
- Filebeat가 로그 파일을 모니터링
- Logstash로 전달하여 필터링 및 구조화
- Elasticsearch에 저장
- Kibana에서 시각화하여 분석
ELK Stack을 사용하는 이유
목적 | 설명 |
---|---|
중앙 로그 관리 | 여러 서버에서 발생하는 로그를 한곳에서 통합 관리 |
실시간 검색 및 분석 | 수집 즉시 검색 및 패턴 분석 가능 |
시각화 및 대시보드 구성 | 그래프와 차트로 직관적인 로그 분석 가능 |
장애 및 보안 대응 | 이상 징후 탐지, 사고 대응, 감사 로그 활용 가능 |
확장성 | 수십~수백 대 서버 환경에서도 수평 확장 지원 |
CentOS 7.9에서 ELK Stack 설치 및 설정
사전 준비
# 시스템 패키지 업데이트
sudo yum update -y
- 최신 보안 패치 및 종속성 문제 방지를 위해 필수
# Java 설치 (Elasticsearch, Logstash는 Java 필요)
sudo yum install -y java-1.8.0-openjdk
- Elasticsearch와 Logstash는 Java 기반 애플리케이션이므로 반드시 필요함
# java 설치 확인
java -version
- 정상적으로 Java가 설치되었는지 확인
4. Elasticsearch 설치 및 설정
# Elasticsearch 저장소 추가
sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
- Elasticsearch의 공식 GPG 키를 추가하여 패키지 무결성을 보장
cat <<EOF | sudo tee /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-7.x]
name=Elasticsearch repository
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF
# 저장소 설정 반영
sudo yum clean all
sudo yum clean metadata
sudo yum makecache fast # 메타데이터를 즉시 캐싱하여 패키지 인식 속도 개선
- 공식 저장소를 yum에 등록
- 7.x는 Elasticsearch, Logstash, Kibana의 7.0부터 7.17까지의 버전을 의미하며, CentOS 7.9와 안정적으로 호환됨.
특히 실무에서는 7.10~7.17이 가장 많이 사용됨 (무료 라이선스 정책이 변경되기 전 버전 포함).
# Elasticsearch 설치
sudo yum install -y elasticsearch
# 설정 파일 편집 (네트워크 및 클러스터 설정)
sudo vi /etc/elasticsearch/elasticsearch.yml
network.host: 0.0.0.0
http.port: 9200
discovery.type: single-node
# 운영 환경에서는 아래와 같이 다중 노드 구성 시 discovery 설정을 사용합니다:
# discovery.seed_hosts: ["host1", "host2"]
# cluster.initial_master_nodes: ["node1"]
# 위 설정은 마스터 노드 후보를 지정하고, 클러스터를 올바르게 초기화하기 위해 필요합니다.
# 단일 노드 테스트 환경에서는 discovery.type만 설정해도 충분합니다.
network.host
: 외부 접속 허용 (테스트 환경 기준)discovery.type
: 단일 노드 테스트용 클러스터 설정 (운영 환경에서는 멀티노드 구성 필요)
# Elasticsearch 서비스 시작 및 부팅 시 자동 실행 등록
sudo systemctl enable --now elasticsearch
# 상태 확인
curl -X GET "localhost:9200/" -u elastic
Kibana 설치 및 설정
Elasticsearch 기본 사용자 계정 용도 설명
사용자 계정 | 용도 설명 |
---|---|
elastic | Elasticsearch의 기본 관리자 계정 (모든 권한 보유) |
kibana_system | Kibana가 Elasticsearch에 접근할 때 사용하는 내부 시스템 계정 |
kibana | (구버전에서 사용) Kibana UI를 위한 계정으로, kibana_system으로 대체됨 |
logstash_system | Logstash가 Elasticsearch로 데이터를 전송할 때 사용하는 시스템 계정 |
beats_system | Filebeat, Metricbeat 등 Beats 계열 도구가 Elasticsearch에 전송 시 사용하는 계정 |
apm_system | APM(Application Performance Monitoring) 서버가 사용하는 시스템 계정 |
remote_monitoring_user | Elasticsearch 모니터링 클러스터에서 데이터 수집 시 사용하는 계정 |
이 계정들은 elasticsearch-setup-passwords interactive
명령을 통해 각각의 비밀번호를 설정하게 되며, 설정된 후에는 관련 서비스가 이 계정으로 인증을 거쳐야 정상적으로 동작합니다.
Elasticsearch 보안 기능 활성화 (선택)
Elasticsearch 7.x는 무료로 제공되는 기본 보안 기능(X-Pack Security)을 포함하고 있으며, 수동으로 활성화하고 비밀번호를 설정할 수 있습니다.
# 보안 기능 활성화 (elasticsearch.yml에 추가)
sudo vi /etc/elasticsearch/elasticsearch.yml
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
# Elasticsearch 재시작
sudo systemctl restart elasticsearch
# 사용자 비밀번호 설정 (elastic, kibana_system 등)
sudo /usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive
- 이 명령은 대화형으로 진행되며,
elastic
,kibana_system
,logstash_system
등 여러 계정의 암호를 직접 설정하게 됨 - 설정한 비밀번호는 안전하게 별도 보관 필요
# Kibana 설치
sudo yum install -y kibana
# Kibana 설정
sudo vi /etc/kibana/kibana.yml
보안 기능을 활성화했을 경우, Kibana가 Elasticsearch에 인증하고 접속할 수 있도록 사용자 계정 정보를 추가해야 합니다.
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://localhost:9200"]
elasticsearch.username: "kibana_system"
elasticsearch.password: "설정한 비밀번호 입력"
server.host
: 외부 접속 허용elasticsearch.hosts
: 연결할 Elasticsearch 주소
# Kibana 설정 변경 후 반드시 서비스 재시작 필요
# Kibana 서비스 시작 및 자동 실행 등록
sudo systemctl enable --now kibana
# 포트 접근 가능 여부 확인
netstat -anp | grep 5601
Logstash 설치 및 설정
# Logstash 설치
sudo yum install -y logstash
# 테스트용 구성 파일 생성
sudo vi /etc/logstash/conf.d/filebeat.conf
input {
beats {
port => 5044
}
}
filter {
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:timestamp} %{SYSLOGHOST:hostname} %{DATA:program}: %{GREEDYDATA:logmessage}" }
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
user => "elastic"
password => "비밀번호"
index => "filebeat-%{+YYYY.MM.dd}" # ← Kibana에서 인식 가능하게
}
}
/var/log/messages
로그를 읽어서 파싱 후 Elasticsearch로 전송grok
: 로그 패턴 파싱 필터output.elasticsearch
: 저장 대상 설정
# Logstash 시작
sudo systemctl enable --now logstash
Filebeat 설치 및 설정 (옵션)
🔸 Filebeat는 ELK 서버에서는 선택사항이지만, 클라이언트 서버에서는 필수입니다.
클라이언트가 중앙 ELK 서버로 로그를 전송하기 위해서는 Filebeat 또는 유사 수집기가 반드시 필요합니다.
# Filebeat 설치
sudo yum install -y filebeat
# Filebeat 기본 설정
sudo vi /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/*.log
- /var/log/messages
- /var/log/secure
- /var/log/cron
- /var/log/dmesg
# output.elasticsearch: <- 이줄은 반드시 #주석 처리
output.logstash:
hosts: ["localhost:5044"]
- Filebeat가 로그를 읽어 Logstash로 전달
# Filebeat 실행
sudo systemctl enable --now filebeat
# Filebeat 설정 오류 시 아래 명령어로 확인
/usr/bin/filebeat test config
# Filebeat가 Logstash와 통신하는 포트 허용 필요
sudo firewall-cmd --add-port=5044/tcp --permanent
sudo firewall-cmd --reload
방화벽 설정
sudo firewall-cmd --add-port=9200/tcp --permanent # Elasticsearch
sudo firewall-cmd --add-port=5601/tcp --permanent # Kibana
sudo firewall-cmd --reload
클라이언트 서버 연동 방법
ELK 서버가 구성된 후, 각 클라이언트 서버에서 로그를 수집하여 중앙 ELK 서버로 전송하려면 Filebeat를 클라이언트에 설치해야 합니다.
클라이언트 서버에서의 설정 절차 (예: CentOS 7.9 기준)
# Filebeat 설치
sudo yum install -y filebeat
# Filebeat 설정 파일 편집
sudo vi /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/messages
# output.elasticsearch: <- 이줄은 반드시 #주석 처리
output.logstash:
hosts: ["<ELK_SERVER_IP>:5044"]
paths
: 수집할 로그 경로 지정output.logstash.hosts
: 중앙 ELK 서버의 IP와 Logstash 포트(5044)
# Filebeat 시작 및 부팅 시 자동 실행
sudo systemctl enable --now filebeat
방화벽 예외 등록 (클라이언트 측)
sudo firewall-cmd --add-port=5044/tcp --permanent
sudo firewall-cmd --reload
ELK 서버에서 확인할 것
- Logstash가 클라이언트의 Filebeat 요청을 허용하고 있는지 (filebeat.conf 또는 멀티포트 config에 설정 필요)
- Elasticsearch에 새로운 로그 인덱스가 생성되는지 Kibana에서 확인
Kibana에서 Index Pattern 생성 방법
RedBox 클릭
You can also create an index pattern against hidden or system indices.
- 이 문장은 버튼처럼 생기지 않았지만 파란 글씨로 된 클릭 가능한 링크입니다.
- 클릭하면 인덱스 패턴 수동 생성 화면으로 이동합니다.

filebeat 인덱스 패턴 설정(1)

filebeat 인덱스 패턴 설정(2)

filebeat 인덱스 패턴 설정(3)
그 다음 단계
Index pattern name
에filebeat-*
입력Time field
는 반드시@timestamp
선택- 마지막으로
Create data view
버튼 클릭

filebeat 인덱스 패턴 설정(4)
완료 후
- Kibana 상단 메뉴 → Discover로 이동
- 로그가 나타날 것입니다!
- 오른쪽 상단에서 **시간 범위(Today 또는 Last 7 days)**로 변경하는 것도 잊지 마세요

filebeat 인덱스 패턴 설정(5)
구축 후 확인
http://<서버IP>:9200
→ Elasticsearch 동작 확인http://<서버IP>:5601
→ Kibana 접속 확인- Kibana에서 Index Pattern 생성 후 로그 시각화
마무리 개념 정리
- Elasticsearch: 저장 & 검색
- Logstash: 수집 & 가공
- Kibana: 시각화 & 모니터링
- Filebeat: 경량 수집기 (옵션)
추가 실무 팁
- 운영 환경에서는 SSL 인증서 설정, 사용자 인증, 로그 롤링 정책을 반드시 고려
- 시스템 리소스(메모리, 디스크 IOPS)에 민감하므로 적절한 스펙 설계 필요
- 각 구성 요소는 시스템 로그뿐 아니라 웹 서버, DB, 보안 로그 등 다양한 로그와 통합 가능