アクセス解析 GoAccess v1.3で解析結果が表示されない

アクセス解析もオープンソースのやつがいくつもバンバンでてきているので嬉しい限り。

Piwik(matomo)はサーバーログ型で回すと挙動不審で永遠に解析段階から進まないことがあったりでNginxやOpenLiteSpeedのログで使用する分にはちょっと不安定で、AwStatはサーバーログ型で完璧に動作するんだけどもデフォの解析項目の少なさが目立つ。

javascript稼働型はリアルタイムのアクセスとれるけど、最近はブラウザ側のセキュリティ機能でデフォルトブロックされてしまうような状態で使い物にならない。

色々探しているとサーバーログ型のアクセス解析として、GoAccessが人気になっている模様で、
バージョンはちょい古いけどOpenSUSEの公式リリースにGoAccessが入ってたので使ってみることに。

ためしにログを解析させてみるとすっごい動作早い!

静的HTMLページを単独で動作するように出力してくれる!

そしていざアクセスしてみると・・・枠だけの空っぽのページが表示される。

調査したところ、公式リリースであるはずの GoAccess 1.3 にバグが潜んでいる
例えば、

goaccess /<ログ庫>/access.log -o /<出力先>/index.html -p /etc/goaccess/goaccess.conf

上にしてログを解析させると、エラーなしでindex.htmlを出力先に吐いてくれる。
その中にはちゃんと結果が出力されていて、パースエラーなどが出ているわけでもない

が、ブラウザでアクセスしても枠だけ表示されて、肝心のグラフなどが表示されない

GoAccess解析失敗画像
▲枠だけが表示されて解析結果のグラフが表示されない

で、上のほうのTotal Requestsとか見る限り、データは正常に解析できているがグラフが表示できていない模様なのでjavascriptのアラートを確認すると、案の定、

GoAccessのjavascriptエラー画像
▲javascriptで例外が発生して処理がとまってる

つまり、データ出力はうまくいってるけど、何らかの原因でjavascriptが停止してグラフ描画処理まで辿り着いていないということになる。ソースコード見ると、見るからに怪しいやつ発見。

原因特定画像
▲javascriptが止まる原因

なぜか知らないけれど、scriptの閉じタグの前に変なのが出力されている。

これはバグレポート済み且つFix済みであり、既知の事象っぽい。
じゃあなんでOpenSUSEの公式リリースはその情報書いてないの・・・・?

バージョンアップせずに無理矢理解消する方法

出力されたHTMLファイルを編集して、「j!」の部分を消せばいい!それだけ!
コマンドで書くとこういう感じ。

sed -i -e 's/j!<\/script>/<\/script>/g' /<出力先>/index.html

出力とセットで実行するんであれば「&&」でコマンドを連結して、「HTMLの出力が終わったらsedで内容を置き換える」という風にすればいい。

oaccess /<ログ庫>/access.log -o /<出力先>/index.html -p /etc/goaccess/goaccess.conf && sed -i -e 's/j!<\/script>/<\/script>/g' /<出力先>/index.html

これならCronにも仕込めるし簡単。

結果は一目瞭然。

GoAccess解析結果画像
▲これが本来の表示

OpenSUSE使ってて、GoAccess使いたくて、OpenSUSE公式からとってくる人ってそんなにいないと思うけど、現に私が引っ掛かったので後続のためになればと思う。

コメントを残す