【番外編】ログは「見る」ものではなく「視る」もの。GoAccessでApacheログをリアルタイム可視化する

【番外編】ログは「見る」ものではなく「視る」もの。GoAccessでApacheログをリアルタイム可視化する

こんにちは!「リナックス先生」です。
第9回ではログ管理の基礎を、最終回では監視の重要性を学びました。
コウ君、Webサーバー(Apache/Nginx)のアクセスログ、毎日ちゃんとチェックしてる?

コウ君

えっと…… tail -f で流し見してはいますけど、文字が多すぎて目が滑るというか……。
「どの国から攻撃が来てるか」とか「どのページが人気か」とか、パッと見じゃ全然わからないです!

リナックス先生

ログファイルは「データ」であって「情報」じゃないからね。
そのまま読もうとするのが間違いよ。
今回は、黒い画面の文字データを、一瞬でカラフルなグラフやダッシュボードに変えてくれる魔法のツール「GoAccess(ゴーアクセス)」を紹介するわ!

今回は番外編として、軽量かつ強力なログ解析ツール「GoAccess」の導入手順を解説します。
重いデータベース(MySQLなど)を必要とせず、コマンド一つでリアルタイムな解析画面を呼び出せるため、現場でのトラブルシューティングや簡易レポート作成に絶大な威力を発揮します。

今回のゴール

  • ターミナル解析: SSH接続した黒い画面上で、グラフ付きのリアルタイム解析を行う。
  • Webレポート: ブラウザで見られる綺麗なHTMLレポートを自動生成する。
  • ログローテート: ログが肥大化しないよう、適切に管理する設定を行う。

1. GoAccessのインストール

GoAccessは非常に軽量ですが、標準のリポジトリには含まれていません。
Fedoraプロジェクトが提供する「EPELリポジトリ」から入手します。

Step 1: EPELリポジトリの準備

まだ導入していない場合は、以下のコマンドで有効化します。

[root@server01 ~]# dnf install epel-release -y

Step 2: GoAccessのインストール

[root@server01 ~]# dnf install goaccess -y

Step 3: 日本語環境の確認

レポート内の日本語が文字化けしないよう、サーバーのロケールを確認しておきます。

[root@server01 ~]# localectl status
   System Locale: LANG=ja_JP.UTF-8

ja_JP.UTF-8 になっていればOKです。

2. 設定ファイルの編集 (Apache用)

GoAccessはApache、Nginx、AWS ELBなど様々なログ形式に対応していますが、デフォルトではどの形式を使うか決まっていません。
今回はApacheの標準形式(COMBINED)に合わせて設定します。

[root@server01 ~]# vi /etc/goaccess/goaccess.conf

以下の3箇所のコメントアウト(#)を外して有効化してください。
(Vimなら /time-format などで検索すると早いです)

# 1. 時間フォーマット
time-format %H:%M:%S

# 2. 日付フォーマット
date-format %d/%b/%Y

# 3. ログフォーマット (Apache/Nginxの標準)
log-format COMBINED

⚠️ プロの注意点:SSLログの罠

ApacheのSSLログ(ssl_access_log)は、OSのデフォルト設定によっては形式が異なり、上記設定ではエラーになることがあります。
まずは標準の access_log で試すのが確実です。

3. ターミナルで「視る」リアルタイム解析

まずはSSH接続した画面のまま、解析結果を見てみましょう。
コマンド一発で、いつものログが劇的に変わります。

[root@server01 ~]# goaccess /var/log/httpd/access_log

画面が切り替わり、CUIベースのダッシュボードが表示されます。

  • Unique Visitors: 何人のユーザーが来たか
  • Requested Files: どのページが見られているか
  • 404 Not Found: リンク切れや攻撃の形跡がないか

矢印キーでスクロールでき、Enter キーで詳細を展開できます。
終了するときは q を押します。

4. グラフィカルなHTMLレポートの作成

「上司に報告書を出して」と言われた時、ターミナルのスクリーンショットを貼るのはスマートではありません。
ブラウザで見られる、色鮮やかなHTMLファイルを生成しましょう。

レポート生成コマンド

Webサーバーの公開ディレクトリ(ドキュメントルート)に出力します。

[root@server01 ~]# goaccess /var/log/httpd/access_log -o /var/www/html/report.html

これで、ブラウザから http://[サーバーIP]/report.html にアクセスすると、きれいなグラフが表示されます。

5. 【サンプル】実際の解析レポートはこう見える

実際に生成されるHTMLレポートのイメージを紹介します。
黒い画面のログデータが、以下のような見やすいダッシュボードに変換されます。

▼ GoAccess HTMLレポート画面イメージ

主な機能:
全体サマリー: 総アクセス数、ユニークユーザー数、帯域使用量などが一目でわかります。
時系列グラフ: 時間帯ごとのアクセス推移を折れ線グラフで表示。
アクセス元情報: 国別(マップ表示)、ブラウザ種別、OS種別などを円グラフで可視化。
インタラクティブ操作: 各項目をクリックするとドリルダウン(詳細表示)が可能。

実際の動きを確認できるライブデモはこちら

GoAccess 公式サイトでデモを見る

※公式サイトトップページの「Live Demo」から確認できます。

このように、クライアントへの提出用レポートとしても十分通用するクオリティのものが、たった1行のコマンドで生成されます。

6. 解析の自動化とCron設定

コマンドを打った時だけのスナップショットでは、常に最新の状況を把握できません。
Cronを使って、1時間ごとにレポートを自動更新させましょう。

更新用スクリプトの作成

直接Cronに書いても良いですが、日本語設定などを確実にするためスクリプト化します。

[root@server01 ~]# vi /root/update_report.sh

内容:

#!/bin/bash
export LANG="ja_JP.UTF-8"
/usr/bin/goaccess /var/log/httpd/access_log -o /var/www/html/report.html

実行権限を付与します。

[root@server01 ~]# chmod +x /root/update_report.sh

Cronへの登録

[root@server01 ~]# crontab -e

追記内容(毎時0分に実行):

0 * * * * /root/update_report.sh > /dev/null 2>&1

7. ログローテート設定の最適化

最後に、ログ管理の基本である「ログローテート」の設定も見直しておきましょう。
アクセスログは放っておくと肥大化し、解析速度を低下させるだけでなく、ディスクを圧迫します。

/etc/logrotate.d/httpd を以下のように設定することで、「毎日ローテーション」「30日保存」「圧縮あり」の運用が可能です。

/var/log/httpd/*log {
    daily               # 毎日ローテーション
    rotate 30           # 30日分保存
    missingok           # ファイルがなくてもエラーにしない
    notifempty          # 空なら処理しない
    compress            # 圧縮して容量節約
    delaycompress       # 圧縮を1日遅らせる(書き込みエラー防止)
    sharedscripts
    postrotate
        /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true
    endscript
}

設定後は logrotate -d /etc/logrotate.d/httpd でエラーがないか確認をお忘れなく。

まとめ:可視化は最強の武器

今回は番外編として、GoAccessを使ったログ解析環境を構築しました。
「ログを見るのが面倒くさい」という感情は、ツールを使えば「ログを見るのが楽しい」に変えられます。

異常があればグラフが跳ね上がるので一目で気づけます。
これもまた、サーバー管理者としての重要な「監視」スキルの一つです。
ぜひ導入して、あなたのサーバーの健康状態を常に「視える化」しておいてください!

リナックス先生

ちなみに、生成した report.html は誰でも見れる状態だから気をつけてね。
第7回でやったNginx(Apache)の設定で、Basic認証をかけたり、自分たちの会社のIPからしか見れないように制限するのが、プロの最後の仕上げよ。

▼スクリプトの実験場に最適!推奨VPS

【2026年最新】Linuxサーバー構築におすすめのVPS比較3選!現役エンジニアが速度とコスパで厳選
Linuxの勉強、まだ「自分のPC」でやって消耗していませんか?「Linuxを覚えたいけど、環境構築でエラーが出て先に進めない…」「VirtualBoxを入れたらパソコンが重くなった…」これは、Linux学習を始める9割の人がぶつかる壁です...

コメント