로그 관리와 중앙 집중식 로깅 시스템 구축
1. 문제 상황: 로그 관리의 어려움
서비스가 확장되면서 여러 서버에서 로그가 생성되는데, 이를 효율적으로 관리하는 것이 어려운 상황이 발생했다.
- 여러 서버에서 로그가 분산되어 있어 분석이 어려움
- 서버 장애 발생 시 로그를 확인하려면 각각의 서버에 접속해야 함
- 로그 저장 공간이 제한적이며 오래된 로그가 자동으로 삭제되지 않음
- 실시간으로 로그를 분석할 수 있는 시스템이 없음
이러한 문제를 해결하기 위해 중앙 집중식 로깅 시스템을 구축할 필요가 있다.
2. 해결 과정: 중앙 집중식 로깅 시스템 개념과 구축 방법
2.1 중앙 집중식 로깅이란?
중앙 집중식 로깅(Centralized Logging)은 여러 서버에서 생성된 로그를 하나의 중앙 시스템으로 수집하고, 이를 분석할 수 있도록 구성하는 방법이다.
이 시스템을 도입하면 다음과 같은 장점이 있다.
- 로그를 한 곳에서 모니터링하고 분석할 수 있음
- 검색 기능을 통해 원하는 로그를 빠르게 찾을 수 있음
- 실시간으로 로그를 분석하여 장애를 빠르게 감지할 수 있음
- 자동 백업 및 로그 보관 정책을 설정할 수 있음
2.2 로그 수집 방식
로그를 중앙 시스템으로 전송하는 방식은 다음과 같이 나뉜다.
방식 | 설명 |
---|---|
에이전트 기반 | 각 서버에 로그 수집 에이전트를 설치하여 중앙 서버로 전송 |
네트워크 전송 | syslog 또는 HTTP API를 통해 로그를 직접 중앙 서버로 전송 |
파일 기반 | 로그 파일을 주기적으로 중앙 서버로 복사하여 저장 |
3. ELK Stack을 활용한 로그 관리
대표적인 중앙 집중식 로깅 시스템으로 ELK Stack(Elasticsearch, Logstash, Kibana)이 있다.
3.1 ELK Stack 구성 요소
- Elasticsearch: 로그 데이터를 저장하고 검색하는 분산 검색 엔진
- Logstash: 로그를 수집, 변환하여 Elasticsearch로 전송
- Kibana: 수집된 로그를 시각화하고 분석하는 대시보드
3.2 ELK Stack 설치
Ubuntu 서버에서 ELK Stack을 설치하는 방법:
# Elasticsearch 설치
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
sudo apt update
sudo apt install elasticsearch -y
sudo systemctl enable --now elasticsearch
# Logstash 설치
sudo apt install logstash -y
# Kibana 설치
sudo apt install kibana -y
sudo systemctl enable --now kibana
3.3 Logstash를 이용한 로그 수집
/etc/logstash/conf.d/logstash.conf
파일을 생성하고 로그 수집 설정을 추가한다.
input {
file {
path => "/var/log/nginx/access.log"
start_position => "beginning"
}
}
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "nginx-logs"
}
}
설정이 완료되면 Logstash를 실행한다.
sudo systemctl restart logstash
3.4 Kibana에서 로그 시각화
웹 브라우저에서 Kibana(http://localhost:5601
)에 접속한 후, "Index Patterns"을 설정하여 로그를 검색하고 시각화할 수 있다.
4. Fluentd를 활용한 로그 수집
ELK Stack 외에도 Fluentd를 활용하여 로그를 수집할 수도 있다.
4.1 Fluentd 설치
curl -fsSL https://toolbelt.treasuredata.com/sh/install-ubuntu-bionic-td-agent3.sh | sh
4.2 Fluentd 설정
/etc/td-agent/td-agent.conf
파일을 수정하여 로그 수집 경로를 설정한다.
@type tail
path /var/log/nginx/access.log
pos_file /var/log/td-agent/nginx-access.log.pos
tag nginx.access
format apache
@type elasticsearch
host localhost
port 9200
logstash_format true
설정 적용 후 Fluentd를 실행한다.
sudo systemctl restart td-agent
5. 중앙 로그 저장소 구성
대규모 로그 데이터를 저장하려면 AWS S3, Google Cloud Storage(GCS) 또는 Hadoop 기반 데이터 레이크를 활용할 수 있다.
- AWS S3: 로그를 S3 버킷에 저장하고 Athena로 분석
- GCP Cloud Logging: Google Cloud 환경에서 로그를 자동으로 수집
- Hadoop HDFS: 빅데이터 분석을 위한 대용량 로그 저장소
6. 알림 시스템 연동
로그를 모니터링하고 이상 징후가 발생하면 알림을 받을 수 있도록 설정할 수 있다.
6.1 Elasticsearch와 Slack 연동
watcher {
trigger {
schedule {
interval: "5m"
}
}
input {
search {
request {
indices: "nginx-logs"
body: {
query: {
match: { "response": "500" }
}
}
}
}
}
actions {
notify-slack {
webhook {
url: "https://hooks.slack.com/services/your/webhook/url"
method: "POST"
body: "서버 오류 발생: 500 응답 다수 감지"
}
}
}
}
7. 최종 정리
중앙 집중식 로깅 시스템을 도입하면 로그를 효율적으로 수집, 저장, 분석할 수 있다.
핵심 요약:
- ELK Stack(Elasticsearch, Logstash, Kibana) 또는 Fluentd를 활용한 로그 수집
- 로그를 중앙 저장소(S3, HDFS 등)에 보관하여 장기적인 관리
- 실시간 로그 분석 및 시각화를 통한 빠른 문제 해결
- 이상 징후 발생 시 Slack, 이메일 등의 알림 시스템 연동
이러한 전략을 적용하면 서비스의 안정성과 가시성을 높일 수 있다.