2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

LoadAverageを定期的に外部へ記録する方法

Last updated at Posted at 2015-10-02

はじめに

サーバーを管理していると重く感じることがあり、その時SSHでLAを確認したりしています。
しかし、いちいち入るのが面倒なので、鯖落ちも考えて外部に記録するようにしてみました。
なるべくシンプルで導入の手間がかからないようにするために、新たに何かしらの監視ツールを導入をすることはしません。

用意するもの

  • shellscript
  • cronの実行権限
  • phpを実行できる外部サーバー

shellscript

簡単に言うと、LAとunixtimeをGETで渡すだけである。

la_log.sh
# /bin/sh
## LAを/proc/loadavgから直接取る。なお5分間隔で記録するため5分毎のLA値を得る
LA5=`cat /proc/loadavg | awk '{print $2}'`
## LAを記録したUnixTimeを得る
UT=`date +%s`
## 記録する外部サーバーを記述する
LOG={yourExternalServer}/._la.php
## 外部サーバーにGETで値を渡す
wget -O - "${LOG}?la=${LA5}&ut=${UT}" 1>/dev/null 2>&1
exit

cron

今回は5分毎のLA値を取得しているため、記録も5分毎に実行する
*/5 * * * * {yourSavedPath}/la_log.sh

外部サーバー

これはPHPを実行して保存するために用意する。
同じネットワークでもいいし、レン鯖でもいい。

._la.php
<?php
  // タイムゾーンを東京に設定。
  date_default_timezone_set('Asia/Tokyo');
  // UnixTimeが送られて来たらそれを使う。ないならこっちの時間を使う。
  $_UT = ($_GET[ut]) ? $_GET[ut] : time();
  if (!$_GET[la]) exit(1); // そもそもLAがないなら終了
  // LOGのファイル名とフォーマットを決める。なおUnixTime依存
  $LOGFILE = './_LA/'.date("ymd",$_UT).'.log'; // あらかじめ./_LA/を作成しておく
  $LOGFORMAT = date("H:i:s",$_UT).'<>'.$_GET[la]; // HH:MM:SS<>LAのような書式である
  if ($LOGFILE, $LOGFORMAT."\n", FILE_APPEND) ) // ログは追記モードで追加する
    echo $LOGFORMAT; // ログの書き込みが成功すれば書き込みを返す
  else
    echo -1; // 失敗すれば-1を返す。
?>

運用方法

これらを正しく設置すれば、外部に5分毎のLAが記録される。
間隔が短いのであれば/proc/loadavから15分ごとの値を取って記録してもいい。
また戻り値をローカルに保存しておいてもいい。
外部では記録された値を加工して見やすくしたり、統計を取ったりできる。
鯖落ちしていたりすると記録されないので、直前の記録からどのように落ちたか簡易的に想像できたりするかな。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?