【番外編】ログは「見る」ものではなく「視る」もの。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種別などを円グラフで可視化。
● インタラクティブ操作: 各項目をクリックするとドリルダウン(詳細表示)が可能。
このように、クライアントへの提出用レポートとしても十分通用するクオリティのものが、たった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



コメント