Skip to content

GoAccessなどのログ解析ツールの導入 #36

@lobin-z0x50

Description

@lobin-z0x50

GoAccess

公式
https://gigazine.net/news/20200613-goaccess/
https://brandonrozek.com/blog/goaccess/
https://qiita.com/tetsuoMikami/items/5ec750558460b4c78098

利用イメージ

CUI案

/var/scripts/goaccess.sh
  • peco が起動して、ログファイルが一覧表示される
  • ログファイルを選択すると、そのログに対して goaccess を実行し、結果がCUIで表示される
  • ローテートされた圧縮ファイルの場合は、自動的に解凍して処理してくれる
  • goaccess で解析した結果ファイルは一定時間キャッシュされ、2回目に同じファイルを開こうとしたら瞬時に開いてくれる

ブラウザ案1(EzGate組み込み)

domain 'goaccess.example.com' {
  goaccess from: '10.0.0.1'  # 接続元IPを指定するイメージ
}

としておいて、そのドメインにアクセスするとログファイルが一覧表示されて、ファイルをクリックすると goaccess の Web版が起動する。
SSH接続不要。ただし from の部分を毎回セットしないといけないので、SSH接続は結局必要になりそう。
basic認証を導入すれば from を書かなくてもいいかも。

ブラウザ案2(EzGateとはポートを分ける)

local_goaccess_server port: 8099

としておいて、ポート番号を分けてしまう。Web画面を見る場合は、ローカルPCからSSHポートフォワードなどを使う。
よりセキュア。
SSH接続が必須だが、nologinでポートフォワードだけすればよいので、すこしセキュアで手軽。公開鍵認証にしておいて、専用sshコマンドさえ作っておけばいつでも接続できる。

別コンテナ案

上記を別コンテナで提供する。
ログファイルさえ見えれば goaccess を処理できるので、ログディレクトリを Docker volume やホストディレクトリで共有し、マウントさせればよい。
クラウド側に goaccess コンテナを起動して、ブラウザ案2の構成を使うのも考えられる。
またはローカルに goaccess クライアントコンテナを置いといて、以下のようにSSHでリモートのログを流し込む方法も考えられる。

ssh user@remote_server tail -f ~/ezgate/logs/access.log \
 | docker run -p 7890:7890 --rm -i -e LANG=$LANG allinurl/goaccess -a -o html --log-format COMBINED --real-time-html - > report.html

https://hub.docker.com/r/allinurl/goaccess
https://github.com/xavier-hernandez/goaccess-for-nginxproxymanager
これなら何も導入しなくても使える。

ngxtop

公式GitHub
python製 CUIツール。
シンプルなので、とりあえずこれをインストールしておくのでもよい。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions