Information Security Study
서버 내 로그 관리 정책 수립 및 구현 본문
현재 이 글은 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 스크립트로 작성 후 젠킨스에 등록해서 크론탭에 등록하기!
'네트워크 캠퍼스 > 3차 프로젝트' 카테고리의 다른 글
롤링 방식으로 무중단 배포하기, 젠킨스-nginx 설정파일 수정을 위한 공개키 복사 (0) | 2024.08.09 |
---|---|
일반 배포 방식으로 앱 서버 두 개에 배포하기 (0) | 2024.08.09 |
웹훅 설정하기 (0) | 2024.08.06 |
그라파나-프로메테우스로 인스턴스가 종료됐을 경우 알람 받기 (1) | 2024.08.06 |
프로메테우스 커스텀 매트릭 생성 및 조회하기(인스턴스 정지에도 상태값이 조회 가능한 상황) (0) | 2024.08.06 |