Webサーバー運用において、ログ管理はトラブルシューティングやアクセス解析に欠かせない重要な要素です。
例えば、Apacheではデフォルトでアクセスログとエラーログが出力される仕組みになっています。
本ハンズオンでは、Apacheのログ出力先やフォーマットを理解し、実際にログを確認・設定する方法を学びます。
学習フェーズ
Apacheのログの種類
Apacheでは主に以下の2種類のログが出力されます。
- アクセスログ(access_log)
クライアントからのリクエスト内容(IPアドレス、リクエスト先、ステータスコードなど)が記録されます。 - エラーログ(error_log)
サーバー側で発生したエラー情報が記録されます。設定ミスやファイル未検出などの原因調査に役立ちます。
ログファイルの場所
デフォルトでは以下に保存されています。
- アクセスログ:
/var/log/httpd/access_log
- エラーログ :
/var/log/httpd/error_log
設定ファイルでのログ管理
Apacheのログ設定は、/etc/httpd/conf/httpd.conf
で行います。以下のディレクティブが関連します。
CustomLog
:アクセスログの出力先とフォーマットを指定ErrorLog
:エラーログの出力先を指定
例:
CustomLog "logs/access_log" combined
ErrorLog "logs/error_log"
※ 相対パスの場合、/etc/httpd/logs
が基準となり、実際には /var/log/httpd/
に出力されます。
ログローテーション
Apacheのログは放置すると肥大化します。Amazon Linux 2023では、logrotate
によって自動的にローテーション(定期的な分割・圧縮)が行われる設定になっています。
実践フェーズ
1. ログの確認
以下のコマンドでリアルタイムにアクセスログを確認します。
sudo tail -f /var/log/httpd/access_log
別のターミナルやブラウザでEC2のパブリックIPにアクセスすると、ログにリクエストが記録されることが確認できます。
具体的には以下のようなログが出力されるはずです。
192.0.2.1 - - [22/Apr/2025:12:34:56 +0900] "GET /index.html HTTP/1.1" 200 512 "http://example.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36"
不正アクセスや不審なユーザーの特定時にログを調査する場合があるため、どのような記載があるかも調べておきましょう。
2. エラーログの確認
意図的に存在しないページへアクセスし、エラーログが記録されるか確認します。
sudo tail -f /var/log/httpd/error_log
例:http://<EC2のパブリックIP>/notfound.html
にアクセス
3. ログ出力先の変更(任意)
ログの保存先を変更したい場合は、httpd.conf
を編集します。
sudo vi /etc/httpd/conf/httpd.conf
以下のように編集例を記載します。(combinedなど、不明点があれば別途調べてみましょう。)
ErrorLog "/var/log/httpd/custom_error.log"
CustomLog "/var/log/httpd/custom_access.log" combined
編集後は設定を反映させます。
sudo systemctl reload httpd
4. ログローテーション設定の確認
logrotate
の設定ファイルを確認します。
cat /etc/logrotate.d/httpd
ここでローテーションの周期や保存期間を調整できます。
+α
設定値を確認し、以下のようなログローテーションを組んでみましょう。
- 毎週ローテーション、7世代保持、圧縮有効化