2025. 3. 2. 14:51ㆍSpring Microservice
📌 Logs (로깅 관리)
(Twelve-Factor App 원칙: 로그(Log)는 이벤트 스트림으로 관리해야 한다.)
마이크로서비스 환경에서 로그(Log)는 단순한 파일이 아니라, 스트림 형태의 이벤트 데이터로 관리되어야 합니다.
각 마이크로서비스는 로그를 표준 출력(stdout)으로 기록하고,
로그 수집 도구(Logstash, Fluentd 등)를 활용하여 중앙 집중식 로그 관리 시스템(ELK Stack 등)에 저장해야 합니다.
🔹 1. Logs(로깅 관리)란?
- 마이크로서비스는 로그 파일을 직접 관리하지 않고, 표준 출력(stdout)에 기록해야 함.
- 로그는 독립적인 이벤트 스트림이며, 중앙 집중식 로그 관리 시스템을 통해 수집 및 분석해야 함.
- 로그 수집 도구(Logstash, Fluentd 등)를 활용하여 Elasticsearch, Kibana 등에 저장.
- 애플리케이션 코드에서 로그 저장 방식에 대한 걱정을 할 필요 없음.
📌 아래 다이어그램은 로그가 중앙 로그 시스템(ELK Stack)으로 수집되는 과정을 보여줍니다.
✅ 각 마이크로서비스는 로그 파일을 생성
✅ Logstash가 로그를 수집하여 Elasticsearch에 저장
✅ Kibana를 활용하여 로그를 분석하고 시각화
🔹 2. Logs를 효과적으로 관리하는 방법
✅ (1) 마이크로서비스에서 표준 출력(stdout)으로 로그 기록
마이크로서비스는 파일에 로그를 직접 저장하는 것이 아니라, 표준 출력(stdout)으로 기록해야 합니다.
📌 Spring Boot에서 표준 출력으로 로깅 설정 (application.yml
)
logging:
level:
root: INFO
pattern:
console: "%d{yyyy-MM-dd HH:mm:ss} - %msg%n"
📌 Java에서 표준 출력으로 로깅하기
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LogExample {
private static final Logger logger = LoggerFactory.getLogger(LogExample.class);
public static void main(String[] args) {
logger.info("마이크로서비스가 시작되었습니다.");
logger.warn("경고: 예상치 못한 동작이 감지되었습니다.");
logger.error("오류 발생: 데이터베이스 연결 실패.");
}
}
✅ 모든 로그는 stdout으로 출력되며, 외부 로그 수집기가 이를 감지하여 수집.
✅ (2) Logstash를 활용한 중앙 집중식 로그 수집
📌 Logstash 설정 예제 (logstash.conf
)
input {
file {
path => "/var/log/microservice.log"
start_position => "beginning"
}
}
filter {
grok {
match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} - %{GREEDYDATA:log}" }
}
}
output {
elasticsearch {
hosts => ["http://elasticsearch:9200"]
index => "microservice-logs"
}
stdout { codec => rubydebug }
}
✅ Logstash는 로그를 수집하여 Elasticsearch에 저장하고, 콘솔에도 출력 가능.
📌 Logstash 실행 명령어
logstash -f logstash.conf
✅ (3) Kibana를 활용한 로그 분석 및 시각화
📌 Kibana에서 Elasticsearch의 로그를 조회하는 쿼리 예제
GET microservice-logs/_search
{
"query": {
"match_all": {}
}
}
✅ Kibana를 활용하면 로그를 검색하고 대시보드를 통해 시각적으로 분석 가능.
🔹 3. Logs 관리가 중요한 이유
✅ 배포 및 장애 분석에 활용 가능
- 서비스 배포 후 문제가 발생하면, 로그를 통해 원인을 분석할 수 있음.
- 로그 기반 모니터링을 통해 운영 중 발생하는 장애를 빠르게 감지.
✅ 보안 및 규정 준수(Compliance) 지원
- 사용자 활동 로그를 저장하여 보안 감사를 수행할 수 있음.
- 금융, 의료 등 규제가 있는 환경에서는 로그 저장 및 관리가 필수적.
✅ 애플리케이션 성능 분석
- 서비스의 응답 시간, 오류율 등을 분석하여 성능을 최적화할 수 있음.
- 실시간 로그 분석을 통해 부하를 예측하고 대응 가능.
🔹 4. Logs 관리를 따르지 않으면 발생하는 문제
❌ 로그가 개별 마이크로서비스에서만 관리되는 경우
# Order Service 로그 파일 (/var/log/order-service.log)
2024-03-02 12:00:01 - 주문 생성 성공
# Payment Service 로그 파일 (/var/log/payment-service.log)
2024-03-02 12:00:02 - 결제 처리 완료
🚨 문제점:
- 개별 서비스에서만 로그를 관리하면 장애 발생 시 전체 서비스 흐름을 파악하기 어려움.
- 로그를 한 곳에서 조회할 수 없어, 장애 분석 시간이 증가.
✅ 해결 방법:
- 모든 마이크로서비스 로그를 중앙 집중식 로그 관리 시스템(ELK Stack, Fluentd 등)에서 관리.
📌 결론: Logs 적용 원칙
1️⃣ 마이크로서비스는 개별적으로 로그를 관리하지 않고, stdout(표준 출력)으로 기록해야 함.
2️⃣ 로그 파일을 직접 관리하는 것이 아니라, 로그 수집 도구(Logstash, Fluentd 등)를 활용해야 함.
3️⃣ 모든 로그는 Elasticsearch 같은 중앙 집중식 스토리지에 저장하고, Kibana를 활용해 분석해야 함.
4️⃣ 로그를 활용한 모니터링을 구축하여 장애를 사전에 감지하고 대응 가능하도록 해야 함.
5️⃣ 보안 및 규정 준수를 위해 로그 보존 정책을 설정하고, 장기 보관이 필요한 경우 클라우드 스토리지(AWS S3 등)에 저장.
🔹 이를 통해 운영 환경에서 장애를 빠르게 감지하고 대응할 수 있는 마이크로서비스를 구축할 수 있습니다! 🚀
'Spring Microservice' 카테고리의 다른 글
Making sure our examples are relevant (0) | 2025.03.02 |
---|---|
Admin processes (1) | 2025.03.02 |
Dev/prod parity (0) | 2025.03.02 |
Disposability (0) | 2025.03.02 |
Concurrency (0) | 2025.03.02 |