システム運用やアプリケーションの監視において、ログファイルを定期的に確認し、エラーが発生していればすぐに通知を受け取る仕組みは非常に重要です。本記事では、Pythonを使ってログファイルからエラーメッセージを抽出し、管理者に自動でメール通知を行うスクリプトの作成方法を紹介します。
処理の流れと目的
今回のスクリプトは以下の処理を自動で行います。
- ログファイルを読み込む
- 特定のキーワード(ERRORやExceptionなど)を含む行を抽出
- 抽出結果を整形してメール本文を作成
- Gmailなどを利用して管理者に通知メールを送信
必要なライブラリのインストール
メール送信にはsmtplib
とemail
、ログファイル処理にはos
とdatetime
などの標準ライブラリを使用します。
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を使えば、ログ監視からメール通知までを簡潔に自動化できます。手動でのログ確認に頼らず、異常を即座に検知できる仕組みを導入することで、システム運用の安定性を大きく向上させることができます。
運用環境に合わせて通知内容や条件をカスタマイズすることで、さらに実用的な監視ツールとして活用できます。