로그 파일에서 숫자 데이터를 분석하여 특정 조건을 만족하는지 확인하는 작업을 수행

 


#!/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

+ Recent posts