2016.02.29

Webサイトにトラブルが!?まずはサーバーの外から問題切り分けしよう

160229_mainte_mv

みなさん、こんにちは。
Startup.Tokyo Inc.の吉岡朗です。
この度は、Webサイト運営時で、簡単なサーバー障害の切り分け方法について、述べたいと思います。
前編の今回は、全体な説明と障害発生時のポイントを中心に説明し、後編はOSレベルのコマンド関連の説明を行います。

Ⅰ.はじめに

サーバーエンジニアの方を含めて、運用に関わる方で、いざサーバーに障害が発生や予兆を見つけたとき、どのようにしたらいいか悩みがつきものです。
たくさんのサーバーの障害を切り分ける方法論があるなかで、今回は、私が行っているLinuxのウェブサーバーで障害が発生したときの切り分けをお知らせ致します。

私とLinuxとの関わり始まりはLinuxOSを1995年にSlackWareでインストールし、日本語バージョンのJEを入れていました。当時Intel i486DX4やInterl PentiumのパソコンにDualブートをして楽しんでいたことを思い出します。その後一時期離れていましたが、今はLinuxCentOSをクラウドサービスで借りながら、私自身がWebサービスと監視業務を行っています。


Ⅱ.サーバーでの運用で障害の切り分け

一般的にサーバーの運用は、そのサービス提供のレイヤーによって、図1のように分かれていると言われます。

図1 一般的なサービス提供のレイヤー

通常の切り分けでは、下層のハードウェアから上層へと切り分けていますが、日々何らかの運用で絶えずサーバーを監視している場合に、突然サーバーが監視できなくなった場合には、下層から見ずに、予兆がないかを探すうえでは、上層から見るのが自然でわかりやすいです。ウェブサーバーの単体運用を例で言うと、図1は図2のようなサービスレイヤーになります。

図2 ウェブサーバーのレイヤー

体感的なところや見た目など、視覚的や直感が感じられそうなところや、気になる点から、サーバー障害を切り分けていくと、良いかもしれません。


Ⅲ.障害発生時の状況の整理

サーバーで、ハードウェアでの障害発生でのグラフは、一般的には、図3と言われています。(バスタブ曲線と呼ばれています)

160229_mainte_03
図3 サーバー障害の故障率(時間経過)

みなさんが運用しているサーバーが安定稼働している場合には、ハードウェア的な要素が少ないとみて、切り分けをしてみても良いと思います。(最終的にはハードウェアの下層まで調べるので回り道になるだけですが)

そこで、サーバー障害の切り分けとしては、以下のような状況があれば、障害の予兆や発生しているとみていいでしょう。

(1)ウェブサーバーのウェブページを開くのが遅い

異なる条件で少しずつ計測し記録してみましょう。

【例】

  • ・同じネットワークに接続する、別のデバイス(パソコンやスマホ)で同じウェブページを開いてみる。
  • ・別のネットワークに接続する、別のデバイス(パソコンやスマホ)で同じウェブページを開いてみる。
  • ・時間帯を別にして、同じウェブページを開いてみる。
  • ・ブラウザのデベロッパーズツールなどを使用して、読み込みスピードを確認してみる。

160229_mainte_04_1

160229_mainte_04_2

図4 GoogleCromeのデベロッパーズツール

<Google Chrome の場合>
[設定]→[ツール]→[デベロッパーツール]→[Network]の順にクリックしてからウェブサイトを再リロードで表示します。

(2)ウェブサーバーが、ステータス500、502、503、504を返す。

160229_mainte_04_3図5 ステータス500、502、503、504

頻繁に発生する場合には、直近にリリースした案件や変更した箇所をもとに調べてみましょう。

ステータス番号 名称 考えらえる原因 対処方法
500 Internal Server Error CGIスクリプト(PHP、Phyton、Rails)などでエラーが出た。 直近のリリースしたスクリプトなどでエラーが発生している可能性があります。
502 Bad Gateway ゲートウェイやProxyとして動作しているサーバー(例:Nginx)がリクエストを実行しようとしたら不正なレスポンスを受け取った。 ウェブサーバーのサーバープロセス(例:Apache)が異常終了した可能性があります。
503 Service Unavailable 事情によりアクセスできません。 ウェブサーバーに多数のアクセスが発生しており、ウェブページを開くことができない状態です。
504 Gateway Time-out サーバーからレスポンスを受信できなかった。 ウェブサーバーに過大な負荷がかかっており、決められた時間内に応答がなかったようです。

(3)ウェブサーバーの読み込み中が終わらない。

ブラウザなどでウェブサーバーの読み込みがずっと続く場合、または、ブラウザで開くとエラーが発生する場合には、複合的な障害が発生しているようです。まずはサーバーのログなどを確認してみましょう。

【参考】Chromeブラウザで、以下のようなエラーが出てきた場合には、ウェブサーバーの稼働が安定していない可能性が高いです。

番号 メッセージ
エラー2 net::ERR_FAILED
エラー101 net::ERR_CONNECTION_RESET
エラー102 net::ERR_CONNECTION_REFUSED
エラー104 net::ERR_CONNECTION_FAILED
エラー105 net::ERR_NAME_NOT_RESOLVED
エラー118 net:: ERR_CONNECTION_TIMED_OUT
エラー324 net::ERR_EMPTY_RESPONSE

160229_mainte_06

図6 Chromeブラウザでのエラー


Ⅳ.状況の切り分け

ウェブサーバーの障害切り分けは、上層から下層にかけて行います。

(1)コンテンツ(サービス)レイヤーでの切り分け

障害や予兆発生の直前に、コンテンツのリリースや、セキュリティアップデートなどを行っていませんか?
日々の作業を記録していることで、原因が簡単に見つかることが多いです。
【参考】WordPressなどのアップデート(バージョン4.2→4.3へなど)でも障害が発生することはよくあります。

(2)アプリケーションレイヤーでの切り分け

アプリケーションの最新リリースへの対応は、定期的に行う必要はありますが、最新をすぐに追うアップデートまでは必要ありません。アプリケーションのリリース直後の不具合などの情報を調査してみましょう。
「Apache」、「PHP」、「MySQL」、「Nginx」など各種のアプリケーションの情報は、インターネットで検索することで容易に得られます。

(3)ネットワークレイヤーでの切り分け

今日のネットワークは大変安定しているので、障害は発生することはありませんが、情報の掲示先などは把握しておき、必要に応じて閲覧情報収集はしておきましょう。

【例】
●サーバーのホスティング会社の障害情報

160229_mainte_08

図8 GMOクラウドhttps://support.gmocloud.com/info/

(4)OSレイヤーでの切り分け

後編(※近日公開)の「5.OSレイヤーでの切り分け」で説明します。

(5)ハードウェアレイヤーでの切り分け

クラウド・VPSで運用している場合には、ハードウェアでの障害はほぼないので、心配はありません。
オンプレミス(=情報システムを使用者自身が管理する設備内に導入、設置して運用)で運用している場合には、ハードウェアを導入した会社と相談しながらハードウェア上の障害切り分けを行ってください。

この記事を書いた人

吉岡朗

Startup.Tokyo Inc代表、HackathonPost.com主宰、WordPress-News.info編集長
一般企業のサラリーマンでシステムエンジニアをしながら、ハッカソン、スタートアップ系に興味を持ちはじめ、個人メディアとして、2014年3月より、【ハッカソン・アイデアソン・起業/ビジネスコンテストのイベント情報まとめサイト「HackathonPost」」を開設。
WordPressを中心に、クラウドサービスを借りながら、50サイト以上のWordPressを運用中。
色々改造して金にならないことばかりして遊ぶエンジニア。
サイト:http://startup.tokyo/
Facebookページ:http://www.facebook.com/HackathonPost

GMOクラウドアカデミーYouTubeチャンネルはこちらから

アカデミー用バナー

メルマガ会員募集中!

アカデミーの最新情報や会員限定のお得な情報をお届けします。

メルマガ登録はこちら