キャリテク!マガジン
- TOP
- キャリテク!マガジン
- 障害対応に強くなろう(5)WEBサーバーのログ調査もこわくない
障害対応に強くなろう(5)WEBサーバーのログ調査もこわくない
こんにちは。株式会社パイプラインの濱田です。
前回はgrepコマンドによるログ調査の基本を取り上げましたが、今回はより実践的にWEBサーバーのログ調査にフォーカスしてみたいと思います。
WEBサーバーのログの種類
ざっくりとした説明にはなってしまいますが、WEBサーバーには
- アクセスログ
- エラーログ
の2種類があると思っていただければ、というところなのですが、アクセスログは原則としてサーバーが処理を行ったすべてのログを記録するのに対して、エラーログはWEBサーバーがリクエストを処理した結果発生したエラーを記録します。また、WEBサーバーを再起動した際もエラーログに書き込まれますので、障害発生時にはまずエラーログを確認するクセをつけましょう。
ここで1点注意が必要なのは、どちらのログも、あくまで「WEBサーバーがリクエストを受け取った」結果がログに書き込まれるので、ブラウザからWEBサーバーまでの間のネットワーク障害や、WEBサーバー自身がファイアウォールでhttp https接続を許可していないと、WEBサーバーがリクエストを受け取れないので、そもそもログに書き込まれません。
WEBサーバーの一般的なログフォーマット
WEBサーバーソフトウェアとして高いシェアをもつApacheとNginxでは、それぞれの設定ファイルでログフォーマットを設定できるようになっています。ログファイルはスペースなどでいくつかのフィールドに区切られ、アクセスログの場合は
- クライアントのIPアドレス
- リクエストURI
- ステータスコード
- コンテンツの容量 (バイト数)
- リファラ (参照元サイト)
- ユーザーエージェント (OSやブラウザの種類やバージョンなど)
が記録されます。また、エラーログにおいてはエラーをおこしたファイルを取り扱っていたプロセスIDやログメッセージなど、障害原因を調査するために有用なログが記録されます。詳細は以下リンクを参考にしてみてください。
- Apache 2.4 Log Files
- Apache 2.4 ErrorLog Directive
- Apache 2.4 ErrorLogFormat Directive
- Nginx Configuring Logging
例えば、あるユーザーから /path/to/index.php が表示されない、表示がおかしいといった障害報告があった場合、 アクセスログやエラーログから /path/to/index.php の文字列を検索してみます。障害報告の該当時刻付近に/path/to/index.php のログが記録されている場合、ステータスコード、コンテンツの容量がどう記録されているかを調べます。
そもそも /path/to/index.php ファイルが無ければ 404 Not Foundエラーが返され、PHPファイルの文法がおかしい、などのエラーは500 Internal Server Errorを、また、WEBサーバーの接続上限数を超えるなど、サービス利用不可とWEBサーバーが判断した場合は503 Service Unavailableを返します。このように、3桁の数字とともにレスポンスの意味を表現するコードをステータスコードといい、HTTPのステータスコードはRFC 7231などで定義されています。次回はHTTP ステータスコードについて取り上げます。
まずはエンジニアデビューしたい、という方は、3ヶ月間学びながらお給料が貰える AltX キャリテク!の門を叩いてみてはいかがでしょう。 https://www.kcct.co.jp/careetec/