GoAccessを自分のサーバに導入する際の設定方法など。
自分はサブドメインで運用したかったので、goaccessを--real-time-html
つきで(websocketで)設定するやり方に一癖あったので備忘録的に書いていく。
https対応。
GoAccessとは
セルフホスト(self-hosted)型のWebサーバアナリティクスツール。
詳しくは公式HPで: https://goaccess.io
環境
参考までに。基本的にバージョンは何でも動くと思う
- Ubuntu 22.04.3 LTS
- Nginx 1.24.0
手順
1. goaccessインストール
sudo apt install -y goaccess
goaccess -V
動作確認方法
以下のコマンドで動作確認できる。
例は/var/www/html/index.html
に普通にルーティングされている前提。
goaccess /var/log/nginx/access.log -o /var/www/html/index.html --log-format=COMBINED
2. port開放
websocketで使用するportを開放する。
goaccessで使用するポートのデフォルトは7890なので以下のように設定。
ufw allow 7890
linux側ではこれだけだが、自宅ルータの内側にサーバを立ててやっている人はルータでポートブロックしていないか確認。
3. nginx 設定
nginx confファイルの記述
以下のようにした。
/etc/nginx/conf.d/goaccess.conf
upstream goaccess {
server 127.0.0.1:7890;
}
server {
listen 443 ssl http2;
server_name goaccess.example.com; // FQDN
root /var/www/html/goaccess;
index index.html;
// basic認証のファイル。任意
include /etc/nginx/default.d/basicauth.conf;
// ssl鍵のパスの入ったファイル。ssl_certificateとssl_certificate_keyが書かれている。任意
include /etc/nginx/default.d/ssl.conf;
location /ws {
proxy_pass http://goaccess;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_buffering off;
proxy_read_timeout 7d;
}
}
upstream goaccess
ポート番号はgoaccessのデフォルト。
server_name
FQDN。あとで使用する
location /ws
goaccessはindex.htmlにアクセスしたあとに、デフォルトでは/ws
でwebsocketの通信を確立する。
そのため/ws
にプロキシ設定が必要。
nginx 設定の反映
nginx -tでテストして、問題なければreloadする
nginx -t
systemctl reload nginx
4. GoAccessサービス化
goaccessはコマンドでhtmlを吐き出すため、バックグラウンドで動作させるためにサービスにする。
goaccess.service作成
touch /etc/systemd/system/goaccess.service
goaccess.service 設定
[Unit]
Description=Goaccess daemon.
After=network.target
[Service]
Type=simple
User=root
Group=root
Restart=always
ExecStart=/usr/bin/goaccess -a -f /var/log/nginx/access.log -a -f /var/log/nginx/access.log.1 \
-o /var/www/html/goaccess/index.html \
--real-time-html \
--log-format=COMBINED \
--ws-url=wss://goaccess.example.com:443/ws\
--origin=https://goaccess.example.com
StandardOutput=null
StandardError=null
[Install]
WantedBy=multi-user.target
ExecStart解説は以下
access.logについて
access.logは複数指定できる。
1つだけだと、当然1つの中身しかgoaccessに表示されない。
nginxはデフォルトだと1世代前のlogはcompressされない仕様のはずなので、2つを指定してより多くのログを表示させる。
もっと多くのものを表示させるうまいやり方があるらしいが、簡単なこの方法にした。
nginxログファイルの分け方を変えて1ヶ月分などにすることができるので、そちらで調整する。(任意)
--ws-url
こちらにはwss://{FQDN}:443/ws
の形式でwebsocket通信するパスを指定する
--origin
これを設定しないと動作しなかった。今回の躓きポイント
goaccessサービス起動
以下で起動させる。エラー等でなければok
systemctl daemon-reload
systemctl enable goaccess
systemctl start goaccess
5. アクセス
サイトにアクセスしてみる。
今回はgoaccess.example.com
に設定したのでそこにアクセス。
画面が表示されれば第一段階、表示は成功。
右側の設定ボタンの端に緑色のマークがついていれば、websocketでの通信ができている。