著者は、 Write for DOnations プログラムの一環として、 InternetArchiveを選択して寄付を受け取りました。

序章

GoAccess は、Webサーバーのログをリアルタイムで監視するためのツールです。 これはCで記述されており、ダッシュボードインターフェイスに人気のある ncurses ライブラリを使用しており、コマンドラインから直接アクセスできます。

これは、制御する任意のWebサーバーにSSHで接続し、関連する統計を迅速かつ安全に表示または分析できるため、優れています。 コマンドラインダッシュボードインターフェイスとは別に、HTML、JSON、CSVなどの他の形式で統計を表示することもできます。これらは、他のコンテキストで使用したり、他のユーザーと共有したりできます。

GoAccessは、ニーズに応じて、クライアント側の分析ツールの優れた代替手段になる可能性もあります。 サーバーログを直接分析するため、追加のスクリプトをロードする必要はなく、データは完全に管理されます。

このチュートリアルでは、Ubuntu20.04WebサーバーにGoAccessforApacheをインストールして構成します。 コマンドラインインターフェイスで使用可能なモジュールとナビゲーションショートカットを確認する前に、GoAccessを使用してApacheログファイルにアクセスします。

前提条件

このチュートリアルでは、次のものが必要です。

  • 1つのUbuntu20.04サーバー。 このUbuntu20.04チュートリアルの初期サーバー設定に従うことで設定できます。これには、sudo権限を持つroot以外のユーザーとファイアウォールが含まれます。

  • Ubuntu20.04にApacheをインストールする方法に従ってApacheをインストールします。

ステップ1—GoAccessをインストールする

このステップでは、GoAccessツールとその依存関係をインストールします。

パッケージデータベースとシステムが最新であることを確認することから始めます。

  1. sudo apt update
  2. sudo apt full-upgrade

次に、GoAccessをインストールします。 ツールのバージョンはUbuntuリポジトリで利用できますが、これは通常、最新の安定バージョンではありません。 たとえば、執筆時点でのGoAccessの最新バージョンは1.4ですが、Ubuntu20.04リポジトリから入手できるバージョンは1.3です。

サーバーに最新の安定バージョンのGoAccessがインストールされていることを確認するには、ソースからコンパイルするか、Ubuntuの公式GoAccessリポジトリを使用します。

方法1—ソースからのコンパイル

まず、ソースからGoAccessをコンパイルするために必要な依存関係をインストールします。

  1. sudo apt install libncursesw5-dev libgeoip-dev libtokyocabinet-dev build-essential

次の依存関係をインストールします。

  • build-essential:C、C +、およびその他のプログラミング言語用のgccコンパイラ、およびGoAccessmakefileを構築するためのmakeを含む多くのパッケージをインストールします。
  • libncursesw5-dev:GoAccessがコマンドラインインターフェイスに使用するncursesライブラリをインストールします。
  • libgeoip-dev:GeoIPライブラリに必要なファイルが含まれています。
  • libtokyocabinet-dev:パフォーマンスを向上させるためのデータベース依存関係を提供します。

次に、次のコマンドを使用して、公式Webサイトから最新バージョンのGoAccessをダウンロードします。

  1. wget http://tar.goaccess.io/goaccess-1.4.tar.gz

ダウンロードが完了したら、次のコマンドでアーカイブを抽出します。

  1. tar -xzvf goaccess-1.4.tar.gz

次のように、新しく解凍されたディレクトリに移動します。

  1. cd goaccess-1.4/

このディレクトリ内にあるconfigureスクリプトを実行します。

  1. ./configure --enable-utf8 --enable-geoip=legacy

--enable-utf8フラグは、GoAccessがワイド文字サポートでコンパイルされることを保証し、--enable-geoipは、元のGeoIPデータベースでGeoLocationサポートを有効にします。 legacymmdbに置き換えて、代わりに拡張GeoIP2データベースを使用できます。 他の構成オプションは、GoAccessWebサイトにあります。

次のような出力が表示されます。

Output
. . . Your build configuration: Prefix : /usr/local Package : goaccess Version : 1.4 Compiler flags : -pthread Linker flags : -lnsl -lncursesw -lGeoIP -lpthread UTF-8 support : yes Dynamic buffer : no Geolocation : GeoIP Legacy Storage method : In-Memory with On-Disk Persitance Storage TLS/SSL : no Bugs : [email protected]

makeコマンドを実行して、GoAccessのインストールに必要なmakefileをビルドします。

  1. make

最後に、以前に作成したmakefileを使用してGoAccessをシステムにインストールします。

  1. sudo make install

次のコマンドを実行して、プログラムが正常にインストールされたことを確認します。

  1. goaccess --version

次の出力が表示されます。

Output
GoAccess - 1.4. For more details visit: http://goaccess.io Copyright (C) 2009-2020 by Gerardo Orellana Build configure arguments: --enable-utf8 --enable-geoip=legacy

方法2—公式のGoAccessリポジトリを使用する

GoAccessをインストールする別の方法は、プログラムの公式Ubuntuリポジトリを使用することです。 この方法は、新しいリリースごとにソースからコンパイルしなくても、システムのアップグレード中に自動的に新しいバージョンに更新されるようにする場合に適しています。 最初にリポジトリをサーバーに追加する必要があります。

  1. echo "deb http://deb.goaccess.io/ $(lsb_release -cs) main" | sudo tee -a /etc/apt/sources.list.d/goaccess.list

最初にディストリビューションのリリース名を取得し、それをteeにパイプします。これにより、ファイル/etc/apt/sources.list.d/goaccess.listに追加されます。

ソースリストにリポジトリが含まれているので、GPGキーをダウンロードして署名を確認できます。

  1. wget -O - https://deb.goaccess.io/gnugpg.key | sudo apt-key --keyring /etc/apt/trusted.gpg.d/goaccess.gpg add -

次に、次のコマンドを使用してパッケージデータベースを更新します。

  1. sudo apt update

最後に、GoAccessをインストールします。

  1. sudo apt install goaccess

これで、GoAccessがUbuntuサーバーにインストールされました。 次のステップでは、構成ファイルにアクセスして編集し、プログラムの実行方法を変更できるようにします。

ステップ2—GoAccess構成の編集

GoAccessには、プログラムの動作を永続的に変更できる構成ファイルが付属しています。 このファイルを編集して、時刻、日付、およびログ形式を指定し、GoAccessがサーバーログの解析方法を認識できるようにします。

構成ファイルは、~/.goaccessrcまたは%sysconfdir%/goaccess.confにあります。ここで、%sysconfdir%/etc/,/usr/etc/または/usr/local/etc/のいずれかです。 構成ファイルがサーバー上のどこにあるかを確認するには、次のコマンドを実行します。

  1. goaccess --dcf
Sample output
/etc/goaccess/goaccess.conf

nanoを使用してこの構成ファイルを編集します。

  1. sudo nano /etc/goaccess/goaccess.conf

注:このファイルがサーバーに存在しない場合は、必ず最初に作成し、GitHubgoaccess.confファイルの内容を入力してください。

ファイル内の行の多くはコメント化されています。 オプションを有効にするには、その前にある最初の#文字を削除します。 まず、Apacheのtime-format設定を有効にしてみましょう。 この設定は、log-format時間を指定し、GoAccessがサポートされているフォーマット基準を満たすプレーンテキストのApacheログファイルを解析できるようにします。

/etc/goaccess/goaccess.conf
# The following time format works with any of the
# Apache/NGINX's log formats below.
#
time-format %H:%M:%S

次に、log-formatの日付を指定するApachedate-format設定のコメントを解除します。

/etc/goaccess/goaccess.conf
# The following date format works with any of the
# Apache/NGINX's log formats below.
#
date-format %d/%b/%Y

最後に、log-format設定のコメントを解除します。 いくつかの行でこの設定が変更され、コメントを解除する正確な行は、Webサーバーの設定方法によって異なります。 非仮想ホストを設定している場合は、次のlog-format行のコメントを解除します。

/etc/goaccess/goaccess.conf
# NCSA Combined Log Format
log-format %h %^[%d:%t %^] "%r" %s %b "%R" "%u"

それ以外の場合、仮想ホストを設定している場合は、代わりに次の行のコメントを解除してください。

/etc/goaccess/goaccess.conf
# NCSA Combined Log Format with Virtual Host
log-format %v:%^ %h %^[%d:%t %^] "%r" %s %b "%R" "%u"

この時点で、ファイルを保存してエディターを終了できます。 これで、GoAccessプログラムを実行し、いくつかのApacheプレーンテキストログファイルを分析する準備が整いました。

ステップ3—GoAccessを使用したApacheのログファイルへのアクセス

Apacheサーバーは、Webサイトへのアクセスを許可し、すべての着信HTTPトラフィックのアクセスログを保持します。 これらのレコードまたはログファイルはシステムに保存され、Webサイトの使用状況とオーディエンスに関する貴重な情報源になります。

Ubuntuでは、Apacheログファイルはデフォルトで/var/log/apache2ディレクトリに保存されます。 このディレクトリの内容を調べるには、次のコマンドを実行します。

  1. sudo ls /var/log/apache2
Sample output
access.log error.log other_vhosts_access.log

サーバーが長期間稼働している場合、ログローテーションの結果として、このディレクトリに過去のログファイルを含む圧縮された.gzファイルが見つかる場合があります。 最新のログはaccess.logファイルに保存されます。 仮想ホストを備えたWebサーバーの場合、各ホストのログファイルを見つけるために、cd/apache2ディレクトリ内からサブディレクトリに移動する必要がある場合があります。

先に進み、Apacheアクセスログに対してGoAccessを実行して、Webサーバーによって処理されているトラフィックのタイプについての洞察を得ましょう。 次のコマンドを実行して、GoAccessでaccess.logファイルを分析します。

  1. sudo goaccess /var/log/apache2/access.log

これにより、GoAccessコマンドラインダッシュボードが起動します。

GoAccess command-line dashboard interface

注:代わりにログ形式の構成プロンプトが表示された場合は、前の手順でGoAccess構成ファイルに加えた変更が有効になっていないことを意味します。 構成ファイルが適切な場所にあり、必要な設定のコメントを外していることを確認してください。

前述のように、長時間実行されるWebサーバーに複数の圧縮ログファイルがある場合があります。 これらすべてのファイルを最初に抽出せずにGoAccessを実行するには、zcatコマンドの出力をgoaccessにパイプします。

  1. zcat /var/log/apache2/access.log.*.gz | goaccess -a

次に、キーボードショートカットを使用してダッシュボードインターフェイスをすばやくナビゲートする方法を学習します。

ステップ4—ターミナルダッシュボードのナビゲート

ダッシュボードの上部には、いくつかの主要なメトリックの要約があります。 これには、レポート期間の合計リクエスト数、一意の訪問者、ログサイズ、404が見つからないエラー、リクエストされたファイル、解析されたログファイルのサイズ、HTTPリファラー、ログソースの名前、ログファイルの処理にかかった時間などが含まれます。

Summary of dashboard metrics

上部のパネルの下に、前述のメトリックおよびGoAccessでサポートされているその他のデータポイントの詳細を提供する、使用可能なすべてのモジュールがあります。 インターフェイスをナビゲートするには、次のキーボードショートカットを使用します。

  • TABは使用可能なモジュールを前方に移動し、SHIFT+TABは後方に移動します。
  • F5ダッシュボードを更新します。
  • gはダッシュボード画面の上部に移動し、Gはダッシュボードの最後のアイテムに移動します。
  • oまたはENTERを選択して、選択したモジュールを展開します。
  • jおよびkを使用して、アクティブなモジュール内を上下にスクロールします。
  • sは、アクティブなモジュールのソートオプションを表示します。
  • /はすべてのモジュールを検索し、nは次の一致に移動します。
  • 0-9およびSHIFT+0を使用すると、それぞれの番号の付いたモジュールをすばやくアクティブ化できます。
  • ?をクリックすると、クイックヘルプダイアログが表示されます。
  • qでプログラムを終了します。

次に、ダッシュボードで使用可能な各モジュールを調べてみましょう。 それぞれに番号とタイトルがあり、存在する行の総数が示されます。 >文字はアクティブなパネルを示し、ダッシュボードの上部にも反映されます。

Active GoAccess panel demonstration

各パネルの簡単な説明は次のとおりです。 以下の各セクションは、プログラムのパネル番号とタイトルに対応しています。

1 —1日あたりのユニークな訪問者

このパネルには、報告された各日付のヒット数、一意の訪問者、および累積帯域幅が表示されます。 一意の訪問者は、同じIPアドレス、日付、およびユーザーエージェントを持つ訪問者と見なされます。 デフォルトでは、Webクローラーとスパイダーが含まれています。

Unique visitors per day panel

2-要求されたファイル(URL)

このパネルは、Webサーバー上で最も要求の多い非静的ファイルに関する統計を提供します。 リクエストパス、HTTPプロトコルとメソッド、一意の訪問者、ヒット数、累積帯域幅が表示されます。

Requested files

3 —静的リクエスト

このパネルは、前のパネルと同じメトリックを提供しますが、画像、CSS、JavaScript、またはその他のファイルタイプなどの静的ファイル用です。

4 —見つからないURL(404)

このパネルには、2と3で説明したものと同じメトリックが表示されますが、サーバーで見つからなかったパス(404)が表示されます。

5 —訪問者のホスト名とIP

このパネルには、Webサーバーに接続するホストに関する詳細情報が表示されます。 それらのIPアドレス、訪問数、および消費された帯域幅の量を見つけることができます。 これは、誰がすべての帯域幅を使い果たしているかを特定し、必要に応じてそれらをブロックするための優れた方法です。

Visitor hostnames and IPs

oを押してこのパネルを展開すると、出身国、都市、逆引きDNSルックアップ結果などの各ホストに関する詳細情報が表示されます。

Vistor hostnames and IPs expanded

6 —オペレーティングシステム

このパネルは、ホストがWebサーバーに接続するために使用するさまざまなオペレーティングシステムを報告します。 このパネルを展開すると、各オペレーティングシステムの特定のバージョンが表示されます。

Operating systems

7 —ブラウザ

前のパネルと同様に、これはWebサーバーへの各固有の訪問者が使用したブラウザーを報告し、展開された各ブラウザーの特定のバージョンを一覧表示します。

Browsers

8 —時間分布

ここでは、ヒット数、ユニークビジター、および消費された帯域幅に関する1時間ごとのレポートが表示されます。 これは、サーバーのトラフィックのピーク期間を見つけるのに最適な方法です。

Time distribution panel

9 —仮想ホスト

このパネルには、ログファイルから解析された仮想ホストが表示されます。 %vがログ形式の構成に含まれている場合にのみアクティブになります。

10 —リファラーURL

訪問しているホストをWebサーバーに参照したURLがここに反映されます。 このパネルはデフォルトで無効になっており、GoAccess構成ファイルで強調表示されているREFERRERS行をコメントアウトすることによってのみ有効にできます。

/etc/goaccess/goaccess.conf
#ignore-panel VISIT_TIMES
#ignore-panel VIRTUAL_HOSTS
#ignore-panel REFERRERS
#ignore-panel REFERRING_SITES

Referrer URLs panel

11 —参照サイト

このパネルには、参照元ホストのIPアドレスが表示されますが、URL全体は表示されません。

12 —キーフレーズ

ここでは、あなたのウェブサイトにつながったグーグル検索、グーグルキャッシュ、グーグル翻訳で使用されたキーワードが報告されます。 このパネルもデフォルトで無効になっており、設定で有効にする必要があります。

/etc/goaccess/goaccess.conf
#ignore-panel REFERRERS
#ignore-panel REFERRING_SITES
#ignore-panel KEYPHRASES
#ignore-panel STATUS_CODES

13 —HTTPステータスコード

このパネルには、リクエストに応答するときにWebサーバーから返されるHTTPステータスコードの全体的な統計が反映されます。 パネルを展開すると、各ステータスコードの集計統計が表示されます。

HTTP status codes panel

14 —リモートユーザー(HTTP認証)

このパネルには、HTTP認証によって決定された、サーバー上のドキュメントを要求しているユーザーのユーザーIDが表示されます。 パスワードで保護されていないドキュメントの場合、この部分は-になります。 このパネルは、%eがログ形式の構成の一部である場合にのみ有効になることに注意してください。

15 —キャッシュステータス

このパネルでは、リクエストがキャッシュされ、キャッシュから提供されているかどうかを判断できます。 %Cがログ形式変数の一部であり、ステータスがMISSBYPASSEXPIRED [X124X)の場合に有効になります。 ]、UPDATINGREVALIDATED、またはHIT

16 —ジオロケーション

このパネルは、IPアドレスの訪問から得られた地理的位置の要約を提供します。 このパネルを展開すると、出身国ごとに集計された統計が表示されます。

Geo location panel

ダッシュボードで使用可能なパネルを確認したので、さまざまな形式でレポートを生成します。

ステップ5—レポートの生成

GoAccessでは、ターミナルにデータを表示するだけでなく、HTML、JSON、またはCSVレポートを生成することもできます。 このセクションのコマンドを実行する前に、ホームディレクトリにいることを確認してください。

  1. cd ~

レポートを静的HTMLとして出力するには、-oフラグの引数としてHTMLファイルを指定します。 このフラグは、.jsonまたは.csvで終わるファイル名も受け入れます。

  1. sudo goaccess /var/log/apache2/access.log -o stats.html

stats.htmlファイルがユーザーディレクトリに表示されます。

  1. ls
Output
goaccess-1.4 goaccess-1.4.tar.gz snap stats.html

scpを使用して、このファイルをローカルマシンのユーザーディレクトリにコピーできます。 このコマンドは、リモートサーバーではなく、ローカルマシンから実行します。

  1. scp user@your_server_ip:stats.html ~/stats.html

ファイルがコピーされたら、macOSでopenコマンドを使用してブラウザで開くことができます。

  1. open ~/stats.html

または、ローカルマシンでLinuxディストリビューションを使用している場合:

  1. xdg-open ~/stats.html

HTML report in Firefox

HTMLレポートを生成し、これをブラウザで表示しました。

結論

この記事では、GoAccessコマンドラインツールについて説明し、サーバーログの分析に使用する方法について説明しました。 GoAccessをApacheログで使用する方法のみを検討しましたが、このツールは、Nginx、Amazon S3、Elastic Load Balancing、CloudFrontなどの他のログ形式もサポートしています。

完全なGoAccessドキュメントを確認するか、端末でman goaccessを実行できます。