今回はWindowsでNginxのログを可読性を挙げて解析しやすくためGoAccessを導入する方法を紹介していこうと思います。(公式サイト)
GoAccessを使ったら普段見ずらいAccess.logを分析し、綺麗な可視化結果を表示してくれる。
GoAccessはLinux向けなのでWindowsでは本来使えなくて非常に残念ですが、「CowAxess(無料)」というラッパーを使えば、Windowsでも簡単に使用できる!
たまたま仕事でうまく出来たので、手順を少し整理してみんなに紹介したいと思います。
CowAxessのインストール(公式サイト)
- CowAxessの公式サイトでWindows用インストラクターをダウンロードしてインストールする。(ダウンロードページ)
※デフォルトで「C:\cowaxess_x64」にインストールしてくれる。 - 「C:\cowaxess_x64」配下にある「cowaxess.cmd」ダブルクリックで起動完了。(Linuxのような仮環境を用意してくれた)
- 一旦OKです、次は分析前の準備作業を行う。
Nginxのアクセスログの出力フォーマットを確認する
フォーマットの設定はサーバより違いますので、下記を参考して自分で確認してください。
Ngnix設定ファイル格納場所:/etc/nginx/nginx.conf (デフォルト)
「log_format」の部分を確認してください。
例:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
NginxフォーマットからGoAccessフォーマットに変換する
アクセスログを正確に分析させるため、NginxフォーマットからGoAccess識別できる形式に変換必要です。
手動で翻訳しても構いませんが、ツール「nginx2goaccess.sh」を使ったら簡単に変換してくれる。
ツールを使う場合、GitHubからダウンロードしてください。
先程確認したNginxのログフォーマットを一行にまとめ、ツール「nginx2goaccess.sh」で形式変換する(Linux仮環境で実行)。
例:nginx2goaccess.sh '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for"'
例の出力結果
time-format %T date-format %d/%b/%Y log_format %h - %^ [%d:%t %^] "%r" %s %b "%R" "%u" "%^"
- 変換後フォーマットをこのまま「C:\cowaxess_x64」配下に任意ファイル名で保存する。
例:C:\cowaxess_x64\nginxlog.conf
goaccessコマンドでログを分析させる
ログファイル(access.log)と上記フォマードファイル(nginxlog.conf)を引数として、コマンド「goaccess」を実行する(Linux仮環境で実行)
結果の表示は2種類あります。
① コマンドプロンプト画面に表示
goaccess -f access.log -p nginxlog.conf
② HTMLファイルに出力
goaccess -f access.log -p nginxlog.conf -a -o output.html
注意、ログの日付の部分が英語の月になる(例、12/May/2021)かつ Windowsの言語は英語でない場合、上記コマンドに加えて、「LC_TIME="en_US.UTF-8"」と「--log-format=COMBINED」を付けってください。
例:
LC_TIME="en_US.UTF-8" bash -c 'goaccess -f access.log -p nginxlog.conf --log-format=COMBINED -a -o output.html'
HTMLファイルの表示例
きれいし、分かりやすく色んな情報を纏めてくれる。
さらに、テーマや各種表示設定も制御可能です。
ぜひ、みなさんも使って見てください。