로그에서 "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