GoAccessは、*nixシステムのターミナル上、またはブラウザ上で直接動作する、オープンソースのリアルタイムWebログアナライザー兼インタラクティブビューアです。システム管理者、DevOpsエンジニア、セキュリティ専門家を対象に設計されており、迅速で実用的なHTTP統計とビジュアルなサーバーレポートをその場で提供します。GoAccessはWebサーバーログをリアルタイムで解析し、データをターミナル上またはライブHTMLダッシュボード経由で直接表示するため、トラフィックの監視、異常の検出、問題の即時トラブルシューティングが容易になります。
詳細はこちら: https://goaccess.io
GoAccessは指定されたWebログファイルを解析し、データをXターミナルに出力します。主な機能は以下のとおりです:
完全なリアルタイム処理
すべてのパネルとメトリクスは、ターミナル出力では200msごと、HTML出力では1秒ごとに更新されるように設定されています。
最小限の設定で動作
アクセスログファイルに対して実行し、ログフォーマットを選択するだけで、GoAccessがアクセスログを解析して統計を表示します。
アプリケーションの応答時間を追跡
リクエストの処理にかかった時間を追跡します。サイトを遅くしているページを特定したい場合に非常に便利です。
WebSocket認証:
GoAccessは強化されたWebSocket認証を提供し、ローカルおよび外部のJWT検証、安全なトークンリフレッシュ機能、外部認証システムとのシームレスな統合をサポートします。検証済みトークンはそのexpクレームまで追跡され、有効期限が切れると接続は閉じられます。
ほぼすべてのWebログフォーマットに対応
GoAccessは任意のカスタムログフォーマット文字列を扱えます。定義済みのオプションには、Apache、Nginx、Amazon S3、Elastic Load Balancing、CloudFrontなどがあります。
増分ログ処理
データの永続化が必要ですか?GoAccessはオンディスクの永続化オプションを通じて、ログを増分的に処理する機能を備えています。
依存関係は1つだけ
GoAccessはCで書かれています。実行に必要な依存関係はncursesだけです。それだけです。独自のWeb Socketサーバーも備えています — http://gwsocket.io/。
訪問者
時間別または日付別に、ヒット数、訪問者数、帯域幅、および最も遅いリクエストのメトリクスを判定します。
バーチャルホストごとのメトリクス
複数のバーチャルホスト(サーバーブロック)をお持ちですか?どのバーチャルホストがWebサーバーリソースを最も消費しているかを表示するパネルを備えています。
UTMキャンペーン追跡
キャンペーントラフィックをメディア、ソース、キャンペーン、コンテンツ、タームごとに分類し、すべてリクエストされたURLから抽出します。
ボットとクローラーの分類
AIクローラーとFediverse(ActivityPub)トラフィックを、従来の検索エンジンクローラーとは別の独自カテゴリに分類します。
TLS設定
ログフォーマットに%K、%k、%gが含まれている場合、ネゴシエートされたプロトコル、暗号スイート、鍵交換グループをレポートします。
ASN(自律システム番号マッピング)
悪意のあるトラフィックパターンの検出と、それに応じたブロックに最適です。--exclude-asnで解析されるため、ネットワーク全体を除外することもできます。
カラースキームのカスタマイズ
ターミナル経由、またはHTML出力にスタイルシートを適用するだけで、GoAccessを好みの色に合わせて調整できます。
大規模データセットのサポート
GoAccessは最適化されたインメモリハッシュテーブルにより、大規模なログを解析する機能を備えています。メモリ使用量が非常に優れており、パフォーマンスもかなり良好です。このストレージはオンディスクの永続化にも対応しています。
Docker サポート
上流から GoAccess の Docker イメージをビルドする機能。ボリュームマッピングを使用し、goaccess.conf を編集することで、引き続き完全に設定できます。以下の Docker セクションを参照してください。
docker-compose の使用方法に関するドキュメントもあります。
GoAccess は任意のカスタムログ形式文字列を扱えます。定義済みのオプションには以下が含まれますが、これらに限定されません:
HTML レポートは Natural Earth の地図データを使用しており、これはパブリックドメインです。
同梱の国別地図には、国連総会決議 68/262に沿ってクリミアをウクライナの一部として表示するためのローカル調整が含まれています。
resources/countries-110m.json を更新する際は、この調整を維持してください。
トラフィックの国別割り当ては、設定された GeoIP データベースから取得されます。地図の輪郭を変更しても、レポートの合計値は変わりません。
GoAccess は、高速なターミナルベースのログアナライザとして設計されています。その核となるアイデアは、ブラウザを使うことなく、Web サーバーの統計をリアルタイムで素早く分析・閲覧できることです (SSH 経由でアクセスログを素早く分析したい場合や、単にターミナルでの作業が好きな場合に最適です)。
また、セキュリティ監視のための実用的なツールとしても機能し、不審なアクティビティ、異常なトラフィックパターン、ブルートフォース攻撃の試み、スキャナー、ボット、異常なリクエストをログから直接簡単に見つけられるようにします。
ターミナル出力がデフォルトの出力ですが、完全で自己完結型のリアルタイム HTML レポートや、JSON、CSV レポートを生成する機能も備えています。
これはどちらかと言えば、モニタリング用のコマンドツールと捉えることができます。
GoAccess は *nix システム上でコンパイルして使用できます。
GoAccess をダウンロード、展開、コンパイルするには:
$ wget https://tar.goaccess.io/goaccess-1.12.tar.gz
$ tar -xzvf goaccess-1.12.tar.gz
$ cd goaccess-1.12/
$ ./configure --enable-utf8 --enable-geoip=mmdb --with-zlib
$ make
# make install
$ git clone https://github.com/allinurl/goaccess.git
$ cd goaccess
$ autoreconf -fiv
$ ./configure --enable-utf8 --enable-geoip=mmdb
$ make
# make install
GNU+Linux に GoAccess をインストールする最も簡単な方法は、お使いの GNU+Linux ディストリビューションの推奨パッケージマネージャを使用することです。すべてのディストリビューションで最新バージョンの GoAccess が利用できるわけではないことに注意してください。
# apt-get install goaccess
注: これは古いバージョンの GoAccess をインストールする可能性が高いです。最新の安定版 GoAccess を実行していることを確認するには、以下の代替オプションを参照してください。
$ wget -O - https://deb.goaccess.io/gnugpg.key | gpg --dearmor | sudo tee /usr/share/keyrings/goaccess.gpg >/dev/null
$ echo "deb [signed-by=/usr/share/keyrings/goaccess.gpg arch=$(dpkg --print-architecture)] https://deb.goaccess.io/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/goaccess.list
$ sudo apt-get update
$ sudo apt-get install goaccess
注:
.deb パッケージは HTTPS 経由でも利用できます。apt-transport-https のインストールが必要になる場合があります。# yum install goaccess
# pacman -S goaccess
# emerge net-analyzer/goaccess
# brew install goaccess
# cd /usr/ports/sysutils/goaccess/ && make install clean
# pkg install sysutils/goaccess
# cd /usr/ports/www/goaccess && make install clean
# pkg_add goaccess
# zypper ar -f obs://server:http http
# zypper in goaccess
# pkg install goaccess
# pkgin install goaccess
GoAccess は Cygwin を通じて Windows で使用できます。Cygwin のパッケージを参照してください。または、Windows 10 上の GNU+Linux サブシステムを通じて使用することもできます。
アクセスログから出力を直接生成できる Docker イメージが更新されました。レポートのみを出力したい場合は、外部環境からログをパイプで Docker ベースのプロセスに渡すことができます:
touch report.html
cat access.log | docker run --rm -i -v ./report.html:/report.html -e LANG=$LANG allinurl/goaccess -a -o report.html --log-format COMBINED -
またはリアルタイムで:
tail -F access.log | docker run -p 7890:7890 --rm -i -e LANG=$LANG allinurl/goaccess -a -o report.html --log-format COMBINED --real-time-html -
docker-compose の使い方に関するドキュメントもあります。
開発用ライブラリでローカルシステムを煩雑にしないよう、Debian ベースのシステム向けバイナリを分離コンテナ環境内でビルドすることもできます:
$ curl -L "https://github.com/allinurl/goaccess/archive/refs/heads/master.tar.gz" | tar -xz && cd goaccess-master
$ docker build -t goaccess/build.debian-12 -f Dockerfile.debian-12 .
$ docker run -i --rm -v $PWD:/goaccess goaccess/build.debian-12 > goaccess
Docker イメージの使用方法の詳細は DOCKER.md を参照してください。
GoAccess の要件は最小限で、C で書かれており ncurses のみを必要とします。 ただし、以下は一部のディストリビューションで GoAccess をソースからビルドする際の オプション依存関係の一覧です。