Skip to content

모니터링 및 로깅 ​

로그 시스템 ​

hereby 플랫폼은 Pino 로거를 사용하며, 구조화된 JSON 로그를 출력합니다.

로그 레벨 ​

레벨용도
debug상세 디버깅 정보
info일반 운영 정보 (기본값)
warn경고 (즉시 조치 불필요)
error오류 (조치 필요)

로그 레벨 변경 ​

환경 변수로 로그 레벨을 설정합니다:

bash
# .env
LOG_LEVEL=info   # debug, info, warn, error

Docker 컨테이너 로그 ​

로그 확인 ​

bash
# 전체 로그
docker-compose logs

# 특정 서비스 실시간 로그
docker-compose logs -f postgres
docker-compose logs -f redis

# 최근 100줄만
docker-compose logs --tail=100 postgres

API 서버 로그 ​

bash
# API 서버 로그 확인
pnpm --filter @hereby/api dev 2>&1 | tee api.log

헬스 체크 ​

PostgreSQL ​

bash
# 연결 테스트
docker exec hereby_postgres pg_isready -U hereby_admin

# 상태 확인
docker exec hereby_postgres psql -U hereby_admin -d hereby_platform -c "SELECT 1;"

Redis ​

bash
# 연결 테스트
docker exec hereby_redis redis-cli ping
# 응답: PONG

# 메모리 사용량
docker exec hereby_redis redis-cli info memory

Docker 컨테이너 상태 ​

bash
# 전체 컨테이너 상태
docker-compose ps

# 리소스 사용량 (CPU, 메모리)
docker stats --no-stream

성능 모니터링 ​

PostgreSQL 성능 ​

sql
-- 느린 쿼리 로깅 활성화 (postgresql.conf)
-- log_min_duration_statement = 1000  -- 1초 이상 쿼리 로깅

-- 캐시 히트율 확인
SELECT
  sum(heap_blks_read) as heap_read,
  sum(heap_blks_hit) as heap_hit,
  round(sum(heap_blks_hit) / (sum(heap_blks_hit) + sum(heap_blks_read))::numeric, 4) as ratio
FROM pg_statio_user_tables;

-- 인덱스 사용률 확인
SELECT
  relname,
  idx_scan as index_scans,
  seq_scan as sequential_scans
FROM pg_stat_user_tables
ORDER BY seq_scan DESC
LIMIT 10;

디스크 사용량 ​

bash
# 데이터베이스 크기
docker exec hereby_postgres psql -U hereby_admin -d hereby_platform \
  -c "SELECT pg_size_pretty(pg_database_size('hereby_platform'));"

# Docker 볼륨 크기
docker system df -v

알림 설정 ​

디스크 공간 모니터링 스크립트 ​

bash
#!/bin/bash
# scripts/check-disk.sh
THRESHOLD=80
USAGE=$(df / | tail -1 | awk '{print $5}' | sed 's/%//')

if [ "$USAGE" -gt "$THRESHOLD" ]; then
  echo "WARNING: 디스크 사용량 ${USAGE}%가 임계값 ${THRESHOLD}%를 초과했습니다"
  # 알림 전송 로직 추가
fi

PostgreSQL 연결 수 모니터링 ​

bash
#!/bin/bash
# scripts/check-connections.sh
MAX_CONNECTIONS=100
CURRENT=$(docker exec hereby_postgres psql -U hereby_admin -d hereby_platform \
  -t -c "SELECT count(*) FROM pg_stat_activity;")

if [ "$CURRENT" -gt "$MAX_CONNECTIONS" ]; then
  echo "WARNING: DB 연결 수 ${CURRENT}가 임계값을 초과했습니다"
fi