ログ・可観測性ツール

アクセスログ解析Nginx/Apacheの実データ形式に対応

NginxまたはApacheのアクセスログを貼り付け、フォーマットテンプレートを選ぶ(または自分のlog_format/LogFormat行を貼り付ける)と、「ログを解析」をクリックしてフィルタ可能な表が得られます。

アクセスログ解析

サンプル:
フォーマットテンプレート
フィルタ

アクセスログ

解析はブラウザ内でローカルに実行されます。ログのテキストがアップロードされることはありません。

解析結果

ログを解析すると、ここに行が表示されます。

アクセスログを貼り付けるかサンプルを読み込んでから、「ログを解析」をクリックしてください。

grepを1回叩けば数行の一致は拾えますが、どのクライアントIPが/api/loginを叩いているか、直近のログで5xxが何件出ているか、あるいはそもそも自分のサーバーの形式に合わない行が何行あるかを知りたくなった瞬間、それだけでは足りなくなります。アクセスログ解析と呼ぼうがログアナライザーと呼ぼうが、毎回正規表現を書き直すより、行の構造を先に理解してしまうほうが速いのです。

サーバーやサポートチケット、ロードバランサーのダンプから貼り付けたNginx/Apacheのアクセスログの塊があり、文章の壁ではなくIP・ステータスコード・パス・バイト数・refererといった実際のフィールドが欲しいときに使います。処理はすべてブラウザのタブ内で完結し、貼り付けた内容はどこにもアップロードされません。

なぜこのアクセスログ解析ツールを使うのか

いくつかの決め打ちプレースホルダーではなく、実際のサーバーログ形式に合わせて作られています。

実際のlog_format/LogFormat行をそのまま貼り付けられる

nginx.confのlog_formatディレクティブや、httpd.confのLogFormat行を、$upstream_response_timeや%{X-Forwarded-For}iのような独自フィールドも含めてそのままコピーするだけで、このアクセスログ解析ツールが即座に表の列へ変換します。新しいプレースホルダー構文を覚える必要も、数個のプリセットのどれが一番近いか推測する必要もありません。

生のnginxのlog_formatディレクティブが対応する表の列に変換される様子

不正な行は隠さず一覧表示

選択したフォーマットに一致しない行は、静かに捨てられたり、あいまいな警告だけで済まされたりしません。行番号と元のテキストとともに表示されるので、行が消えたのではないかと疑うのではなく、なぜ一致しなかったのかをその場で確認できます。

一致しなかったログの行が行番号と元のテキストとともに一覧表示されている様子

生のログ行から絞り込み可能な表を作るまで

解析、フィルタ、書き出しを3ステップで。

01

ログを貼り付けてフォーマットを選ぶ

NginxまたはApacheのアクセスログの生の行を貼り付けます。どのプリセットが合うか分からない場合は、まず組み込みのサンプルを読み込んでください。わざと1行だけ不正な形式が混ぜてあるので、不一致がどう報告されるか先に確認できます。

  • Nginx combinedとApache combinedは同じ形(IP、時刻、リクエスト、ステータス、バイト数、referer、ユーザーエージェント)なので、どちらを選んでも解析結果は同じです
  • 「カスタム」を選ぶとlog_format/LogFormatの原文がそのまま使え、自分で正規表現を書く必要はありません
02

「ログを解析」をクリック(またはCtrl/Cmd+Enter)

入力中に自動で解析は走りません。アクセスログはしばしば数千行になるため、キー入力のたびに全体を再マッチングするのは無駄が大きいからです。「ログを解析」を1回クリックするか、ショートカットキーを使えば、表が埋まります。

  • 後からフォーマットテンプレートを切り替えても自動では再解析されません。古い表は薄く表示されたまま残り、もう一度「ログを解析」をクリックするまで更新されません
03

フィルタして書き出す

ステータスコードとパスのフィルタは、すでに解析済みの行に対して即座に反映され、再度「ログを解析」をクリックする必要はありません。集計パネル(上位IP、上位パス、ステータスの内訳)もフィルタに合わせて更新されます。表示されている行はCSV、JSON、プレーンテキストとしてコピーまたはダウンロードできます。

  • ステータス/パスフィルタが変えるのは表示と書き出しの内容だけで、ステータス行に表示される解析済み行数には影響しません
解析ツールへジャンプ

この表が生のテキストにプラスして与えてくれるもの

実際のアクセスログのトラブルシューティングのためのフィールド抽出、フィルタ、集計。

4つの組み込みフォーマットプリセット

Nginx combined、Nginx common、Apache Common Log Format、Apache combinedで、追加設定なしにサーバーのデフォルト設定の大半をカバーします。

実際のlog_format/LogFormatディレクティブをカスタムテンプレートとして使える

nginx.confの任意の$変数や、httpd.confの任意の%ディレクティブ(%{Referer}iのような名前付きリクエスト/レスポンスヘッダーを含む)が、ディレクティブ内の前後のリテラルテキストと照合されたうえで表の列になります。

ステータスコードとパスによるフィルタ

ステータス範囲(2xx〜5xx)や正確なコード、パスに部分文字列を含む、または正規表現に一致するリクエストへ、ログを再解析せずに絞り込めます。

上位IP、上位パス、ステータスの内訳

集計パネルが現在フィルタされている行についてステータスコード別の件数を数え、リクエストが多いクライアントIPとパスを一覧表示します。急なアクセス増加や攻撃元を調べるときに真っ先に確認する項目です。

行番号付きの不正な行一覧

選んだフォーマットに一致しなかった行はすべて、1から始まる行番号と元のテキストとともに一覧表示されるので、数行の異常な行が件数からこっそり消えることはありません。

CSV・JSON・プレーンテキストでの書き出し

現在フィルタで表示されている行だけを、表と同じ列構成でエクスポートし、そのままスプレッドシートや別のツールに読み込めます。

何が一致とみなされ、何がそうでないか

不正な行やカスタムフォーマットの扱いなど、具体的な仕様と、現時点で対象外のものをまとめています。

行はテンプレートに完全一致するか、不正な行として扱われるかのどちらか
部分一致という概念はありません。このアクセスログ解析ツールでは、行が選んだテンプレートに先頭から末尾まで一致しない場合、その行は行番号とテキストとともに不正な行の一覧に入り、フィールドは一切表には追加されません。
リクエスト部分が壊れていてもメソッド/パスが空のまま一致扱いになる
行のリクエスト部分が「-」だったり「METHODパスPROTOCOL」の形になっていなかったりしても、その行は一致として扱われ表に表示されます。IPやステータス、バイト数など残りの部分は正しく解析できているため、メソッド・パス・プロトコルだけがその行では空欄になります。
カスタムテンプレートは対応済みの$変数と%ディレクティブのみを認識する
未対応のApacheの%1文字ディレクティブや、$も%も含まないテンプレートは、当て推量で処理されるのではなく、具体的なエラーとして拒否されます。
1回の貼り付けは30万文字・2万行まで
この上限は、ブラウザのタブ内での解析を高速かつ予測可能に保つためのものです。上限を超える場合は、ログをより小さいバッチに分割してください。
ステータス/パスフィルタは解析済み行数や不正な行数を変えない
フィルタが変えるのは、どの解析済み行を表示・書き出し・集計するかだけです。「N行を解析、M行が形式に一致しませんでした」というステータスは常に直近の完全な解析結果を反映しており、現在のフィルタ条件とは無関係です。

アクセスログ解析のよくある質問

NginxやApacheのアクセスログをオンラインで解析する前に、よく聞かれる質問をまとめました。

Nginxのアクセスログをオンラインで解析できるツールはありますか?

はい。上の欄にNginxのアクセスログを貼り付けて「ログを解析」をクリックすれば、その場で表が表示されます。アカウント登録もインストールもアップロードも不要な、無料で使えるアクセスログ解析ツールです。JavaScriptとして今開いているブラウザのタブ内だけで動作します。

Apacheのアクセスログを無料で解析できるツールはありますか?

使えます。フォーマットテンプレートでApache Common Log FormatまたはApache combinedを選べば、Apacheの標準的なアクセスログをそのまま解析できます。インストールや登録は不要で、完全に無料です。

サーバーのログをこうしたオンラインツールに貼り付けても安全ですか?

貼り付けた内容はどこにも送信されません。解析・フィルタ・書き出しはすべてJavaScriptでブラウザ内だけで完結し、サーバー側へのアップロードや保存、ログ記録は一切ありません。アクセスログには実際のクライアントIPやパスが含まれることが多いため、この点は重要です。

Common Log FormatとCombined形式の違いは何ですか?

ApacheのCommon Log Format(%h %l %u %t "%r" %>s %b)にはrefererとuser-agentのフィールドがありません。combined形式は末尾にこの2つを引用符付きで追加したものです。Nginxのデフォルトの名前付きフォーマット「combined」も、Apacheのcombined形式と同じ形をしています。

独自のlog_formatを使っているNginxのアクセスログはどう解析すればいいですか?

フォーマットテンプレートで「カスタム」を選び、nginx.confのlog_format行をそのまま貼り付けてください。例えば$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"のような行です。それぞれの$変数が、出現順にそのまま表の列になります。

解析したNginxのアクセスログをJSON形式で出力できますか?

できます。エクスポート形式でJSONを選べば、現在表示されている行がそのままJSON配列として書き出されます。CSVやプレーンテキストへの書き出しも同じ操作で選べます。

ステータスコードごとの件数はどうやって集計できますか?

解析した行に対してステータスコードとパスのフィルタが即座に反映され、集計パネルにステータスコード別の件数、上位のクライアントIP、上位のパスが表示されます。集計は現在のフィルタ条件を反映したもので、再解析は不要です。

このツールがうまく解析できない実際のログ行がありましたか?

今すぐアクセスログを解析しよう

NginxまたはApacheのアクセスログを貼り付ければ、数秒でフィルタ可能・書き出し可能な表が手に入ります。アップロードもアカウント登録も不要です。

どのルートが叩かれているか、なぜリクエストが失敗しているかを調べたくなったときのために、この無料のアクセスログ解析ツールをブックマークしておいてください。

解析はすべてブラウザ内でローカルに実行されます。