ログで「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番目のフィールドを比較し、必要な文字列を印刷します。
答え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