Information Security Study

서버 내 로그 관리 정책 수립 및 구현 본문

네트워크 캠퍼스/3차 프로젝트

서버 내 로그 관리 정책 수립 및 구현

gayeon_ 2024. 8. 7. 16:25

현재 이 글은 a 가용영역의 app1만 구현한 상황이다.

 

서버 내 로그 관리 정책 수립 및 구현

로그 자체는 애플리케이션에서 기록하지만 실제 관리는 리눅스에서 하기 때문에 

애플리케이션 서버에서 생성한 로그를 리눅스에서 적절하게 처리하도록 만들기 어렵다.

 

이번 실습으로 크론탭에 등록해 로그를 처리할 수 있도록 구현할 것이다.

 

 

작업 개요

  • 시간대별 로그에서 타입별 로그를 추출하고 분석계 전달을 위해 날짜별 단위로 통합하기

 

 

예시 코드

# 1. 작업 경로 설정
bk_dir="{로그 백업본(직접 작업X) 보관 경로}"
work_dir="{로그 취합 작업 수행을 위한 2차백업 및 편집 경로}"
mkdir $work_dir

# 2. 작업 대상 날짜 설정 (리스트로 여러 날짜 지정 후 순회 필요)
work_target_ymd="{YYYYMMDD}"

# 3. 작업 대상 로그 복사 및 압축 해제
cp "$bk_dir"/log_"$work_target_ymd"_* "$work_dir"/"$work_target_ymd"/

 

 

실습

1) 로그 파일 저장 경로와 backup 경로 생성하기

  • /logs 경로에 있는 파일들을 전부 /log_backups 경로로 옮기기
  • /log_backups 폴더가 없다면 추가로 만들어기
  • CP로 복사하기

 

~/log 디렉터리를 만들고 log-move.sh 스크립트를 생성한다.

로그와 백업로그를 저장할 작업 경로를 설정한다.

로그 파일명에는 생성 날짜를 YYYY-MM-DD 형식으로 기록하도록 date +%F를 사용했다.

products 엔드포인트에 접속하면 접속 기록이 logs 디렉토리에 로그로 기록된다.

 

 

 

매분 로깅하도록 크론탭을 작성했다.

 

 

 

products에 접속하면

 

 

 

매분마다 로그파일이 생기고 cat으로 내용을 확인하면 접속 기록을 볼 수 있다.

 

 

2) /log_backups 경로에 있는 개별 파일들의 내용을 /log_aggr 경로에 있는 날짜별 파일로 복사하기

  • 파일명은 날짜 패턴(YYYY-MM-DD)까지만 사용하기
  • 해당 날짜 파일이 없으면 생성하기
  • 해당 날짜 파일이 있으면 해당 파일에 내용 추가만 하기

 

 

/log_backups에 있는 세 로그 파일을 병합할 것이다.

 

#!/bin/sh

# 1. 작업 경로 설정
bk_dir="/home/ubuntu/log-tracking-app/build/custom-libs/log_backups"
work_dir="/home/ubuntu/log-tracking-app/build/custom-libs/logs"
aggr_dir="/home/ubuntu/log-tracking-app/build/custom-libs/log_aggr"

# 작업 디렉토리 생성 (디렉토리가 없을 경우에만 생성)
mkdir -p "$work_dir"
mkdir -p "$aggr_dir"

# 2. 작업 대상 날짜 설정
work_target_ymd=$(date +%F)
# 작업 대상 날짜 디렉토리 생성 (디렉토리가 없을 경우에만 생성)
mkdir -p "$work_dir"/"$work_target_ymd"

# 3. 작업 대상 로그 복사 및 압축 해제
# 로그 파일을 지정된 디렉토리로 복사
cp "$bk_dir"/logcontroller."$work_target_ymd"_* "$work_dir"/"$work_target_ymd"/

# 4. 날짜별 파일 집계
# 날짜별 파일명을 설정 (파일명: YYYYMMDD.log)
aggr_file="$aggr_dir"/$(date +%Y%m%d).log

# /log_backups 디렉토리의 모든 파일을 처리
for file in "$bk_dir"/*; do
    # 파일이 로그 파일인지 확인
    if [ -f "$file" ]; then
        # 파일의 내용을 날짜별 파일에 추가
        cat "$file" >> "$aggr_file"
    fi
done

# 로그 파일을 집계 디렉토리로 이동 
for file in "$work_dir"/"$work_target_ymd"/*; do
    if [ -f "$file" ]; then
        # 파일 이름에서 날짜를 추출
        base_name=$(basename "$file")
        date_pattern=$(echo "$base_name" | sed -E 's/logcontroller\.(20[0-9]{2}-[0-9]{2}-[0-9]{2})_.*/\1/')

        # 날짜 형식으로 파일명 변경
        new_file="$work_dir"/"$date_pattern".log

        # 파일을 날짜별 파일로 이동
        mv "$file" "$new_file"
    fi
done

 

 

log-move.sh

 

 

상세 설명

# 1. 작업 경로 설정
bk_dir="/home/ubuntu/log-tracking-app/build/custom-libs/log_backups"
work_dir="/home/ubuntu/log-tracking-app/build/custom-libs/logs"
aggr_dir="/home/ubuntu/log-tracking-app/build/custom-libs/log_aggr"

 

백업 디렉토리(/log_backups), 작업 디렉토리(/logs), 집계 디렉토리(/log_aggr)를 설정한다.

백업 디렉토리에는 이전 로그파일이 저장되고

작업 디렉토리에는 현재 로그파일,

집계 디렉토리에는 날짜별로 집계된 로그 파일이 저장된다.

 

# 2. 작업 대상 날짜 설정
work_target_ymd=$(date +%F)
# 작업 대상 날짜 디렉토리 생성 (디렉토리가 없을 경우에만 생성)
mkdir -p "$work_dir"/"$work_target_ymd"

 

현재 날짜를 YYYY-MM-DD 형식으로 설정한다.

date +%F로 현재 날짜를 구해서 사용한다.

mkdir로 작업 디렉토리 내에 날짜별 하위 디렉토리를 생성한다.

 

# 3. 작업 대상 로그 복사 및 압축 해제
# 로그 파일을 지정된 디렉토리로 복사
cp "$bk_dir"/logcontroller."$work_target_ymd"_* "$work_dir"/"$work_target_ymd"/

 

백업 디렉토리에서 작업 디렉토리로 로그 파일을 복사한다.

 

 

백업 디렉토리에서 현재 날짜에 맞는 로그 파일들을 작업 디렉토리의 날짜별 디렉토리로 복사한다.

 

# 4. 날짜별 파일 집계
# 날짜별 파일명을 설정 (파일명: YYYYMMDD.log)
aggr_file="$aggr_dir"/$(date +%Y%m%d).log

# /log_backups 디렉토리의 모든 파일을 처리
for file in "$bk_dir"/*; do
    # 파일이 로그 파일인지 확인
    if [ -f "$file" ]; then
        # 파일의 내용을 날짜별 파일에 추가
        cat "$file" >> "$aggr_file"
    fi
done

 

백업 디렉토리의 파일을 순회하며 각 파일의 내용을 날짜별 집계 파일에 추가한다.

집계할 파일의 이름을 YYYYMMDD.log로 지정한다.

for문으로 백업 디렉토리의 모든 파일을 순회하며 각 항목이 파일이라면 

파일의 내용을 집계 파일에 추가하는 로직이다.

이 반복문이 종료되면 집계 파일에는 백업 디렉토리에 있는 모든 파일에 내용이 날짜별로 집계되어서 저장된다.

 

 

 

log_aggr 디렉터리가 생겼고 그 안에 날짜별로 로그가 취합되었다.

 

 

더보기

프로젝트 할 때는 shell 스크립트로 작성 후 젠킨스에 등록해서 크론탭에 등록하기!