GoAccessは、*nixシステムのターミナルまたはブラウザ上で直接動作する、オープンソースのリアルタイムWebログ解析ツール兼インタラクティブビューアです。システム管理者、DevOpsエンジニア、セキュリティ専門家向けに設計されており、高速で実用的なHTTP統計情報とビジュアルなサーバーレポートを即座に提供します。GoAccessは、Webサーバーログをリアルタイムに解析し、データをターミナルまたはライブHTMLダッシュボードで直接表示するため、トラフィックの監視、異常の検出、問題の迅速なトラブルシューティングが容易になります。
詳細情報: https://goaccess.io。
GoAccessは、指定されたWebログファイルを解析し、データをXターミナルに出力します。機能は以下の通りです。
完全なリアルタイム
すべてのパネルとメトリクスは、ターミナル出力では200ミリ秒ごと、HTML出力では毎秒更新されるように設定されています。
最小限の設定
アクセスログファイルに対して実行し、ログ形式を選択するだけで、GoAccessがアクセスログを解析して統計情報を表示します。
アプリケーション応答時間の追跡
リクエストの処理にかかった時間を追跡します。サイトの速度低下を引き起こしているページを追跡したい場合に非常に便利です。
WebSocket認証:
GoAccessは拡張されたWebSocket認証を提供し、ローカルおよび外部のJWT検証、セキュアなトークン更新機能、外部認証システムとのシームレスな統合をサポートします。
ほぼすべてのWebログ形式
GoAccessは任意のカスタムログ形式文字列を許可します。Apache、Nginx、Amazon S3、Elastic Load Balancing、CloudFrontなどの事前定義オプションがあります。
増分ログ処理
データの永続化が必要ですか?GoAccessは、ディスク上の永続化オプションを通じてログを増分的に処理する機能を備えています。
依存関係は1つだけ
GoAccessはCで書かれています。実行に必要な依存関係はncursesだけです。それだけです。独自のWeb Socketサーバー(http://gwsocket.io/)も備えています。
訪問者
ヒット数、訪問者数、帯域幅、および時間または日付ごとの最も遅いリクエストのメトリクスを決定します。
バーチャルホストごとのメトリクス
複数のバーチャルホスト(サーバーブロック)をお持ちですか?どのバーチャルホストがWebサーバーリソースを最も消費しているかを表示するパネルがあります。
ASN(自律システム番号マッピング)
悪意のあるトラフィックパターンを検出し、それに応じてブロックするのに最適です。
カラースキームのカスタマイズ
ターミナルから、またはHTML出力にスタイルシートを適用するだけで、GoAccessを自分の色の好み/スキームに合わせることができます。
大規模データセットのサポート
GoAccessは、最適化されたインメモリハッシュテーブルにより、大規模なログを解析する機能を備えています。メモリ使用量は非常に良好で、パフォーマンスもかなり優れています。このストレージはディスク上の永続化もサポートしています。
Dockerサポート
上流からGoAccessのDockerイメージをビルドする機能があります。ボリュームマッピングを使用してgoaccess.confを編集することで、完全に設定することもできます。Dockerセクションを参照してください。docker-composeの使用方法に関するドキュメントもあります。
GoAccessは任意のカスタムログ形式文字列を許可します。事前定義オプションには以下が含まれますが、これらに限定されません。
GoAccessは、高速なターミナルベースのログアナライザーとして設計されました。その中核となる考え方は、ブラウザを使用せずに(SSH経由でアクセスログを簡単に分析したい場合や、ターミナルで作業するのが好きな場合に最適です)Webサーバー統計をリアルタイムで迅速に分析し表示することです。
また、セキュリティ監視の実用的なツールとしても機能し、ログから不審なアクティビティ、異常なトラフィックパターン、ブルートフォース攻撃、スキャナー、ボット、異常なリクエストを簡単に特定できます。
ターミナル出力がデフォルトの出力ですが、完全で自己完結型のリアルタイムHTMLレポート、JSON、およびCSVレポートを生成する機能も備えています。
これは何よりもモニターコマンドツールとして見ることができます。
GoAccessは*nixシステムでコンパイルして使用できます。
以下のコマンドでGoAccessをダウンロード、展開、コンパイルします。
$ wget https://tar.goaccess.io/goaccess-1.10.2.tar.gz
$ tar -xzvf goaccess-1.10.2.tar.gz
$ cd goaccess-1.10.2/
$ ./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をインストールするのが最も簡単です。すべてのディストリビューションがGoAccessの最新バージョンを利用できるわけではありません。
# apt-get install 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をビルドするための一部のディストロにおけるオプションの依存関係の表です。
注意: ソースからコンパイル/ビルドするには、gcc、autoconf、gettext、autopointなどのビルドツールをインストールする必要があるかもしれません。例:base-devel、build-essential、"Development Tools"。
インメモリストレージは、データセットのサイズを利用可能な物理メモリ量に制限する代わりに、優れたパフォーマンスを提供します。GoAccessはインメモリハッシュテーブルを使用します。メモリ使用量は非常に良好で、パフォーマンスもかなり優れています。このストレージはディスク上の永続化もサポートしています。
コマンドに指定できる、または設定ファイルで指定できるオプションを参照してください。設定ファイルで指定する場合、先頭に--を付けずに長いオプションを使用する必要があります。
注意: データをパイプでGoAccessに渡すと、ログ/日時/時刻設定ダイアログは表示されません。設定ファイルまたはコマンドラインで事前に定義する必要があります。
ターミナルに出力し、インタラクティブなレポートを生成するには:
# goaccess access.log
HTMLレポートを生成するには:
# goaccess access.log -a > report.html
JSONレポートファイルを生成するには:
# goaccess access.log -a -d -o report.json
CSVレポートを標準出力に生成するには:
# goaccess access.log --no-csv-summary -o csv
GoAccessはリアルタイムのフィルタリングと解析においても非常に柔軟です。たとえば、goaccessを起動してからのログを監視して問題を迅速に診断するには:
# tail -f access.log | goaccess -
さらに、パイプを開いたままフィルタリングを行い、リアルタイム解析を維持するには、tail -fとgrep、awk、sedなどのパターンマッチングツールを利用できます:
# tail -f access.log | grep -i --line-buffered 'firefox' | goaccess --log-format=COMBINED -
または、ファイルの先頭から解析しつつパイプを開いたままフィルタを適用するには:
# tail -f -n +0 access.log | grep -i --line-buffered 'firefox' | goaccess -o report.html --real-time-html -
GoAccessで複数のログを解析する方法はいくつかあります。最も簡単なのは、コマンドラインに複数のログファイルを渡すことです:
# goaccess access.log access.log.1
通常のファイルを読み取りながらパイプからファイルを解析することも可能です:
# cat access.log.2 | goaccess access.log access.log.1 -
注意: コマンドラインに単一のダッシュを追加して、パイプから読み取ることをGoAccessに伝えます。
より柔軟性を高めるために、zcat --forceを使用して圧縮ファイルと非圧縮ファイルの両方を読み取ることもできます。たとえば、すべてのログファイルaccess.log*を処理するには、次のようにします:
# zcat --force access.log* | goaccess -
注: Mac OS Xでは、zcatの代わりにgunzip -cを使用してください。
マルチスレッド解析を有効にするには、--jobs=<count>(または-j)を使用します。例:
# goaccess access.log -o report.html -j 4
チャンクサイズを調整するには、--chunk-size=<256-32768>を使用します。デフォルトのチャンクサイズは1024です。例:
# goaccess access.log -o report.html -j 4 --chunk-size=8192
GoAccessはHTMLレポートでリアルタイムデータを出力する機能があります。HTMLファイルは外部ファイルに依存しない単一のファイルで構成されているため、メールで送信することもできます。とても便利です!
リアルタイムHTMLレポートの生成プロセスは、静的なレポートの作成と非常によく似ています。リアルタイムにするには、--real-time-htmlが必要です。
# goaccess access.log -o /usr/share/nginx/html/your_site/report.html --real-time-html
レポートを表示するには、http://your_site/report.htmlにアクセスします。
デフォルトでは、GoAccessは生成されたレポートのホスト名を使用します。オプションで、クライアントのブラウザが接続するURLを指定できます。詳細な例についてはFAQを参照してください。
# goaccess access.log -o report.html --real-time-html --ws-url=goaccess.io
デフォルトでは、GoAccessはポート7890でリッスンします。7890以外のポートを使用するには、次のように指定します(ポートが開いていることを確認してください):
# goaccess access.log -o report.html --real-time-html --port=9870
WebSocketサーバーを0.0.0.0以外のアドレスにバインドするには、次のように指定します:
# goaccess access.log -o report.html --real-time-html --addr=127.0.0.1
注意: TLS/SSL接続でリアルタイムデータを出力するには、--ssl-cert=<cert.crt>と--ssl-key=<priv.key>を使用する必要があります。
Webログから日付をフィルタリングするのも便利なパイプです。
以下は、05/Dec/2010以降のすべてのHTTPリクエストを取得します。
# sed -n '/05\/Dec\/2010/,$ p' access.log | goaccess -a -
または、昨日や明日などの相対日付を使用する場合:
# sed -n '/'$(date '+%d\/%b\/%Y' -d '1 week ago')'/,$ p' access.log | goaccess -a -
特定の期間(DATE aからDATE bまで)のみを解析したい場合は、次のようにします:
# sed -n '/5\/Nov\/2010/,/5\/Dec\/2010/ p' access.log | goaccess -a -
データ量を制限してストレージを再利用したい場合は、一定の日数だけ保持できます。たとえば、過去5日間のみを保持して表示するには:
# goaccess access.log --keep-last=5
ログにバーチャルホストフィールドが含まれていると仮定します。たとえば:
vhost.io:80 8.8.4.4 - - [02/Mar/2016:08:14:04 -0600] "GET /shop HTTP/1.1" 200 615 "-" "Googlebot-Image/1.0"
そして、トップURLがどのバーチャルホストに属しているかを確認するために、リクエストにバーチャルホストを追加したい場合:
awk '$8=$1$8' access.log | goaccess -a -
同じことを行い、リアルタイムのフィルタリングと解析も使用する場合:
tail -f access.log | unbuffer -p awk '$8=$1$8' | goaccess -a -
バーチャルホストのリストを除外するには、次のようにします:
# grep -v "`cat exclude_vhost_list_file`" vhost_access.log | goaccess -
リクエスト内の特定のページ(例:ページビュー、html、htm、phpなど)を解析するには:
# awk '$7~/\.html|\.htm|\.php/' access.log | goaccess -
注意:$7は共通および複合ログ形式(バーチャルホストなし)のリクエストフィールドです。ログにバーチャルホストが含まれる場合は、代わりに$8を使用する必要があります。対象とするフィールドを確認することをお勧めします。例:
# tail -10 access.log | awk '{print $8}'
特定のステータスコード(例:500 内部サーバーエラー)を解析するには:
# awk '$9~/500/' access.log | goaccess -
または複数のステータスコード(例:すべての3xxおよび5xx):
# tail -f -n +0 access.log | awk '$9~/3[0-9]{2}|5[0-9]{2}/' | goaccess -o out.html -
サーバーにアクセスしているボット(クローラー)のおおよその概要を取得するには:
# tail -F -n +0 access.log | grep -i --line-buffered 'bot' | goaccess -
また、GoAccessを低い優先度で実行したい場合は、次のように実行できます:
# nice -n 19 goaccess -f access.log -a
サーバーにインストールしたくない場合でも、ローカルマシンから実行できます!
# ssh -n root@server 'tail -f /var/log/apache2/access.log' | goaccess - --log-format=COMBINED
注意: SSHで-nオプションが必要なのは、GoAccessが標準入力から読み取れるようにするためです。また、パスフレーズが必要な認証は機能しないため、SSHキーを使用してください。
これまでに回答された多くの質問や問題が寄せられています。
GoAccessは、内部ストレージを介してログを増分的に処理し、データをディスクにダンプする機能を備えています。次のように動作します。
--persistでデータセットを永続化する必要があります。その後、同じデータセットを次のようにロードできます。--restore。新しいデータが渡された場合(パイプまたはログファイル経由)、元のデータセットに追加されます。GoAccessは処理されたすべてのファイルのinodeを追跡します(ファイルが同じパーティションに残っていることを前提としています)。さらに、ログからデータのスニペット、各ファイルの最後に解析された行、および最後に解析された行のタイムスタンプを抽出します。例:inode:29627417|line:20012|ts:20171231235059
まず、スニペットが解析中のログと一致するかどうかを比較します。一致する場合、ログが大幅に変更されていない(切り詰められていないなど)と見なします。inodeが現在のファイルと一致しない場合、すべての行を解析します。現在のファイルがinodeと一致する場合、残りの行を読み取り、解析済み行数とタイムスタンプを更新します。さらに予防策として、保存されているタイムスタンプ以下であるタイムスタンプを持つログ行は解析しません。
パイプデータは、最後に読み取られた行のタイムスタンプに基づいて動作します。たとえば、保存されているタイムスタンプ以上のタイムスタンプが見つかるまで、すべての受信エントリを解析して破棄します。
// 先月のアクセスログ
# goaccess access.log.1 --persist
次に、次のようにロードします。
// 今月のアクセスログを追加し、新しいデータを保持
# goaccess access.log --restore --persist
永続化されたデータのみを読み取る場合(新しいデータの解析なし)
# goaccess --restore
翻訳に貢献するには、GitHub 上で直接 .po ファイルを編集するか、ビジュアルインターフェース inlang.com をご利用ください。
お楽しみください!
| ディストリビューション | NCurses | GeoIP(オプション) | GeoIP2(オプション) | OpenSSL(オプション) |
|---|
| Ubuntu/Debian | libncurses-dev | libgeoip-dev | libmaxminddb-dev | libssl-dev |
| RHEL/CentOS | ncurses-devel | geoip-devel | libmaxminddb-devel | openssl-devel |
| Arch | ncurses | geoip | libmaxminddb | openssl |
| Gentoo | sys-libs/ncurses | dev-libs/geoip | dev-libs/libmaxminddb | dev-libs/openssl |
| Slackware | ncurses | GeoIP | libmaxminddb | openssl |