반응형
로그 추출 및 정리 스크립트 입니다.
압축 되어있는 로그 파일을 꺼낸 후 필요한 기간, 날짜 또는 시간별로 로그를 뽑아낼 수 있는 스크립트로, 많은 서버들의 로그 파일을 특정 기간, 특정 날짜, 특정 시간대별로 추출할 필요가 있을 때 사용하시면 됩니다.
1. 스크립트 실행 환경
- OS : CentOS6.7
- Shell : Bash
- 매일 logs_backup_년도-월-일.tar.gz 의 로그 압축 파일 생성
- 로그파일 내의 날짜 키워도는 날짜,월(영문표기),년도 (ex.31/Dec/2019)
- 각 파일안에 들어있는 로그의 날짜가 일정치 않음 (3~7일 분량의 로그가 쌓일 경우)
아래 스크립트 안에서도 수정할 부분이 많이 있기 때문에 무작정 사용하시지 마시고 환경에 따라 수정 및 충분한 테스트 후에 사용하시기 바랍니다.
스크립트 실행 방법은 아래와 같습니다.
스크립트명.sh 년도 월 시작일(01) 해당월의일수
ex) log_extraction.sh 2019 12 01 31
log_extraction.sh 2019 11 01 30
#!/bin/bash
acc=/home/log
start=1
end=`expr $3 + 1`
njoy=`expr $2 + 1`
echo "---------------------------------------"
qq=`expr $2 + 1`
bb=`expr $2 - 1`
for aa in `seq -f "%02g" $bb $bb`; do for ww in a `seq -f "%02g" $qq $qq`; do echo "로그 추출을 시작합니다."; done done;
echo "---------------------------------------"
echo "$1년 $2월 로그 추출을 시작합니다."
for i in `seq -f "%02g" $start $end`
do
if [ "$i" -ne "$end" ]; then
back="/backup/logs_backup_$1-$2-$i.tar.gz" # 백업된 압축 파일명, 경로 맞춰 (수정 필요)
name="/home/logs_backup_$1-$2-$i.tar.gz" # 백업파일을 가져온 후 실제로 스크립트가 작동하게 될 경로 (수정 필요)
cp $back $acc/logs/
tar -zxvf $name ./access_log > /dev/null 2>&1 # 압축파일 안의 로그 파일명 확인, 필자의 경우 access_log (수정 필요)
a=`expr $i - 1`
cat $acc/access_log | grep $a/$4/$1 > $acc/logs/access_log.$1-$2-$i; rm -f $acc/access_log; rm -f $acc/logs/logs_backup_$1-$2-$i.tar.gz # 로그파일명, 로그 파일안의 날짜 표기 방법 (필자의 경우 11/Dev/2019 처럼 됨) 수정필요하며, 추출 후 $name으로 가져온 압축파일 등 삭제하는 라인으로 수정 시 주의 필요함
fi
## 로딩 바 구현 (https://nirsa.tistory.com/19 참고)
if [ "$i" == "01" ]; then
echo -ne '# (01%)\r'
fi
if [ "$i" == "10" ]; then
echo -ne '########## (33%)\r'
fi
if [ "$i" == "20" ]; then
echo -ne '#################### (66%)\r'
fi
if [ "$i" == "27" ]; then
echo -ne '############################### (97%)\r'
fi
if [ "$i" == "$end" ]; then
echo -ne '################################ (100%)\r'
sleep 1
fi
## 이 아래부터는 위에서 주석처리 후 설명한 내용과 큰 차이 없음
if [ "$i" == "$end" -a "$2" -lt "12" ]; then
q=01
back="/backup/logs_backup_$1-$ww-$q.tar.gz"
name="/home/logs_backup_$1-$ww-$q.tar.gz"
cp $back $acc/logs/
tar -zxvf $name ./access_log > /dev/null 2>&1
cat $acc/access_log | grep $3/$4/$1 > $acc/logs/access_log.$1-$ww-$q; rm -f $acc/access_log; rm -f $acc/logs/logs_backup_$1-$ww-$q.tar.gz; rm -f $acc/logs/access_log.$1-$2-$q
fi
if [ "$i" == "$end" -a "$2" == "12" ]; then
q=01
r=`expr $1 + 1`
back="/backup/logs_backup_$r-01-$q.tar.gz"
name="/home/logs_backup_$r-01-$q.tar.gz"
cp $back $acc/logs/
tar -zxvf $name ./access_log > /dev/null 2>&1
cat $acc/access_log | grep $3/Dec/$1 > $acc/logs/access_log.$r-01-$q; rm -f $acc/access_log; rm -f $acc/logs/logs_backup_$r-01-$q.tar.gz; rm -f $acc/logs/access_log.$r-01-$q
fi
done
for i in `seq -f "%02g" $start $end`
do
if [ "$2" -ge "02" ]; then
# z=`expr $2 - 1`
rm -f $acc/logs/access_log.$1-$aa-$i > /dev/null 2>&1
fi
if [ "$2" == "01" ]; then
# z=`expr $2 - 1`
rm -f $acc/logs/access_log.$1-12-$i > /dev/null 2>&1
fi
done
echo -e "\033[32m"로그 추출을 완료 하였습니다 :D "\033[0m"
필요하실 경우 댓글 등을 남겨주시면 스크립트 검토 해드릴 수는 있지만 추출하려는 목적, 압축 파일명, 로그 파일명 등 필요한 정보가 많다는 점 참고 해주세요.
반응형
'Programming > Bash Shell Script' 카테고리의 다른 글
[Bash Shell Script] 쉘 스크립트 if조건문 라인에서의 "[: too many arguments" 에러 발생 (0) | 2019.12.17 |
---|---|
[Bash Shell Script] 쉘 스크립트 trap 명령어를 이용한 시그널 제어 (0) | 2019.12.17 |
[Bash Shell Script] 백업 용량 변동 출력 쉘 스크립트 예제 (1) | 2019.12.12 |
[Bash Shell Script] DNS 도메인/호스트 추가 자동화 쉘 스크립트 예제 (0) | 2019.12.12 |
[Bash Shell Script] 쉘 스크립트 로딩 바 구현 (0) | 2019.12.12 |