Logwatch:数万行のUbuntuログを毎朝1通のレポートメールに集約する活用術

Ubuntu tutorial - IT technology blog
Ubuntu tutorial - IT technology blog

毎朝の「ログ確認」という苦行

スタートアップのサーバー管理を始めたばかりの頃、私はよく「泥縄式」の対応に追われていました。ある朝、目が覚めるとウェブサイトが502エラーで真っ白になっていたことがあります。慌てて確認すると、一晩中SSHへのブルートフォース攻撃を受け、2万回以上のパスワード試行が行われていたことに愕然としました。その時、私は必死になって greptail -f を使い、膨大な /var/log/auth.log の中を漁る羽目になったのです。

コンソール画面を流れる数千行のログを目で追うのは、まさに苦行です。目が疲れるだけでなく、異常な兆候を見逃すリスクも高まります。もし3〜5台以上のVPSを管理しているなら、毎日一台ずつログインしてログをチェックするのは、現実的ではありません。

なぜ危険な警告を無視してしまいがちなのか?

Linuxシステムは、ログインの成功からカーネルエラーまで、あらゆる出来事を記録しています。しかし、私たちがそれらを無視しがちなのには、主に3つの理由があります。

  • データの海: 通常のNginxサーバーでも、1日に50〜100MBのログを生成することがあります。その99%は、取るに足らない情報です。
  • 分散化: 各サービス(MySQL、SSH、Cron)が、それぞれの場所にログを保存しています。
  • 受動的な姿勢: ログはただそこに置かれているだけです。トラブルが起きない限り、わざわざ見に行く人は稀です。

その結果、ディスク残量が10%を切っていたり、見知らぬIPアドレスがパスワードを試行していたりといった予兆が、システムが完全にダウンするまで見過ごされてしまうのです。

ログを効率的に管理するための解決策は?

この膨大なデータを処理するために、通常は以下の3つの direction 性を検討します。

  1. ELK StackやGraylog: 美しいダッシュボードを備えた非常に優れたソリューションです。しかし、メモリ消費が激しいのが難点です。2GB RAMのVPSでELKを動かすのは無謀ですし、設定にも丸一日かかります。
  2. Bash/Pythonスクリプトの自作: 「Error」というキーワードを grep してTelegramに飛ばすスクリプトを書くこともできます。柔軟性は高いですが、ログの形式が変わるたびにメンテナンスが必要です。
  3. 軽量なログ分析ツール: これが、中小規模のサーバーにとって最適な選択肢です。

Logwatch – 超軽量なログ要約アシスタント

試行錯誤の末、私が行き着いたのが Logwatch です。これはPerlで書かれた非常に軽量なスクリプトで、過去24時間のログファイルをすべてスキャンし、重要なポイントだけを抽出して簡潔なレポートをメールで送信してくれます。1万行の生ログを読む代わりに、スマホの画面2枚分程度のメールに目を通すだけで済むのです。これほど効率的なことはありませんよね?

ステップ1:LogwatchとPostfixのインストール

メールを送信するには、サーバーにメール転送エージェント(MTA)が必要です。安定しており、GmailやSendGridへのリレー設定も簡単な Postfix をお勧めします。

sudo apt update
sudo apt install logwatch postfix -y

Postfixのインストール中に設定画面が表示されたら、「Internet Site」を選択してください。次に、サーバーのドメイン名(例:server.itfromzero.com)をシステムメール名として入力します。

ステップ2:メールレポート受信の設定

デフォルトでは、Logwatchはレポートをターミナル画面に出力するだけです。自動的にメール送信されるようにするには、設定ファイルを編集する必要があります。/usr/share/logwatch 内のファイルを直接編集せず、パッケージの更新時に上書きされないよう /etc/logwatch にコピーしてから編集しましょう。

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

それでは、nano などでファイルを開き、以下の項目を調整します。

sudo nano /etc/logwatch/conf/logwatch.conf

優先的に変更すべきパラメータ:

  • Output = mail(画面出力からメール送信に変更)
  • Format = html(HTML形式にすることで、プレーンテキストよりもプロフェッショナルで見やすいレポートになります)
  • MailTo = [email protected](毎朝レポートを受け取るメールアドレス)
  • Detail = Low(使い始めは全体を把握するためにLowまたはMedに設定し、詳細な調査が必要な時だけHighにします)
  • Range = yesterday(前日分のデータを集計)

ステップ3:テスト実行と受信トレイの確認

明日まで待つ必要はありません。以下のコマンドを実行して、設定が正しいか今すぐ確認しましょう。

sudo logwatch --output mail

コマンドが正常に終了し、受信トレイ(または迷惑メールフォルダ)にメールが届いていれば、90%は成功です。

ステップ4:メールリレーの設定(成功の鍵)

VPSのIPアドレスから直接送信されたメールは、スパムと判定されてGmailにブロックされることがよくあります。最善の対策は、Postfixを設定して SendGridAmazon SES 経由でリレーさせることです。個人利用であれば、Gmailの「アプリパスワード」機能を使って GmailのSMTPを利用することも可能です。これにより、ログレポートが紛失することなく定刻に届くようになります。

Logwatchをより効果的に活用するための実践的なコツ

数年間使い続けてわかった、いくつかの経験則を紹介します。

1. 重要なサービスに絞る: サーバーで多くのサービスが動いていても、特にSSHとNginxだけを監視したい場合は、設定ファイルの Service 変数でサービスを具体的に指定することで、レポートをより簡潔にできます。

2. 送信時間の調整: Ubuntuは /etc/cron.daily/00logwatch に自動的にcronジョブを作成します。私はよく実行時間を朝7時に変更しています。そうすれば、起きてコーヒーを飲みながら、最新のレポートをチェックできます。

3. SSHへの警戒: レポートの “SSH Begin” セクションをよく確認してください。もし見知らぬIPアドレスからの “Failed password” が数千件に達しているようなら、すぐに Fail2ban を導入するか、SSHポートを変更してサーバーを保護しましょう。

ツールを正しく活用すれば、サーバー管理の負担は大幅に軽減されます。Logwatchはリアルタイム監視システムの代わりにはなりませんが、全体像を把握するための優れた防御層となります。1日5分足らずで、サーバーの健康状態を完全に把握できるのです。

皆さんのサーバー管理がより快適になることを願っています。Postfixのリレー設定などで困ったことがあれば、お気軽にコメント欄で質問してください!

Share: