【logrotate講座 付録2】ログは「捨てる」前に「活かせ」!Logwatchによる自動要約とGoAccessでのリアルタイム可視化術

そのログ、本当に「見て」いますか?

こんにちは!「LINUX工房」管理人の「リナックス先生」です。
logrotate講座、楽しんでいただけていますか?
これまでの講座で、あなたのサーバーのログは適切にローテーションされ、圧縮され、S3へバックアップされるようになりました。完璧な管理体制です。

しかし、ここで一つ質問です。
「あなたは、そのログの中身を最後に見たのはいつですか?」

コウ君

えっ…? えーっと、確か3ヶ月前にエラーが出た時に tail -f したのが最後です。
普段は動いてるから見てません。
だって、黒い画面に文字がダワーッて流れてくるの、目がチカチカするし、何が書いてあるか読むの大変じゃないですか。

リナックス先生

それが普通の感覚よ。
でも、ログには「不正アクセスの予兆」や「ディスク故障の前触れ」といった重要なサインが隠れているの。
毎日生ログを読むのは無理でも、ツールを使って「要約」「グラフ化」をすれば、異常にすぐ気づけるわ。
今回は、ログ管理の仕上げとして「ログの可視化・活用」テクニックを伝授するわね!

本記事では、AlmaLinux 9 をベースに、サーバーの状態を毎日メールで報告してくれる「Logwatch」と、コマンドラインでおしゃれなアクセス解析ができる「GoAccess」の導入・活用法を解説します。
もちろん、logrotateで圧縮された過去ログをどう扱うかについてもバッチリカバーします。


ツール1:毎朝の健康診断「Logwatch」

最初のおすすめツールは、古くから愛されている「Logwatch(ログウォッチ)」です。
これは、システム内のあらゆるログ(cron, sshd, httpd, postfix…)を収集・解析し、「昨日何が起きたか」を1通のメールにまとめて送ってくれるツールです。

第1章:Logwatchのインストールと基本設定

AlmaLinux 9 では標準リポジトリから簡単にインストールできます。

sudo dnf install logwatch -y

設定ファイルは /usr/share/logwatch/default.conf/logwatch.conf にありますが、これを直接編集するのはマナー違反です。
/etc/logwatch/conf/logwatch.conf にコピーして編集します。

sudo cp /usr/share/logwatch/default.conf/logwatch.conf /etc/logwatch/conf/

主要な設定項目

nano /etc/logwatch/conf/logwatch.conf で編集します。

# ログの対象期間(昨日分)
Range = yesterday

# 詳細度(Low, Med, High)
Detail = Med

# レポートの送信先(自分のメールアドレス)
MailTo = admin@example.com

# 送信元アドレス
MailFrom = Logwatch@myserver

第2章:手動実行とレポートの確認

設定ができたら、まずは手動で実行して、どんなレポートが出るか確認してみましょう。
--output stdout オプションをつけると、メールを送らずに画面に表示します。

sudo logwatch --output stdout

出力レポートのイメージ:

 ################### Logwatch 7.5.5 (02/10/24) ####################
        Processing Initiated: Mon Jan 20 10:00:00 2026
        Date Range Processed: yesterday
                              ( 2026-Jan-19 )
        Detail Level of Output: 5
        Type of Output/Format: stdout / text
        Logfiles for Host: myserver
 ##################################################################

 --------------------- SSHD Begin ------------------------
 Users logging in through sshd:
    admin:
       192.168.1.10: 3 times

 Failed logins:
    root:
       203.0.113.5: 52 times  <-- 怪しいアクセスが一目瞭然!
 ---------------------- SSHD End -------------------------

 --------------------- httpd Begin ------------------------
 Requests with error response codes
    404 Not Found
       /favicon.ico: 15 Time(s)
       /wp-login.php: 8 Time(s) <-- 攻撃の予兆?
 ---------------------- httpd End -------------------------

このように、「誰がログインに失敗したか」「どんなエラーが多かったか」が要約されます。
これなら毎日30秒でチェックできますね。

第3章:logrotateされた過去ログも含める技

Logwatchのデフォルト設定では、現在のログファイル(/var/log/messages など)しか見ません。
しかし、logrotateの設定によっては、昨日のログはすでに messages-20260119 などに移動されているかもしれません。

そんな時は、--archives オプションを使います。

# 設定ファイルで有効化する場合
Archives = Yes

これを有効にすると、Logwatchは messages.1messages-*.gz などのローテーションされた過去ログも解凍・展開して解析対象に含めてくれます。
logrotate講座で学んだ「圧縮設定」をしていても安心です。


ツール2:ターミナルで映える「GoAccess」

次は、Webサーバー(Apache/Nginx)のアクセスログ解析に特化したツール「GoAccess(ゴーアクセス)」です。
このツールの凄いところは、「黒い画面(ターミナル)の中で、グラフィカルなダッシュボードを表示できる」点です。

第4章:GoAccessのインストール

EPELリポジトリからインストールします。

sudo dnf install epel-release -y
sudo dnf install goaccess -y

第5章:基本的な使い方

使い方は超シンプル。ログファイルを指定して実行するだけです。

sudo goaccess /var/log/httpd/access_log

初回起動時に「ログの形式(Log Format)」を聞かれます。
ApacheやNginxの標準設定なら「NCSA Combined Log Format」を選べばOKです。

画面に表示される情報:

  • ユニーク訪問者数、合計リクエスト数
  • リクエストされたファイル(URL)ランキング
  • 404エラーの多いページ
  • 接続元IPアドレス、国、OS、ブラウザ
  • 時間帯別アクセス数

これらが、カラーで、グラフ付きで表示されます。
矢印キーでスクロールでき、q で終了します。

第6章:圧縮された過去ログをまとめて解析する

ここでも logrotate との連携テクニックが登場します。
「今月のアクセス推移を見たい」と思っても、ログは毎日ローテーションされ、しかも .gz で圧縮されています。

GoAccessは標準入力からのパイプを受け付けるので、zcat コマンドと組み合わせることで、過去ログを全部まとめて解析できます。

# 圧縮されたログ(*.gz)と現在のログを全部つなげて解析
zcat /var/log/httpd/access_log-*.gz | goaccess - --log-format=COMBINED

または、現在のログも含めるなら:

cat /var/log/httpd/access_log <(zcat /var/log/httpd/access_log-*.gz) | goaccess - --log-format=COMBINED

これで、過去数ヶ月分のデータを一瞬で集計・可視化できます。
「先週のキャンペーンの効果はどうだったか?」といった分析も、コマンド一発です。

第7章:HTMLレポートの生成

上司やクライアントに報告するなら、黒い画面を見せるわけにはいきません。
GoAccessは、解析結果を美しいHTMLファイルとして出力する機能も持っています。

sudo goaccess /var/log/httpd/access_log -o /var/www/html/report.html --log-format=COMBINED

生成された report.html にブラウザでアクセスすれば、モダンなデザインの解析レポートが見られます。
これをcronに登録して、毎日自動生成するようにすれば、簡易的なアクセス解析システムの完成です。

💡 リアルタイム更新機能
さらに --real-time-html オプションを使うと、ログが書き込まれるたびにWebSocketでブラウザ上のグラフがピョコピョコ動く、近未来的なダッシュボードになります。
(※ただし、WebSocket用のポート開放などが必要です)


第8章:ログ監視の鉄則(grep活用術)

ツールも便利ですが、緊急時にはやはり基本コマンド grep が最強です。
サーバー管理者が「手癖」として覚えておくべき、ログ調査ワンライナーを紹介します。

1. 500エラー(サーバー内部エラー)の調査

grep " 500 " /var/log/httpd/access_log | tail -n 20

ステータスコード「500」を含む行の、最新20件を表示します。

2. 特定IPからのアクセスを除外して見る

自分のアクセスや、監視ボットのアクセスが邪魔な時に使います。

grep -v "192.168.1.5" /var/log/httpd/access_log | less

-v オプションで「除外(invert)」できます。

3. 攻撃の兆候(404連発)を探す

grep " 404 " /var/log/httpd/access_log | awk '{print $1}' | sort | uniq -c | sort -nr | head

404エラーを出したIPアドレス($1)を抽出し、カウントして多い順にランキング表示します。
「特定のIPが短時間に何百回も404を出している」なら、スキャン攻撃を受けている可能性大です。

※詳しくは【Perl講座 付録】黒い画面の支配者へ!Perlワンライナーと正規表現によるログ解析でも解説しています。


まとめ:ログは宝の山である

今回は、logrotateで管理されたログを「活用」するためのツールを紹介しました。

今回の重要ポイント:

  • Logwatch: 毎朝メールで「昨日の異常」を教えてくれる秘書。--archives で過去ログも対応。
  • GoAccess: ターミナルで直感的にアクセス解析。zcat と組み合わせれば圧縮ログも分析可能。
  • HTMLレポート: GoAccessで綺麗なレポートを作り、チームで共有できる。
  • grep/awk: 困ったときは基本コマンドが最強の武器になる。

ログローテートで「保存」し、Logwatchで「監視」し、GoAccessで「分析」する。
この3段構えがあれば、あなたのサーバー運用は盤石です。

「ディスク容量不足でサーバーが止まった」なんてもう言わせません。
これからは「ログを見て、障害の予兆を事前に察知して防いだ」と言えるエンジニアになりましょう!

▼ 可視化でサーバーの「今」を知る ▼

GoAccessを試す
「VPS」で自分専用環境

おすすめVPSを見る

監視・分析スキルを年収に
「ITエンジニア転職」

転職エージェントを見る

コメント