본문 바로가기
IT & Tech 정보

🚀 Elasticsearch를 이용한 로그 수집·검색·대시보드: ELK 스택

by 지식과 지혜의 나무 2025. 5. 25.
반응형


이번에는 Elasticsearch, Logstash, Kibana(ELK 스택)를 활용해
로그를 수집·검색·시각화하는 엔드투엔드 파이프라인을 단계별로 구성해보겠습니다.
Filebeat를 이용해 애플리케이션 로그를 수집하고, Logstash에서 변환한 뒤 Elasticsearch에 저장,
Kibana에서 대시보드를 구축하는 과정을 다룹니다.



📋 목차
1. ELK 스택 개요
2. 환경 준비
3. Elasticsearch 설치 & 기본 설정
4. Logstash 설치 & 파이프라인 구성
5. Filebeat 설치 & 로그 수집 설정
6. Kibana 설치 & 인덱스 패턴 생성
7. 대시보드 구축 예제
8. 실전 팁 & 주의사항
9. 마무리



1️⃣ ELK 스택 개요
• Elasticsearch: 분산형 검색·분석 엔진
• Logstash: 다양한 소스로부터 로그 수집·변환·전송
• Kibana: Elasticsearch 데이터를 시각화하는 웹 UI
• Filebeat: 경량 로그 수집기(Agent)

이 구성으로 애플리케이션 → Filebeat → Logstash → Elasticsearch → Kibana
흐름의 통합 로그 플랫폼을 구축할 수 있습니다.



2️⃣ 환경 준비
• OS: Ubuntu 20.04 (예시)
• 메모리: 4GB 이상 권장
• Java: OpenJDK 11 (Elasticsearch·Logstash 필요)

sudo apt update
sudo apt install -y openjdk-11-jdk
java -version  # 확인: openjdk version "11.x"




3️⃣ Elasticsearch 설치 & 기본 설정

# 1) 공식 GPG 키 및 저장소 등록
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
sudo apt install -y apt-transport-https
echo "deb https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-8.x.list
sudo apt update

# 2) Elasticsearch 설치
sudo apt install -y elasticsearch

# 3) 설정 파일 수정 (/etc/elasticsearch/elasticsearch.yml)
sudo tee -a /etc/elasticsearch/elasticsearch.yml <<EOF
cluster.name: elk-cluster
network.host: 0.0.0.0
http.port: 9200
discovery.type: single-node
EOF

# 4) 서비스 시작
sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch

# 5) 동작 확인
curl http://localhost:9200/_cluster/health?pretty




4️⃣ Logstash 설치 & 파이프라인 구성

# 1) Logstash 설치
sudo apt install -y logstash

# 2) 파이프라인 설정 파일 작성 (/etc/logstash/conf.d/logstash.conf)
sudo tee /etc/logstash/conf.d/logstash.conf <<'EOF'
input {
  beats {
    port => 5044
  }
}
filter {
  # 예: JSON 로그 파싱
  json {
    source => "message"
  }
  # 타임스탬프 변환
  date {
    match => ["timestamp", "ISO8601"]
  }
}
output {
  elasticsearch {
    hosts => ["localhost:9200"]
    index => "app-logs-%{+YYYY.MM.dd}"
  }
  stdout { codec => rubydebug }
}
EOF

# 3) 서비스 시작
sudo systemctl enable logstash
sudo systemctl start logstash

# 4) 포트 확인 (5044)
sudo ss -tlpn | grep 5044




5️⃣ Filebeat 설치 & 로그 수집 설정

# 1) Filebeat 설치
sudo apt install -y filebeat

# 2) Filebeat 모듈 비활성화(옵션)
filebeat modules disable *

# 3) Filebeat 설정 파일 수정 (/etc/filebeat/filebeat.yml)
sudo tee /etc/filebeat/filebeat.yml <<'EOF'
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/myapp/*.log

output.logstash:
  hosts: ["localhost:5044"]
EOF

# 4) 서비스 시작
sudo systemctl enable filebeat
sudo systemctl start filebeat

# 5) 로그 수집 확인
sudo tail -f /var/log/logstash/logstash-plain.log




6️⃣ Kibana 설치 & 인덱스 패턴 생성

# 1) Kibana 설치
sudo apt install -y kibana

# 2) 설정 파일 수정 (/etc/kibana/kibana.yml)
sudo tee -a /etc/kibana/kibana.yml <<EOF
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://localhost:9200"]
EOF

# 3) 서비스 시작
sudo systemctl enable kibana
sudo systemctl start kibana

# 4) 웹 UI 접속
# 브라우저 → http://localhost:5601

• 인덱스 패턴: app-logs-* 지정 → Discover 탭에서 샘플 로그 확인



7️⃣ 대시보드 구축 예제
1. Discover 탭에서 @timestamp, message 등 필드 구조 파악
2. Visualize Library →
• Line chart: 시간별 로그 수 추이
• X축: @timestamp(Date Histogram)
• Y축: Count
• Data Table: 최다 에러 메시지 상위 10개
• Bucket: Terms aggregation on level or error.keyword
3. Dashboard → 새 대시보드 생성 후 위 시각화 추가
4. Dashboard 저장 → 필요하면 시간 필터·쿼리 템플릿 설정



8️⃣ 실전 팁 & 주의사항
• 보안
• Elasticsearch·Kibana 인증 활성화(X-Pack)
• HTTPS 통신 설정
• 성능
• 인덱스 수명 관리(Index Lifecycle Management)로 디스크 절약
• 샤드·레플리카 수 튜닝
• 확장성
• Logstash 병렬 파이프라인 구성(pipeline.workers)
• Filebeat → Logstash → Elasticsearch 클러스터링
• 모니터링
• Metricbeat ⋅ Elastic Stack 모니터링 모듈 활용
• Grafana+Prometheus로 클러스터 상태 시각화



🔚 마무리

ELK 스택을 통해 애플리케이션 로그를 실시간으로 수집·저장·검색하고,
Kibana로 대시보드를 구성하는 전체 파이프라인을 완성했습니다.
위 예제와 팁을 참고해 여러분 서비스의 운영 가시성을 높여보세요!

반응형