もた日記

くだらないことを真面目にやる

Linuxメモ : GoAccessでリアルタイムにWebログ解析

GoAccess

GoAccess - Visual Web Log Analyzer(公式ページ)

github.com

GoAccessはリアルタイムにWebログを解析するツール(GoAccessという名前だがGoではなくCで書かれているようだ)。インストールすれば複雑な設定不要で利用できるので手軽に解析したいときに便利。ここにHTML版デモページがあるので解析項目等を確認できる。

解析可能なログフォーマットの一覧は下記。

  • Amazon CloudFront (Download Distribution).
  • Amazon Simple Storage Service (S3)
  • AWS Elastic Load Balancing
  • Combined Log Format (XLF/ELF) Apache | Nginx
  • Common Log Format (CLF) Apache
  • Google Cloud Storage.
  • Apache virtual hosts
  • Squid Native Format.
  • W3C format (IIS).

f:id:wonder-wall:20170827163215p:plain


インストール

CentOSの場合は下記コマンドを実行。

$ sudo yum install goaccess

Ubuntuの場合は下記コマンドを実行。

$ sudo apt-get install goaccess

macOSの場合はbrewでインストールできる。

$ brew install goaccess

その他のインストール方法については公式ページを参照。

使い方:ターミナル

基本

基本的な使い方はgoaccessに続けてログファイルを指定する。

$ goaccess access.log

起動するとログフォーマットの設定ダイアログが表示されるので、Spaceキーでフォーマットを指定してエンターキーを押す(フォーマットが違う場合はFormat Errorsになる)。

f:id:wonder-wall:20170827162548p:plain

解析が完了するとメインウィンドウが表示される。画面上部に全体の解析結果、その下に各項目の解析結果が表示される。

パネル(各項目の解析結果)の一覧は下記。デフォルトで無効になっている項目は/etc/goaccess.conf(環境によりパスは違うかも)のignore-panel設定で変更できる。

  1. Unique visitors per day - Including spiders
  2. Requested Files (URLs)
  3. Static Requests
  4. Not Found URLs (404s)
  5. Visitor Hostnames and IPs
  6. Operating Systems
  7. Browsers
  8. Time Distribution
  9. Virtual Hosts
  10. Referrers (デフォルトでは無効)
  11. Referring Sites
  12. Keyphrases (デフォルトでは無効)
  13. HTTP Status Codes

tail -f

tail -fの出力を解析することも可能。

$ tail -f access.log | goaccess -

下記エラーが表示される場合は、

GoAccess - version 1.2 - Jul 23 2017 03:05:48
Config file: /etc/goaccess.conf

Fatal error has occurred
Error occured at: src/goaccess.c - set_curses - 1394
No time format was found on your conf file.

/etc/goaccess.confの下記項目を対象とするフォーマットに合わせて設定する。

time-format %H:%M:%S

date-format %d/%b/%Y

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

f:id:wonder-wall:20170827171439g:plain

複数ファイル

以下のように複数ファイルを対象とすることも可能。

$ goaccess access.log access.log.1

$ cat access.log.2 | goaccess access.log access.log.1 -


キーバインド

キー 説明
F1 or h or ? ヘルプ
F5 メインウィンドウの再描画
q 現在のウィンドウを閉じる。プログラムの終了
o or Enter アクティブパネルを開く(詳細表示)
0-9 and Shift + 0 番号のパネルへ移動
j 開いたパネル内で下に移動
k 開いたパネル内で上に移動
c カラースキーム変更
Tab 次のパネルに移動
Shist + Tab 前のパネルに移動
Ctrl + f 開いたパネル内で次画面にスクロール
Ctrl + b 開いたパネル内で前画面にスクロール
s パネルのソート画面表示
/ 検索(正規表現可)
n 次の検索結果に移動
g 先頭に移動
G 末尾に移動

Tabでパネルを選んで、

f:id:wonder-wall:20170827171928p:plain

Enterキーで詳細を表示。

f:id:wonder-wall:20170827171939p:plain

sでソート画面を表示。

f:id:wonder-wall:20170827171950p:plain

cでカラースキーム変更画面を表示。

f:id:wonder-wall:20170827172002p:plain

使い方:HTML版

基本

デモページのようにHTML出力する場合は下記コマンドを実行。

$ goaccess access.log -a -o report.html

f:id:wonder-wall:20170827172750p:plain

なお、jsonやcsvとして出力することも可能。

$ goaccess access.log -a -o json > report.json
$ goaccess access.log --no-csv-summary -o csv > report.csv


リアルタイム解析

リアルタイムにHTML出力する場合は--real-time-htmlを指定する。

$ goaccess access.log -o report.html --real-time-html

f:id:wonder-wall:20170827173744g:plain

参考:ダミーログ生成

github.com

適当なログがなかったので今回はapache_log_genを使用してダミーログを生成した。

$ gem install apache-loggen
$ apache-loggen --progress --rate 10 --limit 10000 out10000.log # 1秒あたり10レコード、最大10000レコード生成