スポンサーリンク

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

goaccess-title公式Raspberry Pi OS
公式Raspberry Pi OS

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や環境はダウンロードページを参照してください(https://goaccess.io/download

ターミナルで実行

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

logファイルは別に用意してくださいね。

goaccess ログファイル名
スペースキーでチェックいれてエンターキー

一般的なフォーマットが用意されています。Apacheサーバーなどは一番上でOKです。ただ、そのままではエラーも出るでしょう。

エラーが出た場合は、恐らくデータのフォーマットが合っていないと思われます。

Format Errors

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

一部修正しました

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

Enterで実行するとParsing開始

書き換えた箇所は、Log Formatの最初、%v:%^ %h 〜 %v %h 〜のように、:%^を削除しました。データセットみたいなもので、どういう順番になっているか指定するわけです。

この%から続く変数は、GoACCESSのサイトに載っています。(manページ

データフォーマット例

当サイトのエックスサーバーのログを例にご説明します。

黒く塗っているのはIPアドレスです。(どこかの政府みたい)

既存のフォーマットでは、ホスト名のあとに :%^ が記載されていました。恐らくポートが指定されたIPアドレスの形式です。私のログにはないのと、%^の分だけフォーマットがズレてしまい起こりました。

恐らく、エックスサーバーの生ログであれば、以下のフォーマット形式でOKです。
%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

参考https://goaccess.io/man#custom-log

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で環境を構築してみてはいかがでしょうか。

Piブラック
Piブラック

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

\ 初めてのRaspberry Pi はセットで始めよう /
NewLife NewDesingストア

2台目にも最適な最小基本セット!

\ 初めてのRaspberry Pi はセットで始めよう /
NewLife NewDesingストア

2台目にも最適な最小基本セット!

スポンサーリンク
ラズパイダ

コメント ご感想をお願いします。

タイトルとURLをコピーしました