로그 파일에서 숫자 데이터를 분석하여 특정 조건을 만족하는지 확인하는 작업을 수행
#!/bin/bash
source /home/shell/env.sh
#MY_HOME="/home/shell"
#traffic=3
pattern="log_increase*"
LOG_FILES=($MY_HOME_LOG/$pattern)
- pattern 변수에 log_increase* 패턴을 설정하고, 해당 패턴에 맞는 로그 파일들을 LOG_FILES 배열에 저장
# echo $LOG_FILES
result=0
for LOG_FILE in "${LOG_FILES[@]}"
do
# 마지막 GET_NUM 줄 가져오기
GET_LINES=$(tail -n $GET_NUM $LOG_FILE)
GET_TWO_LINES=$(tail -n 2 $LOG_FILE)
# 가져온 라인 수 출력
LINE_NUM=$(echo "$GET_LINES" | wc -l )
# 가져온 라인 중 최대값 출력
MAX_NUM=$(tail -n $GET_NUM $LOG_FILE | awk 'BEGIN{max=0} {if ($1>max) max=$1} END{print max}')
GET_LAST_NUM=$(echo "$GET_LINES" | tail -n 1 | grep -o '[0-9]\+')
GET_FIRST_NUM=$(echo "$GET_LINES" | head -n 1 | grep -o '[0-9]\+')
GET_SECOND_LAST_NUM=$(echo "$GET_TWO_LINES" | head -n 1 | grep -o '[0-9]\+')
- 마지막 줄, 첫 번째 줄, 두 번째 마지막 줄에서 숫자만 추출
if [ "$GET_LAST_NUM" -lt " $GET_FIRST_NUM" ]; then
GET_AVG_NUM=$( (MAX_NUM-GET_FIRST_NUM_+GET_LAST_NUM) )
else
GET_AVG_NUM$( (GET_LAST_NUM-GET_FIRST_NUM) )
fi
- 마지막 숫자가 첫 번째 숫자보다 작으면 순환형 로그로 간주하고 평균 증가 값을 계산
- 그렇지 않으면 단순히 증가 값을 계산
GET_INCREASE=$( ( $GET_LAST_NUM-$GET_SECOND_LAST_NUM) )
# 로그의 마지막 증가 크기가 평균적 증가 크기의 traffic 배수를 초과하면 알림
AVG_NUM_X =$( (GET_AVG_NUM * $traffic) )
# 최근 입력된 숫자가 평균값의 3배수 이상이면 1출력, 아니면 0 출력
if ( (GET_INCREASE > AVG_NUM_X) ); then
result=1
fi
done
echo $result
#!/bin/bash
source /home/shell/env.sh
pattern="log_increase*"
LOG_FILES=($MY_HOME_LOG/$pattern)
result=0
for LOG_FILE in "${LOG_FILES[@]}"
do
# 마지막 GET_NUM 줄 가져오기
GET_LINES=$(tail -n $GET_NUM $LOG_FILE)
GET_TWO_LINES=$(tail -n 2 $LOG_FILE)
# 가져온 라인 수 출력
LINE_NUM=$(echo "$GET_LINES" | wc -l)
# 가져온 라인 중 최대값 출력
MAX_NUM=$(echo "$GET_LINES" | awk 'BEGIN{max=0} {if ($1>max) max=$1} END{print max}')
GET_LAST_NUM=$(echo "$GET_LINES" | tail -n 1 | grep -o '[0-9]\+')
GET_FIRST_NUM=$(echo "$GET_LINES" | head -n 1 | grep -o '[0-9]\+')
GET_SECOND_LAST_NUM=$(echo "$GET_TWO_LINES" | head -n 1 | grep -o '[0-9]\+')
if [ "$GET_LAST_NUM" -lt "$GET_FIRST_NUM" ]; then
GET_AVG_NUM=$((MAX_NUM - GET_FIRST_NUM + GET_LAST_NUM))
else
GET_AVG_NUM=$((GET_LAST_NUM - GET_FIRST_NUM))
fi
GET_INCREASE=$((GET_LAST_NUM - GET_SECOND_LAST_NUM))
# 로그의 마지막 증가 크기가 평균적 증가 크기의 traffic 배수를 초과하면 알림
AVG_NUM_X=$((GET_AVG_NUM * traffic))
# 최근 입력된 숫자가 평균값의 3배수 이상이면 1출력, 아니면 0 출력
if ((GET_INCREASE > AVG_NUM_X)); then
result=1
fi
done
echo $result
'리눅스' 카테고리의 다른 글
모니터링 쉘 스크립트 만들기(13) (0) | 2024.05.29 |
---|---|
모니터링 쉘 스크립트 만들기(12) (0) | 2024.05.29 |
모니터링 쉘 스크립트 만들기(10) (0) | 2024.05.29 |
모니터링 쉘 스크립트 만들기(9) (0) | 2024.05.29 |
모니터링 쉘 스크립트 만들기(8) (0) | 2024.05.29 |