GoAccessは、オープンソースのWeb分析アプリケーションです。ターミナルで実行できること、Webアプリケーション(htmlへ書き出し)でも実行できます。一番のウリはサーバーに設置して、リアルタイムの分析がおこなえることでしょう。
GoAccessはサーバーのみならず、マルチプラットフォームでも動作するアプリケーションです。macOSにも対応していました。ただ、Windowsはどうなのか試していませんが、少し難しいみたいです。(Cygwinの環境)
Windowsのユーザーでも、Raspberry Piをお持ちなら試してみてください。このラズパイダの生ログファイルを使い分析してみて、少しハマった箇所もご紹介します。
既存のWebサイトのログを分析
今回、サーバーに設置するのはなく、入手したログファイルを分析させる目的で、GoAccessを利用することにしました。
サーバーに設置すればリアルタイムで分析が可能です。ただ、セキュリティ的に公開はヤダ。
レンタルサーバーからログをダウンロードして指定しています。
生ログが大きくなる
「ラズパイダ」のようなサイトを数年も運営していると、次第にログファイルが肥大化してきました。アクセスいただかないとなりませんから嬉しいことでもあるんですけどね。実際には余計なログが多い。
ログは主にエラーを調べたり、不審なアクセスを見つけたりできるので、定期的に見ています。
しかし、ファイルサイズが大きくなると、そもそもファイルを開くことも難しくなります。行数が多くなれば、該当の箇所を見つけるのも一苦労です。
これまでは単純にテキストエディタ上で、正規表現のgrep検索などで対応していましたが、面倒になってきました。
GoAccessで細かく読み取る前に、先ずはザックリと把握したい人にとって分かりやすい結果が得られます。
今回の生データはエックスサーバーで出力したアクセスログになります。同じデータであれば、記事の通りでエラーも避けられると思います。
インストールと設定
GoAccessの導入は、Raspberry Pi にインストールしたUbuntuやRaspberry Pi OSでも可能です。Windowsユーザーは同じにはできないようなので、Raspberry Pi にインストールしてみてください。
Debian環境でのインストール方法
GoACCESSのサイトにはOSやプラットフォーム別にインストール方法が載っていました。Debianベースの方法は、gpg鍵とソースを追加します。
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] https://deb.goaccess.io/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/goaccess.list
sudo apt update
sudo apt install goaccess
他のOSや環境はダウンロードページを参照してください。
ターミナルで実行
インストールが終われば、いきなりターミナルで実行が可能です。試しに実行してみてください。
logファイルは別に用意してくださいね。
goaccess ログファイル名

一般的なフォーマットが用意されています。Apacheサーバーなどは一番上でOKです。ただ、そのままではエラーも出るでしょう。
エラーが出た場合は、恐らくデータのフォーマットが合っていないと思われます。

一旦、q で戻って、フォーマットの形式を修正します。

cで編集できます。書き換えたら Enterで確定します。そしてもう一度Enterで実行。

書き換えた箇所は、Log Formatの最初、%v:%^ %h 〜
%v %h 〜
のように、:%^
を削除しました。データセットみたいなもので、どういう順番になっているか指定するわけです。
この%から続く変数は、GoACCESSのサイトに載っています。
データフォーマット例
当サイトのエックスサーバーのログを例にご説明します。

黒く塗っているのはIPアドレスです。(どこかの政府みたい)
既存のフォーマットでは、ホスト名のあとに :%^
が記載されていました。恐らくポートが指定されたIPアドレスの形式です。私のログにはないのと、%^
の分だけフォーマットがズレてしまい起こりました。
エックスサーバーの場合
%v %h %^[%d:%t %^] "%r" %s %b "%R" "%u"
ロリポップ!レンタルサーバーの場合
%h %^[%d:%t %^] "%r" %s %b "%R" "%u"
この辺は、ご自分の環境に合わせてください。
htmlで出力
ターミナルでもグラフィカルに表現されていましたが、HTML形式で出力すると、より表現豊かに見られます。

htmlで出力するには、予めconfファイルを修正しておきます。
実行は、-oオプションでhtmlの名前とパスを指定するだけです。(今回はrepo.html)
goaccess アクセスログ -o repo.html
ただ、このままだとエラーが出ます。以下のconfファイルを修正して実行してください。
※Raspberry Pi OSだと日本語が化けてしまった。
confファイルを修正
Raspberry Pi OSでは、confファイルの場所は以下でした。
sudo nano /etc/goaccess.conf
以下、時間と日付の箇所にあるコメントアウトを外します。(行頭の#を削除)
time-format %H:%M:%S date-format %d/%b/%Y
これはいくつかフォーマット形式があります。自分のログファイルのフォーマットに合わせてください。
ログフォーマットも設定する
テキストベースで指定したように、ログの形式を設定しておきます。
私はバーチャルホストの箇所を変更しました。
# NCSA Combined Log Format with Virtual Host
log-format %v %h %^[%d:%t %^] "%r" %s %b "%R" "%u"
GoAccessの実行コマンドで、オプションを指定すればconfに設定しなくても実行できます。しかし、毎回記述するのは面倒なので、設定しておきました。
これでhtmlが作成されるので、それをダブルクリックでブラウザ画面に表示されます。
goaccess アクセスログ -o repo.html
macOSの場合
MacのバージョンはBig Surで試しました。
どうも日付と日時のフォーマットでもエラーが出るので、Debian環境とは少しコマンドが異なります。brewだからでしょうか。
インストール
macOSならコマンドからbrewで可能です。
brew install goaccess
confファイルを修正
macOSだとconfの場所がRaspberry Pi OSとは異なります。
sudo nano /usr/local/etc/goaccess/goaccess.conf
コメントアウトを外す。(行頭の#を削除)
time-format %H:%M:%S date-format %d/%b/%Y
ログのフォーマットを以下に変更する。(エックスサーバーの場合)
# NCSA Combined Log Format with Virtual Host
log-format %v %h %^[%d:%t %^] "%r" %s %b "%R" "%u"
これら3つの修正はRaspberry Pi OSの環境と同じです。
最後、実行するコマンドだけ上手くいかなかったのでGoAccessのサイトで調べたら載っていました。
LC_TIME="en_US.UTF-8" bash -c 'goaccess raspida.com.access_log -o test.html'
LC_TIMEをEnglishに指定してあげると上手くいくようです。
Raspberry Pi だと遅い
流石にRaspberry Pi OSだとパースする速度はとても遅かったです。
- Raspberry Pi OS 1,053/s
- macOS 42,209/s
全然違いますね!
今回の生ログのサイズは、86,000行くらいの24MBほどでした。Raspberry Pi OSだと単純計算で、約80秒かかります。macOSの場合は2秒です。
少しかったるい感じですけど、ログを投げてあげて実行させれば気になりません。
ダウンロードしたデータをRaspberry Pi側にコピー、定期的にパースして、実行して保存しておく。なんてことはシェルスクリプトやCronで可能です。
サーバー側にGoAccessを設置しなくても、メインのマシンとは切り離して、いつでもアクセスログを解析させておくというのは便利ですね。
GoAccessのローカル利用ネタでした。オプションなどの機能がとても豊富なので、まだまだ使いこなせません。半自動化して時間を節約したいと思います。
特にWindowsユーザーは、Raspberry Piで環境を構築してみてはいかがでしょうか。

しかし、クローラーが多過ぎ!