そのログ、本当に「見て」いますか?
こんにちは!「LINUX工房」管理人の「リナックス先生」です。
logrotate講座、楽しんでいただけていますか?
これまでの講座で、あなたのサーバーのログは適切にローテーションされ、圧縮され、S3へバックアップされるようになりました。完璧な管理体制です。
しかし、ここで一つ質問です。
「あなたは、そのログの中身を最後に見たのはいつですか?」
えっ…? えーっと、確か3ヶ月前にエラーが出た時に tail -f したのが最後です。
普段は動いてるから見てません。
だって、黒い画面に文字がダワーッて流れてくるの、目がチカチカするし、何が書いてあるか読むの大変じゃないですか。
それが普通の感覚よ。
でも、ログには「不正アクセスの予兆」や「ディスク故障の前触れ」といった重要なサインが隠れているの。
毎日生ログを読むのは無理でも、ツールを使って「要約」や「グラフ化」をすれば、異常にすぐ気づけるわ。
今回は、ログ管理の仕上げとして「ログの可視化・活用」テクニックを伝授するわね!
本記事では、AlmaLinux 9 をベースに、サーバーの状態を毎日メールで報告してくれる「Logwatch」と、コマンドラインでおしゃれなアクセス解析ができる「GoAccess」の導入・活用法を解説します。
もちろん、logrotateで圧縮された過去ログをどう扱うかについてもバッチリカバーします。
📚 logrotate完全攻略講座(バックナンバー)
ログ管理の基礎から応用、トラブルシューティングまで全網羅。
- 【第1回】サーバーの「時限爆弾」を解除せよ!ログローテーションの基礎と仕組み完全図解
- 【第2回】設定ファイルの魔術書!ローテーション周期・サイズ・保存期間の完全制御
- 【第3回】「ログが消えた!?」を防ぐ。copytruncateとcreateの決定的な違いとiノードの秘密
- 【第4回】ディスク容量を極限まで節約!圧縮設定と日付付与のテクニック
- 【第5回】再起動を自動化せよ!postrotateスクリプトによるプロセス制御
- 【第6回】権限トラブルを回避する!ユーザー指定とACL、出力先ディレクトリの管理
- 【第7回】動かない時の処方箋。デバッグモード活用とSELinux/ステータスファイルの罠
- 【第8回】最強のバックアップ構築。S3への自動転送と一元管理への応用
- 【付録1】ディスク容量不足の緊急救命室!LVM拡張・olddir活用・別ディスク退避の完全対策
- 【付録2】ログは「捨てる」前に「活かせ」!Logwatchによる自動要約とGoAccessでのリアルタイム可視化術
ツール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.1 や messages-*.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」で自分専用環境
監視・分析スキルを年収に
「ITエンジニア転職」

コメント