【Python】ログ収集とエラーメール通知の自動化スクリプト

【Python】ログ収集とエラーメール通知の自動化スクリプト Python

システム運用やアプリケーションの監視において、ログファイルを定期的に確認し、エラーが発生していればすぐに通知を受け取る仕組みは非常に重要です。本記事では、Pythonを使ってログファイルからエラーメッセージを抽出し、管理者に自動でメール通知を行うスクリプトの作成方法を紹介します。

処理の流れと目的

今回のスクリプトは以下の処理を自動で行います。

  1. ログファイルを読み込む
  2. 特定のキーワード(ERRORやExceptionなど)を含む行を抽出
  3. 抽出結果を整形してメール本文を作成
  4. Gmailなどを利用して管理者に通知メールを送信

必要なライブラリのインストール

メール送信にはsmtplibemail、ログファイル処理にはosdatetimeなどの標準ライブラリを使用します。

Gmailなど外部サービスを使う場合、セキュリティの都合上、アプリパスワードやOAuth2.0の準備が必要です。

Pythonスクリプト例

以下は、Pythonでログ監視とメール通知を自動化するスクリプトの一例です。

import os
import smtplib
from datetime import datetime
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

# ログファイルのパス
log_path = '/var/log/myapp.log'
error_keywords = ['ERROR', 'Exception']

# エラーログ抽出関数
def extract_errors(log_file):
    if not os.path.exists(log_file):
        return []

    with open(log_file, 'r', encoding='utf-8') as f:
        lines = f.readlines()

    error_lines = [line for line in lines if any(keyword in line for keyword in error_keywords)]
    return error_lines

# メール送信関数
def send_email(subject, body):
    sender = 'youraddress@gmail.com'
    recipient = 'admin@example.com'
    password = 'your_app_password'  # Gmailのアプリパスワード

    msg = MIMEMultipart()
    msg['From'] = sender
    msg['To'] = recipient
    msg['Subject'] = subject

    msg.attach(MIMEText(body, 'plain'))

    try:
        with smtplib.SMTP_SSL('smtp.gmail.com', 465) as server:
            server.login(sender, password)
            server.send_message(msg)
    except Exception as e:
        print(f"メール送信エラー: {e}")

# メイン処理
if __name__ == '__main__':
    errors = extract_errors(log_path)
    if errors:
        now = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        body = f'[{now}] エラーログが検出されました:\n\n' + ''.join(errors)
        send_email('【アラート】ログにエラーが検出されました', body)
    else:
        print('エラーは検出されませんでした。')

スケジューリングで定期実行

このスクリプトを自動で実行するには、OSのスケジューラ機能を使います。

  • Windows:タスクスケジューラにPythonスクリプトを登録
  • Linux / macOS:cronジョブで定期実行(例:crontab -e
# 毎日午前9時に実行
0 9 * * * /usr/bin/python3 /home/user/log_check.py

まとめ

Pythonを使えば、ログ監視からメール通知までを簡潔に自動化できます。手動でのログ確認に頼らず、異常を即座に検知できる仕組みを導入することで、システム運用の安定性を大きく向上させることができます。

運用環境に合わせて通知内容や条件をカスタマイズすることで、さらに実用的な監視ツールとして活用できます。