\ 年に1度のブラックフライデーセール! /

Raspberry Pi でもGoACCESSでログを解析する

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や環境はダウンロードページを参照してください。

ターミナルで実行

インストールが終われば、いきなりターミナルで実行が可能です。試しに実行してみてください。

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"

ロリポップ!レンタルサーバーの場合

%h %^[%d:%t %^] "%r" %s %b "%R" "%u"

この辺は、ご自分の環境に合わせてください。

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
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に指定してあげると上手くいくようです。

MacではAutomatorで

Macの場合はAutomatorを使っています。フォルダにログファイルを放り込んだら、GoAccessを実行させて同じフォルダにhtmlファイルを出力させ、ログファイルはゴミ箱へ削除するようにしています。

LC_TIME="en_US.UTF-8" /bin/zsh -c '/usr/local/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ブラック

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

シェアする
  • URLをコピーしました!

Raspberry Pi 4、400、Zero2W

販売価格は、必ず販売サイトで確認してください。

\年に1度のブラックフライデーセール!/
Amazonで詳しくみる
\年に1度のブラックフライデーセール!/
Amazonで詳しくみる
RaspberryPi
¥15,987 (2022/11/29 14:24時点 | Amazon調べ)
\年に1度のブラックフライデーセール!/
Amazonで詳しくみる

この記事のコメント(承認後に公開)

コメントする

コメントは日本語で入力してください。名前は表示されます。メールアドレスは表示されません。

CAPTCHA

この記事の主な流れ