【Apacheリアルタイム解析】EC2でGoAccess

GoAccessを使ってみました。

私が作ったデモページはココ。公式のデモページはココ

GoAccessとは

GoAccessは、オープンソースのリアルタイムWebログアナライザーおよびインタラクティブビューアーであり、* nixシステムのターミナルまたはブラウザーを介して実行されます。

ビジュアルサーバーレポートをその場で必要とするシステム管理者に、高速で価値のあるHTTP統計を 提供します。

https://goaccess.io/

*nixはunixを濁した言い方でしょうか?

とにかく、Webサーバのログをリアルタイムで解析するツールらしいです。

インストール

公式のインストール方法はココです。

しかし、私の場合、次のようなエラーが発生しました。

configure: error:
    *** Missing development files for libmaxminddb library.

モジュールが不足しているらしいので、以下の手順でうまくいきました。

$ yum install ncurses-devel geoip-devel libmaxminddb-devel tokyocabinet-devel openssl-devel
$ wget https://tar.goaccess.io/goaccess-1.5.5.tar.gz
$ tar -xzvf goaccess-1.5.5.tar.gz
$ cd goaccess-1.5.5/
$ ./configure --enable-utf8 --enable-geoip=mmdb
$ make
$ make install

# バージョンが表示されればOK
$ goaccess -V

次に、ログのフォーマットを調整します。

※Webサーバが吐き出すログのフォーマットと一致させる必要があります。

# confを編集
vi /usr/local/etc/goaccess/goaccess.conf

time-format %H:%M:%S #コメントアウト解除
date-format %d/%b/%Y #コメントアウト解除
log-format %h %^[%d:%t %^] "%r" %s %b "%R" "%u" #コメントアウト解除

CLIで確認

ログファイルを指定するだけで解析してくれます。

とてもイージーです。

goaccess /var/log/httpd/access_log

以下、公式に記載されているインタラクティブキーの一覧です。

  • F1またはhメインヘルプ。
  • F5メインウィンドウを再描画します。
  • qプログラム、現在のウィンドウを終了するか、アクティブなモジュールを折りたたむ
  • oまたはENTER選択したモジュールを展開するか、ウィンドウを開きます
  • 0-9Shift + 0選択したモジュールをアクティブに設定します
  • j拡張されたモジュール内を下にスクロールします
  • k拡張されたモジュール内を上にスクロールします
  • cスキームの色を設定または変更する
  • ^ fアクティブなモジュール内で1画面前にスクロールします
  • ^ bアクティブなモジュール内で1画面後方にスクロールします
  • TABモジュールの反復(順方向)
  • SHIFT + TABモジュールの反復(逆方向)
  • sアクティブなモジュールの並べ替えオプション
  • /すべてのモジュールを検索します(正規表現を使用できます)
  • n次の出現の位置を見つける
  • g最初のアイテムまたは画面の上部に移動します
  • G最後の項目または画面の下部に移動します

GUIで確認

GUIで確認するには、-oオプションを付けて、htmlファイルを吐き出させます。

# htmlファイルを生成
goaccess /var/log/httpd/access_log -o /var/www/html/report.html

# リアルタイム解析
tail -f /var/log/httpd/access_log |goaccess -o /var/www/html/report.html --real-time-html-

すると、こんな感じで可視化されます。

かっこいいですね。

サービス化

サービス化しておけば、いちいちコマンドを実行せずともリアルタイムで確認することができます。

サービス化の仕方についてはこちらの記事が詳細に説明してくれています。

最後に

GoAccessを導入するのはとても簡単でした。

そして、リアルタイムで解析してくれるところもGoodです。

しかし、なんらかのトリガーを設定し、攻撃を検知してくれるような仕組みは無いようです?

そうだとすると、監視システムはこれとは別に用意する必要がありそうですね。

ただ、解析結果を可視化できるのは嬉しいですし、毎日レポートを吐き出しておくことで、運用状況をまとめやすいかもですね。