1. 로그 관리란?
로그 관리란 시스템, 애플리케이션, 네트워크 등에서 발생하는 로그 데이터를 수집, 저장, 분석, 활용하는 활동을 말한다.
효율적인 로그 관리는 시스템에서 발생하는 다양한 이벤트를 추적하고 문제를 빠르게 파악하는 데 도움을 준다.
예를 들어, 서비스 장애나 성능 문제가 발생했을 때 로그 데이터를 통해 문제 원인을 파악하고 디버깅할 수 있으며, 보안 로그를 통해 침입 탐지나 이상 행동 분석도 가능하다.
주요 목적
- 중앙화: 시스템에 분산된 로그 데이터를 한 곳에 모아 관리하기 쉽게 만든다.
- 표준화: 로그 형식을 통일해 분석과 검색을 쉽게 한다.
- 로그 관리 시스템을 구축한 후에는 다양한 로그 유형을 표준화해야 한다.
- 표준화가 이루어지지 않으면 로그 검색이 어려워지고, 데이터를 가공하거나 집계하는 데 많은 시간이 소요된다.
- 활용성 증대: 시스템 상태 파악, 성능 최적화, 보안 사고 대응 등 다양한 용도로 사용한다.
- 로그 관리 시스템은 서비스 전반에서 로그 데이터를 수집하여 다음과 같은 목적으로 활용한다.
- 시스템 동작 추론 및 문제 탐지
- 디버깅 및 검증
- 새로운 통찰 제공
- 로그 관리 시스템은 서비스 전반에서 로그 데이터를 수집하여 다음과 같은 목적으로 활용한다.
로그 관리 시스템
로그 관리 시스템은 서비스 전반에서 로그 데이터를 수집하여 시스템 동작 추론, 문제 탐지, 디버깅, 새로운 통찰을 제공하는 데 사용된다.
Splunk, Elastic Stack(ELK), Grafana Loki 등의 도구를 활용하여 로그를 시각화하거나 알림을 설정해 관리할 수 있다.
2. 로그 관리에서 고려할 사항
- 지속적 수집 및 관리: 서비스 재시작이나 장애 상황에서도 로그 수집과 관리가 중단되지 않아야 한다.
- 확장성: 로그 데이터가 급격히 증가할 수 있으므로 시스템은 동적이고 수평적 확장이 가능해야 한다.
- 다양한 환경 지원: 가상 머신, Docker 컨테이너, Kubernetes 파드 등에서 일관된 방식으로 로그를 수집해야 한다.
- 멀티 테넌트 지원: 클라우드 네이티브 환경에서는 여러 조직과 서비스에서 생성되는 로그를 단일 시스템에서 관리 가능해야 한다.
- 데이터 활용: 수집된 로그 데이터를 검색, 가공, 후속 처리에 활용할 수 있어야 한다.
3. 로그 데이터
로그 데이터 예시
- 애플리케이션 성능 데이터: 프론트엔드와 백엔드에서 수집된 성능 지표
- 네트워크 트래픽 로그: 프록시, 로드 밸런서 등에서 수집
- 서버 및 프레임워크 로그: 웹 서버, 로깅 라이브러리에서 생성된 데이터
- 벤더 솔루션 로그: SAP 같은 레거시 시스템에서 비구조적인 형식으로 생성된 로그
- 고유한 형식으로 생성되며, 변환 작업이 필요하다.
로그 데이터에 포함해야 할 정보
- 타임스탬프: 로그 엔트리에는 발생 시간을 명시해야 하며, GMT/UTC 기준 사용을 권장한다.
- 데이터가 상호적으로 연관되고 적절한 순서를 갖도록 정하려면 로그 엔트리에 타임스탬프를 포함해야 한다.
- 각 서비스는 자체 타임스탬프를 표현해야 하는데, 최근에는 마이크로 세컨트(ms) 단위로 기록하는 것을 권장한다.
- 발생 시간으로 데이터를 정렬하면 분석하기 쉬워지고 문맥 정보의 필요성을 줄인다.
- 식별자: 주문 ID, 트랜잭션 ID 등 고유 식별자는 소스 데이터를 상호 참조하는 데 유용하다.
- 저장하려는 데이터에 가능한 많은 고유 식별자를 포함시켜야 한다.
- 소스 정보: 로그를 생성한 호스트, 클래스, 모듈, 함수, 파일명을 포함한다.
- 병목 구간과 잠재적 성능 문제를 식별하는 데 도움을 준다.
- 레벨 또는 카테고리: 로그 레벨(ERROR, DEBUG, INFO 등)을 포함하여 에러 탐지 및 알림 생성이 가능하도록 한다.
- 각 로그 엔트리는 카테고리를 포함해야 한다.
- 카테고리는 로그 데이터의 유형이거나, 로그 레벨이다.
- 레벨이 있다면 로그 관리 시스템은 ERROR 레벨을 가진 메시지를 찾아내서 에러 보고 알람 등을 생성해서 운영자에게 전송할 수 있다.
- ElasticSearch와 Loki에서는 이러한 기능을 쉽게 개발할 수 있다.
4. 로그 표준화 및 구조화
로그 엔트리를 생성할 때는 다음과 같은 사항을 지키는 것이 중요하다.
- JSON 형식 권장: 사람이 읽기 쉽고 기계가 쉽게 파싱할 수 있는 JSON 형식을 사용하는 것이 효과적이다.
- JSON 형식은 로그의 일관성과 검색 효율성을 높이는 데 매우 효과적이다.
- 단일 라인 로그: 여러 줄에 걸친 로그는 파편화되어 후속 처리나 분석 시 불편함을 초래할 수 있으므로 지양해야 한다.
- 가능한 한 로그는 한 줄로 기록하여 처리 효율성을 높이는 것이 좋다.
5. 오픈 텔레매트리(OpenTelemetry)
오픈 텔레매트리는 로깅 인터페이스 표준화와 관계는 없지만, 여러 유용한 기능을 제공한다.
오픈 텔레매트리에서 소개하는 로깅 파이프라인은 여러 모로 의미 있는 작업이다.
https://www.elastic.co/kr/what-is/opentelemetry
OpenTelemetry란 무엇인가요?
OpenTelemetry의 정의와 사용 목적 및 이점을 비롯하여 OpenTelemetry의 작동 방식에 대해 알아보세요. 개방형 원격 측정 API, SDK 등에 대한 다양한 계측 방법을 검토해 보세요....
www.elastic.co
오픈 텔레매트리에서 제공해주는 기능
- LogRecord 생성: 로그 데이터를 표준화된 형식으로 구조화한다.
- 구조화된 로그 생성 방법 제공: 언어별 로깅 라이브러리와 연계하여 로그를 구조화한다.
- 리소스 및 추적 데이터 추가: 로그에 상관 관계 데이터를 추가하여 분석 효율성을 높인다.
- 필요한 로그만 출력: LogEmitter와 Log Level을 사용하여 최적화된 로그를 출력한다.
- 다양한 에이전트 연계: OpenTelemetry 에이전트를 활용하여 로그 관리 시스템 확장할 수 있다.
구성 요소
- 데이터를 수집하는 에이전트
- 에이전트의 데이터를 받아서 가공, 다른 곳으로 전송하는 컬렉터