[Server] サーバー管理ツールを作る #2「CPU負荷値の取得」

datacenter-286386_1280
LINEで送る
Share on GREE
Share on LinkedIn

前回、複数サーバーに対してのコマンド送信、返り値の取得ができたので、それを利用して、対象サーバーのCPU負荷値を取得してみたいと思います。

やりたい事

topコマンドを叩いた時に表示されているCPUの負荷割合(%)の値を取得したい。
今回は2つのソースコードを記述しましたが、処理速度が早い(対象サーバーの負荷値が少ない)方を採用する事にしました。

ソースコード#1

health-cpu.sh

解説

1,topコマンドを-bオプションを付けることで、リアルタイム表示で戻りが無くなる状態を回避
2、CPUの書かれている行のみをgrepで抽出
3、行をawkでid(アイドル時)を取得
4、100からその値を引くと、現在の使用している割合値が取得できる

ソースコード#2

health-cpu.sh

解説

1,vmstatでcpuとla値を取得
2、メニュー部分(2行目)で「id」の文字を取得してカラム番号を取得
3、データ部分(3行目)でカラム番号の値を取得
4、100からその値を引くと、現在の使用している割合値が取得できる

使い方

1、「servers.list」ファイルに対象サーバーを改行区切りでいくつでも保存する。

2、以下のコマンドを叩くだけ(任意位置から叩いてもOK)

※上記の値は全て「%」です。

2つのソースを比較

明らかに違ったのは速度ですね。
topコマンド自体が、情報量が多いため、1回のアクセスが目に見えて遅く感じました。
したがって#2の「vmstat」版を使うことに決定。

ちなみに、6サーバーの値取得でかかった時間はtimeコマンドでベンチしてみました。

#1:0m4.625s
#2:0m1.489s

3倍近くも性能差が出てますね。

これをcronで1分速毎に行うとすれば、240台ぐらい対象にできそうですね。
他の値取得もあるので、やはり100台で5分足ぐらいが現実的そうですね。

Leave a Reply

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*