前回、サーバーの負荷調査について記事を書いたので、それに関するスクリプトを。
仕様
日付とメモリ使用率、スワップ領域使用率を抽出し、ログに吐く
ソース
1 2 3 4 5 6 7 |
#!/bin/bash TARGET_DATE=`date +%Y/%m/%d-%H:%M:%S` MEM_USED=`free | grep Mem | awk '{ print ($3-$6-$7)/$2*100}' | sed -e "s/\([0-9]*\)\.\([0-9]\{2\}\)[0-9]*$/\1.\2/g" ` SWAP_USED=`free | grep Swap | awk '{ print $3/$2*100 }' | sed -e "s/\([0-9]*\)\.\([0-9]\{2\}\)[0-9]*$/\1.\2/g" ` echo "${TARGET_DATE} ${MEM_USED}% ${SWAP_USED}%" |
参考リンク
【システム運用改善】Linuxサーバのメモリ監視を簡単に自動化しよう!
出力結果 2016/03/30-20:08:38 77.25% 2.30%
解説
freeコマンド
前回、topコマンドについて書きましたが、メモリ使用率だけを正確に見たい場合、freeコマンドが便利です。
サーバー監視のコマンドは5~6種類あるようなので用途に応じて使い分けましょう。
ものすごく大まかにいうとused/totalが近似的な値になりますが、正確には違います。
(メモリの場合cachedやbufferが関わってきますので数式で若干の調整が必要。)
各コマンドの特性とfreeコマンドの原理などについて
awk
スペースやタブ区切りのデータを扱うときに、大変便利なコマンドです。
数値が並んでいたときに任意の行だけを取り出すことができます。
1 2 |
echo 76 89 87 | awk '{print $2}'; #89 |
上記は非常に簡単な例ですが、特定の数字だけを取り出して加減乗除するときなどに便利です。
sed
置換の時に便利なコマンドです。
今回のソースでは小数点第2位以下を切り捨てるために使っていますが通常は一般的な文字の置換に使われることがおおいかと思います。
一般的な正規表現と大体同じなんですが、メンドクサイところとしては(や{などの時にも\(バックスラッシュ)が必要になります。そのためにソースコードがやや冗長になっています。
sedの置換ルール
文字列から特定の文字を抽出する – Linux シェルスクリプト プログラミング
シェルスクリプトの日付処理に関して
[…] […]