脚本能自动发送日志摘要邮件吗?

wen 实用脚本 2

本文目录导读:

脚本能自动发送日志摘要邮件吗?

  1. Shell 脚本 + mail/mutt(Linux 环境)
  2. Python 脚本(更灵活)
  3. 使用 cron 自动执行
  4. 增强功能建议
  5. 邮件发送方式对比
  6. 注意事项

是的,脚本完全可以自动发送日志摘要邮件,您可以根据自己的技术栈和环境选择不同的实现方式,以下是几种常见的方法:

Shell 脚本 + mail/mutt(Linux 环境)

#!/bin/bash
# 生成日志摘要
LOG_FILE="/var/log/myapp/app.log"
SUBJECT="每日日志摘要 - $(date '+%Y-%m-%d')"
RECIPIENT="admin@example.com"
# 提取关键信息
ERROR_COUNT=$(grep -c "ERROR" $LOG_FILE)
WARNING_COUNT=$(grep -c "WARNING" $LOG_FILE)
# 创建邮件内容
{
    echo "主题: $SUBJECT"
    echo "To: $RECIPIENT"
    echo ""
    echo "日志摘要报告"
    echo "============"
    echo "报告时间: $(date)"
    echo ""
    echo "错误数量: $ERROR_COUNT"
    echo "警告数量: $WARNING_COUNT"
    echo ""
    echo "最新错误信息:"
    grep "ERROR" $LOG_FILE | tail -5
} | mail -s "$SUBJECT" "$RECIPIENT"

Python 脚本(更灵活)

import smtplib
import subprocess
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from datetime import datetime
def get_log_summary():
    # 使用 grep 获取日志摘要
    result = subprocess.run(
        ['grep', '-c', 'ERROR', '/var/log/myapp/app.log'],
        capture_output=True, text=True
    )
    error_count = result.stdout.strip()
    # 获取最新错误
    result = subprocess.run(
        ['grep', 'ERROR', '/var/log/myapp/app.log'],
        capture_output=True, text=True
    )
    recent_errors = result.stdout.split('\n')[-5:]
    return error_count, recent_errors
def send_email():
    error_count, recent_errors = get_log_summary()
    # 构建邮件
    msg = MIMEMultipart()
    msg['Subject'] = f"日志摘要 - {datetime.now().strftime('%Y-%m-%d')}"
    msg['From'] = "noreply@example.com"
    msg['To'] = "admin@example.com"
    body = f"""
    日志摘要报告
    ============
    报告时间: {datetime.now()}
    错误数量: {error_count}
    最新错误信息:
    {chr(10).join(recent_errors)}
    """
    msg.attach(MIMEText(body, 'plain'))
    # 发送邮件
    with smtplib.SMTP('smtp.example.com', 587) as server:
        server.starttls()
        server.login("username", "password")
        server.send_message(msg)
if __name__ == "__main__":
    send_email()

使用 cron 自动执行

将脚本添加到 crontab 中:

# 每天上午9点执行
0 9 * * * /path/to/log_summary.sh
# 如果需要日志记录
0 9 * * * /path/to/log_summary.sh >> /var/log/mail_log_summary.log 2>&1

增强功能建议

  • HTML 格式邮件:使用 HTML 格式化报告,更美观
  • 附件:发送完整日志文件或压缩包
  • 异常告警:错误超过阈值时立即发送告警
  • 多日志源:汇总多个应用的日志
  • 数据库存储:将历史摘要存储到数据库

邮件发送方式对比

方式 优点 缺点
mail/mutt 简单,系统自带 功能有限
Python smtplib 灵活,可定制 需要 Python 环境
curl 可调用邮件 API 需要 API 支持

注意事项

  • 确保发送邮件的权限和配置正确
  • 注意日志文件大小,避免长时间处理
  • 考虑添加错误处理和重试机制
  • 敏感信息注意脱敏处理

根据您的具体需求和环境,选择最适合的实现方式即可,如果需要更详细的示例或特定场景的实现,请告诉我!

抱歉,评论功能暂时关闭!