サーバー監視ツールを作ろう – 6日目「LoadAverage検知」

2019年5月22日

テクノロジー プログラミング 特集

サーバー監視業務は、24-365業務とも言われており、24時間365日、休まず行なわなければいけません。 実際に寝ないで監視するというわけではなく、どんなタイミングでも、障害発生のタイミングですぐに対処できる状態にしなければいけません。 会社運営でやっているとすると、フルタイム交代制でシフトを組む必要もあるし、休日や夜間業務などの対応をしなければいけません。 なので少人数で行うというのはかなり無理がでるのですが、SLA契約をしていない運用の場合は、そこまで神経質にならなくてもいいという場合もあるので、過剰にサーバー障害に反応しなければいけないかどうかは、提供形態によってまちまちなんですね。 しかし、エンジニアとしては、障害発生時にいち早く検知できて、その障害を一刻も早く解消して復旧を行いたいはずです。

システム障害の法則

銀行や、決済システムなど、随時ダウンさせてはいけないシステムがよくダウンしているというニュースを見かけますが、ほとんどの場合、原因はほぼ1つだけでしょう。 サーバー機器の障害?ネットワーク回線によるトラブル?外部からの不正侵入による改竄??? いやいや、殆どの場合が、システムメンテナンスで発生しているのですよ。 ようするに、プログラムやサーバー設定を少しでも変更した時に障害が発生しているのがほとんどです。 これは、ステージング環境を設けていても、本番でしか発生しない不具合が発動したり、本番データでの検証ができておらず、データ反映した直後に障害につながったりするケースですね。 事前に察知できてしかるべきなのですが、システムは生き物と同じであると考えてもよく、ほんの少しの誤差でうまく動作しなくなるというのは、日常茶飯事でしょう。 開発クオリティで考えると、テスト環境、ステージング環境、本番環境などを、どれだけ同じ構成にできるかどうかという品質も、障害を起こしにくい環境構築というクオリティであると考えられます。

LAはロードアベレージ

サーバー監視で重要な要素として「LoadAverage」(ロードアベレージ)というのがあります。 CPUの順番待ちがどのくらい発生しているかを数値化した値で、システム事態の処理速度の兼ね合いで、値がCPU数を上回ると「アウト」という検知を行うのが一般的ですが、1CPUサーバーで50とか100とかの値を出すケースもこれまで観た経験はあります。 もちろん、システムはうんともすんとも動かない状態で、どんどんタスクが溜まっていっている状態なのですが、ネットワークが遅いというケースもまれにありますが、だいたいが、システム処理速度に無駄が多く有る場合と、ユーザーアクセスが想定以上の莫大な頻度で発生した場合に起こります。 サーバー監視をしているとLAの値が増えてきたら要注意というアラートが、運用において非常に役に立つケースも多いという事です。 意外と知らないエンジニアも多いのですが、このポイントを抑えておくと、比較的サーバー運用のトラブルを軽減させることができる要因のひとつですね。

LA検知のやりかた

LA情報は、"top"コマンドや"w"コマンドでも得られますが、今回は"uptime"コマンドで取得します。 $ uptime 07:54:07 up 5 days, 3:51, 0 users, load average: 0.00, 0.00, 0.00 何もオプションを付けずにuptimeコマンドを実行すると、load average値を取得することが簡単にできます。 javascriptや、phpなどで、正規表現を使って、1分、5分、15分の値を取得しましょう。 ちなみに、PHPでの正規表現は下記のようにすると、取得できますよ。 $ptn = "load average: (\d+?\.\d+?), (\d+?\.\d+?), (\d+?\.\d+?)$"; preg_match($ptn , $la , $match); echo $match[1] // 1分 echo $match[2] // 5分 echo $match[3] // 15分 1分の値が跳ね上がった時に、アラートメールを送るようにするだけで、サーバー負荷の上昇検知ができますよ。 ちなみに、"load average"という言葉ですが、loadには、「負荷」という意味もあるようですね。 負荷平均値という事なんですね。知らんかった・・・

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。