파일에서 단어를 찾고 해당 값이 마지막 3번 나타나는지 확인하세요.

파일에서 단어를 찾고 해당 값이 마지막 3번 나타나는지 확인하세요.

로그에서 "percent"라는 단어를 검색하고 있습니다.

strings /var/lib/activemq/data/gc.log |grep percent | grep ten 

이것은 나에게 출력을 제공합니다

<mem type="tenure" free="2188996168" total="2617245696" percent="83" />

지난 사례를 확인하고 신고해야겠어요

CRITICAL is between 10 and 0
WARNING is between 20 and 10
OK status if the usage is over 20

지금은 그래strings /var/lib/activemq/data/gc.log |grep percent | grep ten |tail -5 | awk {'print $5'}

현재 출력은 숫자가 다양하다는 것을 알고 있습니다.

percent="24"
percent="24"
percent="24"
percent="23"
percent="23"

마지막 3개 값만 고려하여 OK, CRITICAL 또는 경고 상태를 반환하려면 어떻게 해야 합니까?

답변1

awk를 사용하여 이를 수행할 수 있습니다.

awk -F '"' '/percent/ && /ten/ {if( $(NF-1) > 20 ) {print "OK" } else if ( $(NF-1) < 20 ) {print "WARNING" } else if ( $(NF-1) < 10 ) { print "CRITICAL" }}' /var/lib/activemq/data/gc.log
  • -F '"'필드 구분 기호로 사용되는 큰따옴표
  • /percent/ && /ten/패턴이 있는 grep 라인.
  • ( $(NF-1) > 20 )두 번째 필드를 비교하고 필요한 문자열을 인쇄합니다.

답변2

다음 awk만 사용할 수 있습니다.

awk '
/ten/ && /percent/ {
        match($0,"percent=\"([^\"]*)",m)
        if (m[1] < 10) print "CRITICAL"
        else if (m[1] < 20) print "WARNING"
        else print "OK"
}' file  | tail -n3

그러나 XML 데이터의 경우 xml 파서를 사용하는 것이 더 좋습니다.

last_percents=$(
    xmlstarlet select -t  -m '//mem[@type="tenure"]' -v '@percent' -n < file \
    | tail -n3
)

for i in $last_percents; do
    if [ $i -lt 10 ]; then echo "CRITICAL"
    elif [ $i -lt 20 ]; then echo "WARNING"
    else echo "OK"
    fi
done

관련 정보