「CustomLogとLogFormatの設定が多くて、何をどう書けばいいのか整理できていない」
Webサーバーの運用では、アクセスログを正しく設定・読み解く能力が欠かせません。
この記事では、ApacheのCustomLogディレクティブとLogFormatディレクティブの設定方法、combined形式のログフォーマットの読み方を解説します。
ログローテーション連携、条件付きロギング、実サーバーのログ出力例まで、現場で必要な知識をまとめました。
【この記事でわかること】
・CustomLog でログファイルの保存先とフォーマット名を指定する
・LogFormat でフィールド構成(combined形式が業界標準)を定義する
・combined形式はIPアドレス・日時・リクエスト・ステータス・リファラー・UAの7フィールド
・本番環境ではパスを絶対パスで指定し、logrotate と組み合わせて管理する
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
Apacheのアクセスログとは(何が記録されるのか)
Apacheのアクセスログは、Webサーバーに到達したすべてのHTTPリクエストを記録するファイルです。デフォルトでは
/var/log/httpd/access_log(RHEL/CentOS系)または /var/log/apache2/access.log(Debian/Ubuntu系)に保存されています。・いつ(日時):リクエストが来た時刻(タイムゾーン付き)
・どこから(IPアドレス):クライアントのIPアドレス
・何を(リクエスト行):HTTPメソッド・URL・プロトコルバージョン
・結果(ステータスコード):200(成功)・404(未発見)・500(サーバーエラー)など
・転送量(バイト数):レスポンスのバイト数
・どこから来たか(リファラー):リンク元URL
・何で見ているか(ユーザーエージェント):ブラウザ・クローラーの識別情報
アクセスログを分析することで、不正アクセスの検知、サービス障害の調査、アクセス数の集計などが可能になります。
LogFormatディレクティブ(ログフォーマットの定義)
LogFormat は、ログに記録する項目とその順番を定義するディレクティブです。httpd.conf またはインクルードされた設定ファイルに記述します。1. LogFormatの基本構文
LogFormat "フォーマット文字列" フォーマット名
CustomLog で参照するエイリアスです。2. combined形式(業界標準)
Apache のデフォルト設定では「combined(コンバインド)」と「common(コモン)」の2種類が定義されています。# /etc/httpd/conf/httpd.conf(RHEL/CentOS系のデフォルト設定) LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common
Webサーバーの標準的なログ形式として広く使われており、ログ解析ツール(AWStats、GoAccess等)はcombined形式を前提としているものが多いです。
3. LogFormatで使う主なフォーマット文字列
| フォーマット文字 | 記録される内容 | 出力例 |
|---|---|---|
%h |
クライアントのIPアドレス(ホスト名) | 203.0.113.25 |
%l |
identd(RFC1413)によるクライアント識別子 | -(通常は使用しない) |
%u |
Basic認証のユーザー名 | -(認証なし)または john |
%t |
リクエストの受信日時(CLF形式) | [07/Apr/2026:10:30:00 +0900] |
%r |
リクエスト行(HTTPメソッド・URL・バージョン) | GET /index.html HTTP/1.1 |
%>s |
最終的なHTTPステータスコード | 200 |
%b |
レスポンスのバイト数(ヘッダ除く) | 4096 |
%{Referer}i |
リファラーURL(リンク元) | https://www.google.com/ |
%{User-Agent}i |
ユーザーエージェント(ブラウザ情報) | Mozilla/5.0 ... |
%D |
リクエスト処理時間(マイクロ秒) | 23456(23.456ミリ秒) |
%T |
リクエスト処理時間(秒) | 0 |
%v |
バーチャルホスト名(ServerName) | www.example.com |
CustomLogディレクティブ(ログファイルの指定)
CustomLog は、ログファイルの保存先と使用するフォーマット名を指定するディレクティブです。1. CustomLogの基本構文
CustomLog "ログファイルのパス" フォーマット名
2. combined形式でアクセスログを設定する
# /etc/httpd/conf/httpd.conf # combined形式でアクセスログを記録する CustomLog "/var/log/httpd/access_log" combined
ServerRoot からの相対パスとして解釈されます。3. 実サーバーのアクセスログ出力例(combined形式)
実際のLinuxサーバーで出力されるcombined形式のアクセスログは以下のようになります。[root@web01 ~]# tail -3 /var/log/httpd/access_log 203.0.113.xx - - [07/Apr/2026:10:28:43 +0900] "GET /index.html HTTP/1.1" 200 8421 "https://www.google.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36" 198.51.100.xx - - [07/Apr/2026:10:29:01 +0900] "GET /favicon.ico HTTP/1.1" 404 209 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)" 10.0.1.xx - admin [07/Apr/2026:10:29:35 +0900] "POST /wp-admin/admin-ajax.php HTTP/1.1" 200 143 "https://www.example.com/wp-admin/" "Mozilla/5.0 ..."
combined形式のログの読み方(フィールド解説)
combined形式の1行を分解して説明します。203.0.113.xx - - [07/Apr/2026:10:28:43 +0900] "GET /index.html HTTP/1.1" 200 8421 "https://www.google.com/" "Mozilla/5.0 ..." フィールド1: 203.0.113.xx → クライアントIP(%h) フィールド2: - → identd(%l)通常は "-" フィールド3: - → 認証ユーザー(%u)認証なしは "-" フィールド4: [07/Apr/2026:10:28:43 +0900] → 日時(%t) フィールド5: "GET /index.html HTTP/1.1" → リクエスト行(%r) フィールド6: 200 → ステータスコード(%>s) フィールド7: 8421 → レスポンスバイト数(%b) フィールド8: "https://www.google.com/" → リファラー(%{Referer}i) フィールド9: "Mozilla/5.0 ..." → ユーザーエージェント(%{User-Agent}i)
主なステータスコードの意味
・200:リクエスト成功(正常応答)・301 / 302:リダイレクト(恒久 / 一時)
・304:未変更(キャッシュを利用)
・400:不正なリクエスト(Bad Request)
・403:アクセス禁止(Forbidden)
・404:ページが見つからない(Not Found)
・500:サーバー内部エラー(Internal Server Error)
・503:サービス利用不可(Service Unavailable)
応用・実務Tips
1. バーチャルホストごとにログファイルを分ける
複数のバーチャルホストを運用している場合、VirtualHost ブロック内に CustomLog を設定することで、ホストごとにログファイルを分けられます。# /etc/httpd/conf.d/vhost.conf <VirtualHost *:80> ServerName www.example.com DocumentRoot /var/www/example # このバーチャルホスト専用のアクセスログ CustomLog "/var/log/httpd/example_access_log" combined ErrorLog "/var/log/httpd/example_error_log" </VirtualHost>
2. 処理時間を記録するカスタムフォーマット
レスポンスが遅いページを特定するには、処理時間(%D)をログに追加します。# 処理時間(マイクロ秒)を末尾に追加したカスタムフォーマット LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D" combined_time CustomLog "/var/log/httpd/access_log" combined_time
%D の値が 1000000(1秒 = 100万マイクロ秒)を超えているリクエストは、パフォーマンスに問題がある可能性があります。3. 静的ファイルのログを除外する(条件付きロギング)
画像・CSS・JS などの静的ファイルへのアクセスをログから除外すると、ログファイルの肥大化を防げます。# 環境変数を使った条件付きロギング # 拡張子が .jpg .gif .png .css .js のリクエストはログに記録しない SetEnvIf Request_URI "\.(jpg|gif|png|css|js)$" nolog CustomLog "/var/log/httpd/access_log" combined env=!nolog
4. logrotateとの連携
アクセスログはデフォルトで/etc/logrotate.d/httpd に設定されており、定期的にローテーションが行われます。# /etc/logrotate.d/httpd(デフォルト設定) /var/log/httpd/*log { missingok notifempty sharedscripts delaycompress postrotate /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true endscript }
postrotate で httpd reload を実行しているのは、ローテーション後の新しいログファイルへの書き込みを切り替えるためです。トラブルシュート・エラー対処
1. アクセスログにリクエストが記録されない
ログファイルには書き込み権限が必要です。Apache の実行ユーザー(通常はapache または www-data)がログファイルへの書き込み権限を持っているか確認してください。# ログディレクトリの権限を確認する $ ls -la /var/log/httpd/ drwx--x--- 2 root apache 60 Apr 7 09:00 . -rw-r--r-- 1 apache apache 0 Apr 7 09:00 access_log # Apacheの実行ユーザーを確認する $ grep "^User " /etc/httpd/conf/httpd.conf User apache
2. ログファイルのパスが正しく認識されない
CustomLog の設定変更後は Apachectl による構文チェックと再起動が必要です。# 構文チェック $ sudo apachectl configtest Syntax OK # 設定の反映(サービス再起動) $ sudo systemctl restart httpd # ログに書き込みが始まったか確認する $ sudo tail -f /var/log/httpd/access_log
3. ログが大きくなりすぎてディスクが満杯になった
ログファイルの容量が膨大になった場合は、以下の手順で対処します。# ログファイルのサイズを確認する $ du -sh /var/log/httpd/* 2.3G /var/log/httpd/access_log 154M /var/log/httpd/error_log # 手動でlogrotateを実行してローテーションを強制する $ sudo logrotate -f /etc/logrotate.d/httpd
logrotate の設定で保持世代数やファイルサイズ上限を見直してください。本記事のまとめ(CustomLog / LogFormat 早見表)
| やりたいこと | 設定例 |
|---|---|
| combined形式でアクセスログを設定する | CustomLog "/var/log/httpd/access_log" combined |
| combined形式のフォーマットを定義する | LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined |
| バーチャルホストごとにログを分ける | VirtualHostブロック内にCustomLogを設定 |
| 処理時間をログに記録する | %D(マイクロ秒)をフォーマットに追加 |
| 静的ファイルのログを除外する | SetEnvIf+env=!nologで条件付きロギング |
| ログを定期的に管理する | /etc/logrotate.d/httpd でlogrotate連携 |
| アクセスログの最新行を確認する | sudo tail -f /var/log/httpd/access_log |
| 設定変更後に構文チェックする | sudo apachectl configtest |
Apacheの設定で詰まったことはありませんか?
アクセスログの設定に限らず、Linuxサーバー構築では「設定した通りに動かない」「エラーの意味がわからない」といった壁に何度もぶつかります。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、「Linuxサーバー構築入門マニュアル(図解60P)」を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:接続中のプロセスが終了するのを待ってApacheを停止する
- 前のページへ:proFTPDでアクセス制限設定を行う
- この記事の属するカテゴリ:Apache・Linuxtips・Webサーバー管理・サーバー管理へ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます