Server logs & traffic analysis

GoAccess

ターミナルで動き、単一ファイルで完結する HTML ダッシュボードも生成するリアルタイム Web ログ解析ツール

allinurl/goaccessC20,890 as of 2026-09-02
By Jake Luo · Published 2026年9月2日

GoAccess は C で書かれた MIT ライセンスのオープンソースなログ解析ツールで、Web サーバーのアクセスログを読み、サーバーが実際に返したものを見せてくれます。表示先はターミナルの対話的ダッシュボードか、そのままメールに添付できる単一ファイル完結の HTML レポートです。Apache、Nginx、Caddy、CloudFront、S3、Elastic Load Balancing、Traefik、IIS のログを標準で解釈し、独自フォーマットも記述すれば読めます。実行に必要な依存は ncurses だけです。2026年9月2日時点の GitHub スター数は 20,890。作り手にとっては、狭い問いにきわめてよく答えます。何が要求され、サーバーが何を返し、どれだけ時間がかかったか。JavaScript を一度も実行しなかったリクエストも含めて。

GoAccess とは実際のところ何か

GoAccess github.com/allinurl/goaccess は2013年から保守されており、C で書かれています。それが最初に体感できる形で現れます。必須の依存は ncurses ひとつだけで、起動は一瞬です。ログを指定して `goaccess access.log` と打てば、ターミナルに対話的なダッシュボードが出ます。`-o report.html --real-time-html` を足すと、外部ファイル依存のない単一の HTML ファイルを書き出し、内蔵の WebSocket サーバー経由でそこへライブ更新を送り続けます。ポートは既定で 7890 です。

  • すでに手元にあるログ形式をそのまま読む Apache の common と combined、Nginx、Caddy の JSON 構造化形式、Traefik、Squid、IIS の W3C、Amazon CloudFront、S3、Elastic Load Balancing、Google Cloud Storage は定義済みです。それ以外はカスタムフォーマット文字列で記述します。
  • ログのある場所でも、自分のいる場所でも動く ファイル、`zcat --force` で流し込んだローテート済み・圧縮済みのファイル群、あるいは標準入力を解析します。つまりサーバーには何もインストールせず、手元のノート PC から `ssh -n you@server 'tail -f /var/log/nginx/access.log' | goaccess -` と実行できます。
  • データベースなしで履歴を残す `--persist` でデータセットをディスクに書き出し、`--restore` で読み戻して新しい分を追記します。ファイルごとの inode と最後に解析した行のタイムスタンプを記録するため、再実行しても二重計上になりません。`--keep-last=5` は5日より古い分を破棄して容量を再利用します。
  • 運用者の頭の中と同じ切り口でトラフィックをまとめる リクエスト、404、静的ファイル、帯域、応答時間、リファラー、バーチャルホストのパネルに加え、MaxMind のデータベースを入れれば地域と ASN のパネルも出ます。ASN パネルは、うるさい単一ネットワークの存在を一目で明らかにしてくれます。
  • いまも活発に開発されている 最新タグは2026年7月15日の v1.11 で、2026年8月末のコミットはごく普通のプロダクト作業です。AI クローラー専用カテゴリの追加、Fediverse のトラフィックをクローラーから分離、ASN 単位のトラフィック除外、旧キーフレーズパネルに代わる UTM キャンペーン集計、そして毎秒リクエスト数のライブ表示。

ライセンスは素直な MIT で、バッジ任せにせずリポジトリの COPYING ファイルに明記されています。オープンな issue は449件ありますが、あらゆるログ形式を解釈しようとする13年もののCプロジェクトにとって、この数字は放置というより利用されている証拠に近いものです。大半はログ・日付・時刻フォーマットに関する質問で、README はすでに解決済みの数百件へ直接リンクしています。

運用にかかるコスト

本当のコストは CPU ではなく、アクセス権です。まずアクセスログを読めることが前提で、これだけでログを一度も見られない多くのマネージドプラットフォームは対象外になります。次に自分のログ形式を把握していること。実際に時間が溶けるのはここで、ログの日付形式と GoAccess を動かしているロケールの不一致は、初回実行で何も表示されない最も多い原因です。そして永続化を最初に決めておくこと。`--persist` を付けなければレポートは渡したファイルと同じ古さしか持てず、ログローテーションは他人が決めたスケジュールであなたの履歴を消していきます。

その代わりに得られるのは、アカウントもタグもサンプリングも月額もないツールで、リクエストが起きてから数秒で答えます。これはプロダクトアナリティクスではまったくありません。ユーザーが誰か、何をクリックしたか、翌週戻ってきたかは一切わかりません。その一段下のレイヤーであり、両者が答える問いは十分に違うので、片方を使うチームは結局もう片方も使うことになります。

ログが真実を語らなくなる場所

ログ解析ツールの正確さは、ログの正確さそのものです。そしてログが自分のトラフィックを説明しなくなる最短の方法は、前段に CDN を置くことです。私たちは2026年8月に agentceres.com でそれをやり、オリジン側への影響は微妙どころではありませんでした。オリジンプロセスが抱えていたページキャッシュは 1.33 GB から 0.31 GB へ落ちました。ほとんどのリクエストが単に届かなくなったからです。エッジで返されたそれらのヒットは一つ残らず実在の訪問であり、オリジンのログには決して現れません。

ログの中身を静かに変えてしまう4つのもの
  • 前段の CDN。 キャッシュされた応答はエッジで返るので、オリジンのログにはキャッシュミスだけが残ります。全体像が要るなら CDN 自身のログを読むか、自分が測っているのはキャッシュミスだと理解して、そう明言してください。
  • ログローテーション。 多くのシステムの既定は1〜2週間分の保持です。永続化しなかったものは消え、しかもエラーひとつ出さずに消えます。
  • プロキシやロードバランサー。 forwarded-for ヘッダーを設定していないと、全リクエストが単一の内部アドレスから来たように見え、地域と ASN のパネルは飾りになります。
  • 静的ファイルとヘルスチェック。 ヒットはページビューではありません。誰かに数字を伝える前に、自分が本当に意味しているリクエストまで絞り込んでください。

生のログを読む価値は、逆方向からも学びました。自社オリジンログの3時間分には 558 本の異なる URL にまたがる 1,438 件のリクエストがあり、URL あたり 2.58 ヒット、そのおよそ4分の3が偽装または空の user agent を持つデータセンター由来のトラフィックでした。この比率は JavaScript のアナリティクスには一切映りません。そのトラフィックはほとんど JavaScript を実行しないからです。そしてこれが、ロングテールのコンテンツサイトで2時間のキャッシュがなぜあれほど効かなかったのかという、数週間続いた議論に決着をつけました。その議論の詳しい版は 自分のサイトのトラフィックのうちボットはどれくらいか にあります。

成長を狙うときの位置づけ

グロース用途はツールの全機能より狭く、正確に名指しする価値があります。第一に、クロールの実態。Googlebot と AI クローラーが実際にどのページをどれくらいの頻度で取得し、どのステータスを受け取ったか。ログの中の 404 はたいてい、移動させたページに向けて誰かが公開したリンクです。第二に、リファラーのパネル。被リンクツールが気づくより先に流入リンクを捉えます。第三に、リクエスト単位の応答時間。実訪問者にだけ遅いページは合成テストでは見えません。プロジェクトが2026年8月末に AI クローラー専用カテゴリを追加し、Fediverse のトラフィックを分離したという事実自体、第一の用途がいま多くの人の問いになっている、まずまずの証拠です。

とはいえ、そのどれもグロースの仕事そのものではありません。ここがあらゆる計測ツールの正直な限界です。ログは何が起きたかを語り、それにどう対応すべきかは決して語りません。クローラーが探しに来たページを公開すること、そのリファラーを生む働きかけを書くこと、黙ってリンクを失わせていた 404 を直すこと。それらは今も誰かがやる必要があります。そのためにあるのが AgentCeres、agentceres.com の AI Growth Officer です。専門役割のチームが作業を起案し、外に出るものは人が承認します。まだその手前で、問いが単に「なぜ誰も来ないのか」であれば、まずは サイトにトラフィックが来ない理由 から始めてください。

FAQ

GoAccess は Google アナリティクスや Plausible の代わりになりますか
なりませんし、代替と考えると失望します。タグ型のツールはセッションを通して人を追い、何をクリックし、また戻ってきたかを教えてくれます。GoAccess はサーバーが何を求められ何を返したかを読むだけで、ユーザーという概念自体を持ちません。重なるのはおおよそページビュー数くらいで、その数字さえ食い違います。ログは JavaScript を実行しなかったリクエストを数え、タグはオリジンが見ていないかもしれないセッションを数えるからです。
ログにアクセスできないプラットフォームでアプリを動かしていても使えますか
たいていは直接には使えません。そして時間を投じる前に最初に確認すべきなのがこれです。アクセスログを読めないなら、代わりになるのは CDN のログエクスポート機能か、プラットフォーム自身のリクエストログです。サービスによってはログをファイルに書き出せて、それをパイプで渡せます。それで問題なく動きます。GoAccess は標準入力を読むのが得意で、形式さえ伝えれば行がどこから来たかは気にしません。
混み合ったサーバーで動かすと遅くなりますか
リクエストの経路に入るのではなくログファイルを読むだけなので、プロセス内エージェントのように応答を遅らせることはできません。大量の履歴を扱うときの実質的なコストは解析そのもので、README の助言がそのまま効きます。`nice` で優先度を下げて動かす、`--jobs` でマルチスレッド解析にする、`--chunk-size` を既定より上げる。もう一つの選択肢は、そもそもサーバーで動かさず、SSH でログを手元のマシンに流すことです。
1週間を超える履歴はどう保持しますか
永続化します。まず `--persist` を付けて一度実行しデータセットをディスクに書き、以降の実行は `--restore --persist` にして、既存分を読み込みつつ新しい行を追記します。ファイルごとの inode と最後に解析した行のタイムスタンプを保持しているため、ローテート済みのログに対して再実行しても二重計上にはなりません。すべてを永久に持つのではなく移動窓が欲しければ `--keep-last` を足してください。
Related projects
Umamiオープンソースでプライバシー重視の Web アナリティクス —セルフホストできる Google Analytics の代替OpenPanelオープンソースでセルフホスト可能なプロダクトアナリティクス — Mixpanel や Google Analytics の代替PostHogプロダクト分析、セッションリプレイ、フィーチャーフラグ、実験を単一のSDKでまとめたオープンソース基盤 — eeディレクトリを除きMITライセンス、各ツールに月次の無料枠ありOpenStatusステータスページと稼働監視をひとつにまとめたオープンソースツール。セルフホスト可能、コードとして構成でき、28 リージョンから疎通を確認します

You built it. Now grow it.

AgentCeres is a managed AI marketing team — specialists draft the SEO, social, and outreach that fill your links, you approve what ships. 14-day free trial, from $39/month.

Start free trialMore projects