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

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

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

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

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

黒く塗っているのはIPアドレスです。(どこかの政府みたい)
既存のフォーマットでは、ホスト名のあとに :%^ が記載されていました。恐らくポートが指定されたIPアドレスの形式です。私のログにはないのと、%^の分だけフォーマットがズレてしまい起こりました。
エックスサーバーの場合
%v %h %^[%d:%t %^] “%r” %s %b “%R” “%u”
いつだったか変更になったので、2025年現在だと次のログフォーマットで通りました。
log-format %v %h %u %^[%d:%t %^] "%r" %s %b "%R" "%{User-Agent}i"
日時のフォーマットも確認します。エックスサーバーでは次ならOKです。
time-format %H:%M:%S
date-format %d/%b/%Y
参考:
%a アクセス元のIPアドレス
%A サーバ(Apache)のIPアドレス
%B 送信されたバイト数(ヘッダーは含まず)
%b 送信されたバイト数(ヘッダーは含まず)。0バイトの時は「-」
%f リクエストされたファイル名
%h リモートホスト名
%H リクエストのプロトコル名
%l クライアントの識別子
%m リクエストのメソッド名
%q リクエストに含まれるクエリー文字列。空白以外は「?」が付く。
%r リクエストの最初の行の値
%s レスポンスステータス
%>S 最後のレスポンスのステータス
%t 時刻
%T 処理にかかった時間
%u 認証ユーザー名
%U リクエストのURLパス
%v リクエストに対するバーチャルホスト名
%V UseCanonicalNameによるサーバ名
%X 接続ステータス
%{クッキー名}C リクエストに含まれるクッキーの値
%{環境変数名}e 環境変数名の値
%{ヘッダー名}i リクエストに含まれるヘッダー名の値
%{ヘッダー名}o レスポンスに含まれるヘッダー名の値
%{メモ}n モジュールから渡されるメモの値
%{フォーマット}t フォーマットされた時刻
この辺は、サーバーのページなどを確認して環境に合わせてください。
htmlで出力
ターミナルでもグラフィカルに表現されていましたが、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
# Xserver
log-format %v %h %u %^[%d:%t %^] "%r" %s %b "%R" "%{User-Agent}i"
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
Homebrewでインストールしたら以下。
/opt/homebrew/Cellar/goaccess/1.9.4/etc/goaccess/goaccess.conf
コメントアウトを外す。(行頭の#を削除)
time-format %H:%M:%S
date-format %d/%b/%Y
ログのフォーマットを以下に変更する。(エックスサーバーの場合)
# NCSA Combined Log Format with Virtual Host
# Xserver
log-format %v %h %u %^[%d:%t %^] "%r" %s %b "%R" "%{User-Agent}i"
これら3つの修正はRaspberry Pi OSの環境と同じです。
最後、実行するコマンドだけ上手くいかなかったのでGoAccessのサイトで調べたら載っていました。
LC_TIME="en_US.UTF-8" bash -c 'goaccess raspida.com.access_log -o test.html'
LC_TIMEをEnglishに指定してあげると上手くいくようです。
MacではAutomatorで
Macの場合はAutomatorを使っています。フォルダにログファイルを放り込んだら、GoAccessを実行させて同じフォルダにhtmlファイルを出力させ、ログファイルはゴミ箱へ削除するようにしています。
LC_TIME="en_US.UTF-8" /bin/zsh -c '/opt/homebrew/bin/goaccess /Users/ユーザー名/アクセス解析/raspida.com.access_log -o /Users/ユーザー名/アクセス解析/raspida_`date +%Y%m%d%H%M`.html'
ファイルへのパスは絶対パスです。
ファイル名はraspida_の後にタイムスタンプを付けたファイル名にしています。括っているのはバッククォートです。
`date +%Y%m%d%H%M`.html
最終的にはHTMLファイルを任意で開く形で、半自動ですが便利ですね。
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で環境を構築してみてはいかがでしょうか。
Rブラック- 参考:https://goaccess.io/download
- github:https://github.com/allinurl/goaccess



