「毎日のログを手作業でチェックするのが大変」
「報告資料の作成に時間を取られて開発が進まない」
こうしたお悩みをお持ちではないでしょうか?
本記事では、Pythonを使ってログを自動で解析し、グラフ付きのレポートを作成し、メールで送信するツールを一から開発する方法をご紹介します。
PandasとMatplotlib、そしてメール送信機能を組み合わせれば、誰でも簡単に業務の自動化が実現できます。
この記事を読めば、面倒な手作業から解放され、作業効率を飛躍的に向上させることができます。
ログ解析ツールとは?
結論
ログ解析ツールとは、サーバーやアプリの動作記録を自動で読み取り、異常や傾向を分析するプログラムです。
理由
特にWebサービスや業務システムでは、アクセス状況やエラー情報を把握するためにログが必須です。
しかし、それらを毎日手作業でチェックするのは大きな負担です。
具体例
たとえば、エラーログから「1日あたりのエラー発生数」や「エラー内容の種類別件数」を抽出すれば、
システム改善に活かせます。
ポイント
- ログを解析することで、問題の早期発見が可能
- 手作業の負担が軽減される
- データを可視化することで関係者への報告も簡単
使用するPythonライブラリ
結論
以下のライブラリを使います。すべて無料で導入できます。
使用ライブラリ一覧
- pandas:データ解析用ライブラリ
- matplotlib:グラフ作成ライブラリ
- smtplib・email:メール送信用の標準ライブラリ
- datetime:日付処理用
これらは pip で簡単に導入できます:
pip install pandas matplotlib
ログファイルの読み込みと前処理
結論
CSV形式のログファイルをpandasで読み取り、必要なカラムを抽出・整形します。
具体コード
import pandas as pd
df = pd.read_csv("access_log.csv")
df["datetime"] = pd.to_datetime(df["datetime"])
df["date"] = df["datetime"].dt.date
error_df = df[df["status"] >= 500] # ステータスコード500以上=エラー
Matplotlibでグラフ作成
結論
エラー件数を日別に集計し、棒グラフで可視化します。
具体コード
import matplotlib.pyplot as plt
daily_error = error_df.groupby("date").size()
plt.figure(figsize=(10, 5))
daily_error.plot(kind="bar")
plt.title("日別エラー件数")
plt.xlabel("日付")
plt.ylabel("エラー数")
plt.tight_layout()
plt.savefig("error_graph.png")
メールで自動送信する方法
結論
Python標準の smtplib
と email
を使えば、画像付きメールを送信できます。
具体コード
import smtplib
from email.message import EmailMessage
msg = EmailMessage()
msg["Subject"] = "本日のログレポート"
msg["From"] = "your_email@example.com"
msg["To"] = "receiver@example.com"
msg.set_content("添付の画像をご確認ください。")
with open("error_graph.png", "rb") as f:
msg.add_attachment(f.read(), maintype="image", subtype="png", filename="error_graph.png")
with smtplib.SMTP_SSL("smtp.gmail.com", 465) as smtp:
smtp.login("your_email@example.com", "your_password")
smtp.send_message(msg)
完成形コード
以下は、すべての処理を一括で実行するコードです。
import pandas as pd
import matplotlib.pyplot as plt
import smtplib
from email.message import EmailMessage
# ログ読み込みと整形
df = pd.read_csv("access_log.csv")
df["datetime"] = pd.to_datetime(df["datetime"])
df["date"] = df["datetime"].dt.date
error_df = df[df["status"] >= 500]
# エラー集計とグラフ作成
daily_error = error_df.groupby("date").size()
plt.figure(figsize=(10, 5))
daily_error.plot(kind="bar")
plt.title("日別エラー件数")
plt.xlabel("日付")
plt.ylabel("エラー数")
plt.tight_layout()
plt.savefig("error_graph.png")
# メール送信
msg = EmailMessage()
msg["Subject"] = "本日のログレポート"
msg["From"] = "your_email@example.com"
msg["To"] = "receiver@example.com"
msg.set_content("添付の画像をご確認ください。")
with open("error_graph.png", "rb") as f:
msg.add_attachment(f.read(), maintype="image", subtype="png", filename="error_graph.png")
with smtplib.SMTP_SSL("smtp.gmail.com", 465) as smtp:
smtp.login("your_email@example.com", "your_password")
smtp.send_message(msg)
まとめ
本記事では、Pythonで以下を自動化するツールを作成しました。
- ログファイルの読み込みと整形
- エラー集計とグラフ可視化
- メールでの自動送信
このツールを使えば、日々の報告業務が大幅に効率化されます。
応用として、PDF出力やSlack通知への展開も可能です。
ぜひ、あなたの業務にも取り入れてみてください。