GoAccess は、オープンソースのリアルタイム Web ログ アナライザーおよび対話型ビューアーであり、*nix システム上のターミナルまたはブラウザーを通じて実行されます。これは、リアルタイムで視覚的なサーバー レポートを必要とするシステム管理者に、高速で貴重な HTTP 統計を提供します。詳細については、https://goaccess.io をご覧ください。
GoAccess は、指定された Web ログ ファイルを解析し、データを X ターミナルに出力します。特徴は次のとおりです。
完全にリアルタイム
すべてのパネルとメトリクスは、端末出力では 200 ミリ秒ごとに、HTML 出力では 1 秒ごとに更新されるようにタイミングが設定されます。
必要な最小限の構成
アクセス ログ ファイルに対して実行し、ログ形式を選択するだけで、GoAccess がアクセス ログを解析して統計情報を表示できます。
アプリケーションの応答時間を追跡する
リクエストの処理にかかった時間を追跡します。サイトの速度を低下させているページを追跡する場合に非常に便利です。
ほぼすべての Web ログ形式
GoAccess では、任意のカスタム ログ形式文字列を使用できます。事前定義されたオプションには、Apache、Nginx、Amazon S3、Elastic Load Balancing、CloudFront などが含まれます。
増分ログ処理
データの永続性が必要ですか? GoAccess には、ディスク上の永続化オプションを通じてログを段階的に処理する機能があります。
依存関係は 1 つだけ
GoAccess は C で書かれています。これを実行するには、依存関係として ncurses のみが必要です。それでおしまい。独自の Web Socket サーバー (http://gwsocket.io/) も備えています。
訪問者
ヒット数、訪問者数、帯域幅、実行速度が最も遅いリクエストのメトリクスを時間または日付ごとに特定します。
仮想ホストごとのメトリクス
複数の仮想ホスト (サーバー ブロック) がありますか?どの仮想ホストが Web サーバー リソースをほとんど消費しているかを表示するパネルが特徴です。
ASN (自律システム番号マッピング)
悪意のあるトラフィック パターンを検出し、それに応じてブロックするのに最適です。
配色をカスタマイズ可能
独自の色味や配色に合わせて GoAccess を調整します。ターミナルを使用するか、HTML 出力にスタイルシートを適用するだけです。
大規模なデータセットのサポート
GoAccess は、最適化されたメモリ内ハッシュ テーブルにより、大規模なログを解析する機能を備えています。メモリ使用量が非常に優れており、パフォーマンスも非常に優れています。このストレージは、ディスク上の永続性もサポートしています。
ドッカーのサポート
GoAccess の Docker イメージをアップストリームから構築する機能。ボリューム マッピングを使用し、 goaccess.conf
編集することで、完全に設定することができます。以下の Docker セクションを参照してください。
GoAccess では、任意のカスタム ログ形式文字列を使用できます。事前定義されたオプションには以下が含まれますが、これらに限定されません。
GoAccess は、高速なターミナルベースのログ アナライザーとして設計されました。その中心となるアイデアは、ブラウザを使用せずに Web サーバーの統計をリアルタイムで迅速に分析して表示することです ( SSH 経由でアクセス ログを簡単に分析したい場合、または単にターミナルでの作業が好きな場合に最適です)。
ターミナル出力はデフォルトの出力ですが、完全な自己完結型のリアルタイムHTML
レポート、 JSON
およびCSV
レポートを生成する機能があります。
これは、他の何よりも監視コマンド ツールとして見ることができます。
GoAccess は *nix システム上でコンパイルして使用できます。
以下を使用して GoAccess をダウンロード、抽出、コンパイルします。
$ wget https://tar.goaccess.io/goaccess-1.9.3.tar.gz
$ tar -xzvf goaccess-1.9.3.tar.gz
$ cd goaccess-1.9.3/
$ ./configure --enable-utf8 --enable-geoip=mmdb
$ 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 ディストリビューションの優先パッケージ マネージャーを使用して、GNU+Linux に GoAccess をインストールするのが最も簡単です。すべてのディストリビューションで最新バージョンの 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 サブシステム経由。
GoAccess には最小限の要件があり、C で書かれており、ncurses のみが必要です。ただし、以下は、ソースから GoAccess をビルドするための一部のディストリビューションにおけるオプションの依存関係の表です。
ディストリビューション | Ncurses | GeoIP (オプション) | GeoIP2 (オプション) | OpenSSL (オプション) |
---|---|---|---|---|
Ubuntu/Debian | libncurses-dev | libgeoip-dev | libmaxminddb-dev | libssl-dev |
RHEL/CentOS | ncurses-開発 | geoip-開発 | libmaxminddb-devel | openssl-開発 |
アーチ | 呪う | ジオイプ | libmaxminddb | オープンSSL |
Gentoo | sys-libs/ncurses | dev-libs/geoip | dev-libs/libmaxminddb | dev-libs/openssl |
スラックウェア | 呪う | 地域IP | libmaxminddb | オープンSSL |
注: ソースからソフトウェアをコンパイル/ビルドするには、 gcc
、 autoconf
、 gettext
、 autopoint
などのビルド ツールのインストールが必要になる場合があります。例: base-devel
、 build-essential
、 "Development Tools"
。
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 -
開発ライブラリでローカル システムが乱雑になるのを防ぐために、分離されたコンテナ環境で 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 はインメモリ ハッシュ テーブルを使用します。メモリ使用量が非常に優れており、パフォーマンスも非常に優れています。このストレージは、ディスク上の永続性もサポートしています。
コマンドに指定できるオプション、または構成ファイルで指定できるオプションを参照してください。構成ファイルで指定されている場合は、先頭に--
を付けずに長いオプションを使用する必要があります。
注: データを 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 に知らせるために、単一のダッシュがコマンド ラインに追加されます。
GoAccess にさらに柔軟性を加えたい場合は、 zcat --force
使用して圧縮ファイルと非圧縮ファイルを読み取ることができます。たとえば、すべてのログ ファイルaccess.log*
を処理したい場合は、次のようにできます。
# zcat --force access.log* | goaccess -
注: Mac OS X では、 zcat
の代わりにgunzip -c
を使用します。
マルチスレッド解析を有効にするには、 --jobs=
(または-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=
および--ssl-key=
を使用する必要があります。
もう 1 つの便利なパイプは、ウェブログから日付をフィルタリングすることです。
以下は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 -
注: GoAccess が標準入力から読み取ることができるように、SSH には-n
必要です。また、パスフレーズが必要な場合は機能しないため、認証には必ず SSH キーを使用してください。
以前に回答された質問や問題が数多く寄せられています。
GoAccess には、内部ストレージを通じてログを段階的に処理し、そのデータをディスクにダンプする機能があります。それは次のように機能します。
--persist
を使用して永続化する必要があります。その後、同じデータセットをロードできます。--restore
。新しいデータが渡されると (パイプまたはログ ファイル経由で)、元のデータセットに追加されます。 GoAccess は、処理されたすべてのファイルの i ノードを追跡し (ファイルが同じパーティションにあると仮定して)、さらに、各ファイルの解析された最後の行と解析された最後の行のタイムスタンプとともに、ログからデータの断片を抽出します。 。例: inode:29627417|line:20012|ts:20171231235059
まず、スニペットが解析中のログと一致するかどうかを比較します。一致する場合は、ログが大幅に変更されていない、たとえば切り捨てられていないと想定します。 i ノードが現在のファイルと一致しない場合は、すべての行が解析されます。現在のファイルが i ノードと一致する場合、残りの行を読み取り、解析された行数とタイムスタンプを更新します。特別な予防措置として、保存されているタイムスタンプ以下のログ行は解析されません。
パイプされたデータは、最後に読み取られた行のタイムスタンプに基づいて機能します。たとえば、保存されているものよりも大きいタイムスタンプが見つかるまで、すべての受信エントリを解析して破棄します。
// last month access log
# goaccess access.log.1 --persist
次に、それをロードします
// append this month access log, and preserve new data
# goaccess access.log --restore --persist
(新しいデータを解析せずに) 永続化されたデータのみを読み取る場合
# goaccess --restore
GoAccess に関するヘルプは大歓迎です。最も役立つ方法は、試してフィードバックを提供することです。 GitHub の問題トラッカーやプル リクエストを自由に使用して、コードの変更について議論したり送信したりできます。
GitHub 上で .po ファイルを直接編集するか、inlang.com のビジュアル インターフェイスを使用して、翻訳に貢献できます。
楽しむ!