로그란?
데이터의 종류
데이터베이스 데이터
사용자 행동 데이터 (유저 행동 로그)
데이터 웨어하우스에 저장
데이터 분석시 필요한 데이터
앱, 웹에서 유저가 어떤 행동을 하는지 나타내는 데이터
인프라 데이터 (Metric)
백엔드 웹 서버가 제대로 동작하고 있는지 확인하는 데이터
Request, Response 수
데이터 적재 방식
데이터베이스 (RDB)에 저장하는 방식
다시 웹, 앱 서비스에서 사용되는 경우 활용
실제 서비스용 DB
데이터 추출시 SQL 사용
e.g., MySQL, PostgreSQL
데이터베이스 (NoSQL)에 저장하는 방식
스키마가 없거나 느슨한 스키마 적용
JSON 형태와 비슷
e.g, MongoDB, ElasticSearch
Object Storage에 저장하는 방식
S3, Cloud Storage에 파일 형태로 저장
어떤 형태의 파일이어도 저장 가능
별도로 DB나 데이터 웨어하우스로 옮기는 작업 필요
Data Warehouse에 저장하는 방식
데이터 분석시 활용하는 데이터 웨어하우스로 바로 저장
RDBMS, NoSQL, Object Storage 등에 저장된 데이터를 한 곳으로 옮겨서 처리
e.g., AWS Redshift, GCP BigQuery
Python Logging Module
심각도에 따라 다양한 카테고리로 데이터 저장
Log Level
| Level | Value | Description | API |
|---|---|---|---|
| DEBUG | 10 | 문제 해결에 필요한 자세한 정보 공유 | logging.debug() |
| INFO | 20 | 작업이 정상적으로 작동 | logging.info() |
| WARNING | 30 | 예상하지 못한 일이거나 발생 가능한 문제 / 작업은 정상 수행 | logging.warning() |
| ERROR | 40 | 프로그램이 함수를 실행할 수 없음 | logging.error() |
| CRITICAL | 50 | 프로그램이 동작할 수 없는 심각한 문제 | logging.critical() |
기본 로깅 레벨은 WARNING
따로 설정하지 않으면 WARNING 이상의 심각한 로그만 보여줌
Logging Code
import logging
import logging.config
logger = logging.getLogger("example") # root logger
logger.info("hello world") # 아무런 로그도 출력되지 않습니다
logger_config = {
"version": 1, # required
"disable_existing_loggers": True, # 다른 Logger를 overriding 합니다
"formatters": {
"simple": {"format": "%(asctime)s | %(levelname)s - %(message)s"},
},
"handlers": {
"console": {
"level": "DEBUG",
"class": "logging.StreamHandler",
"formatter": "simple",
}
},
"loggers": {"example": {"level": "INFO", "handlers": ["console"]}},
}
logging.config.dictConfig(logger_config)
logger_with_config = logging.getLogger("example")
logger_with_config.info("이제는 보이죠?")
logging.getLogger() Logger 객체 생성
Config를 설정하지 않으면, 아무런 Output도 출력하지 않음
logging config를 지정
위 코드에선 로그 format을 지정해 줌 (formatters)
"loggers": {"example": {"level": "INFO", "handlers": ["console"]}}
Python Logging Component
Logger
로그를 생성하는 method 제공
로그 레벨과 logger에 적용된 필터 기반으로 처리해야 하는 로그인지 판단
Handler에게 LogRecord 인스턴스 전달
logging.getLogger(’foo.bar’)
logging.getLogger(’foo’) 의 자식 logger bar 반환Handler
Logger에서 만들어진 로그를 적절한 위치로 전송 (파일 저장, Console 출력)
Level과 Formatter를 각각 설정해서 필터링 가능
StreamHandler, FileHandler, HTTPHandler 등
Formatter
최종적으로 로그에 출력될 Formatting 설정
시간, logger 이름, 심각도, Output, 함수 이름 등 정보 제공
BigQuery
GCP의 데이터 웨어하우스
데이터 분석을 위한 도구로 Apache Spark 대용으로 활용 가능
SQL 기반
BigQuery 데이터 구조

※ 모든 이미지 및 코드 출처는 네이버 커넥트재단 부스트캠프 AI Tech 5기입니다. ※