본문 바로가기

logging

[Golang] Slog를 활용한 로그 샘플링 구현하기 지난 포스팅에서는 "slog"를 활용한 민감 정보를 가리는 마스킹 핸들러를 알아보았습니다.이번에는 보안만큼 중요한 운영 비용과 시스템 과부화 관리에 대해서 함께 알아보겠습니다.초당 수만 건씩 발생하는 단순 상태 로그들을 전부 저장하면 로그 서버(ELK,CloudWatch)의 비용이 계속 증가하게 됩니다.중요한 에러 로그를 찾고, 검색하는 것에 방해가 되는 경우가 많습니다. 이때 필요한 방법이 "로그 샘플링" 입니다. 1. 작동 원리특정 범위의 로그는 설정한 비율로만 남기고 중요한 로그는 유실 없이 기록하는 전략입니다.특정 범위 로그 : 로그 레벨 (debug,info,warn.... 등)설정한 비율 : N회당 1개 (10번 중 1번 출력하기) 2. 전체 코드slog.handler 인터페이스를 구현합니다.. 더보기
[Golang] 표준 로깅 라이브러리 Slog Go 1.21 버전부터 표준 라이브러리에 "log/slog" 가 추가 되었습니다.기존 log 패키지는 단순 문자열 기반 로깅이었지만 slog는 key-value 기반의 구조화 로그를 지원함으로써기존의 "logrus", "zap" 같은 외부 라이브러리 없이도 구조화된 로깅을 사용할 수 있게 되었습니다. 1. slog란?slog는 Structured Logging의 약자로, 로그를 단순한 텍스트가 아닌 Key-Value 쌍의 구조화된 데이터로 관리하는 라이브러리입니다. - 특징표준 라이브러리 : 외부 의존성 없이 프로젝트 유지보수가 가능합니다.구조화된 데이터 : Json 형태로 로그를 출력해 ELK 스택이나 CloudWatch 등 로그 분석 솔루션의 연동하기 좋습니다. 2. 사용 방법 2-1. 기본 사용 .. 더보기
[Golang] logrus로 구조화된 로깅 구현 Go 프로젝트에서는 표준 출력 fmt,log 패키지만으로는 로그를 관리하는 것에는 한계가 있습니다.로그 레벨을 구분하고, 상황에 따라 메타데이터를 포함하는 구조화된 로깅이 반드시 필요합니다.여러 로깅 라이브러리 중에서 "logrus"에 대해서 알아보겠습니다. 1. Logrus란?logrus는 Go언어에서 가장 많이 사용되는 로깅 라이브러리 중 하나이며, 단순 텍스트를 넘어 JSON과 같은 구조화된 로그를 생성하는 것에 최적화되어 있어 ,ELK 스택(Elasticsearch, Logstash, Kibana)이나 CloudWatch 같은 로그 수집 솔루션과 연동하기가 아주 좋습니다. 2. 사용 방법 2-1 ) 설치go get github.com/sirupsen/logrus 2-2 ) 예제package m.. 더보기