Python实现的服务器日志监控脚本

以下是一个Python实现的服务器日志监控脚本,当检测到错误日志时自动发送短信通知。使用Twilio作为短信服务提供商(需先注册账号获取凭证):

复制代码
import time
import logging
from twilio.rest import Client

# 配置日志文件路径
LOG_FILE = "/var/log/nginx/error.log"

# Twilio配置(从环境变量获取更安全)
ACCOUNT_SID = "your_account_sid"
AUTH_TOKEN = "your_auth_token"
FROM_NUMBER = "+1234567890"  # 你的Twilio号码
TO_NUMBER = "+0987654321"    # 接收通知的号码

# 初始化Twilio客户端
client = Client(ACCOUNT_SID, AUTH_TOKEN)

def send_sms_alert(log_entry):
    """发送短信通知"""
    try:
        message = client.messages.create(
            body=f"🚨 服务器错误告警: {log_entry[:160]}...",  # 截取前160字符
            from_=FROM_NUMBER,
            to=TO_NUMBER
        )
        logging.info(f"短信已发送: {message.sid}")
    except Exception as e:
        logging.error(f"短信发送失败: {str(e)}")

def monitor_logs():
    """监控日志文件变化"""
    last_position = 0
    
    while True:
        try:
            with open(LOG_FILE, 'r') as f:
                # 定位到上次读取位置
                f.seek(last_position)
                new_lines = f.readlines()
                last_position = f.tell()
                
                for line in new_lines:
                    if "ERROR" in line or "500" in line:  # 检测错误关键词
                        logging.warning(f"检测到错误日志: {line.strip()}")
                        send_sms_alert(line.strip())
        
        except FileNotFoundError:
            logging.error("日志文件不存在")
        except Exception as e:
            logging.error(f"监控异常: {str(e)}")
        
        time.sleep(60)  # 每60秒检查一次

if __name__ == "__main__":
    logging.basicConfig(
        level=logging.INFO,
        format='%(asctime)s - %(levelname)s - %(message)s'
    )
    monitor_logs()

使用说明:

  1. 前置要求

    • 安装依赖:pip install twilio
    • 注册Twilio获取ACCOUNT_SIDAUTH_TOKEN
    • 申请Twilio电话号码(FROM_NUMBER
  2. 功能特点

    • 实时监控日志文件变化
    • 当出现"ERROR"或"500"等关键词时触发通知
    • 短信内容自动截断适配SMS长度限制
    • 内置异常处理和日志记录
  3. 部署建议

    • 使用systemd创建守护进程

    • 通过环境变量配置敏感信息:

      复制代码
      export TWILIO_ACCOUNT_SID="your_sid"
      export TWILIO_AUTH_TOKEN="your_token"
    • 修改代码中的关键词检测逻辑适配具体日志格式

  4. 安全提示

    • 不要将凭证直接写在代码中
    • 限制接收号码为管理员号码
    • 添加频率限制防止短信轰炸

注意:实际使用时需替换配置参数,并根据服务器日志格式调整错误检测逻辑。对于生产环境,建议添加日志轮转(rotation)处理机制。

相关推荐
w_t_y_y3 分钟前
机器学习常用的python包(二)工具箱scikit-learn
python·机器学习·scikit-learn
用户83562907805113 分钟前
Python 自动拆分 Word 文档教程:按分节符与分页符处理
后端·python
十五年专注C++开发14 分钟前
Oat++: 一个轻量级、高性能、零依赖的 C++ Web 框架
开发语言·c++·web服务·oatpp
陈天伟教授16 分钟前
心电心音同步分析-案例:原型设计一
开发语言·人工智能·python·语言模型·架构
我的xiaodoujiao16 分钟前
API 接口自动化测试详细图文教程学习系列9--Requests模块
python·学习·测试工具·pytest
Allen_LVyingbo18 分钟前
量子计算Dirac Notation基本教学—从零基础到读懂量子信息论文(下)
开发语言·人工智能·python·数学建模·量子计算
wjs202426 分钟前
Ruby File 类和方法
开发语言
xyq202430 分钟前
API 类别 - UI 核心
开发语言
Dxy123931021643 分钟前
Python路径算法简介
开发语言·python·算法
文慧的科技江湖44 分钟前
光储充协同的终极闭环:用SpringCloud微服务打造“发-储-充-用“智能能源网络 - 慧知开源充电桩管理平台
java·开发语言·spring cloud·微服务·能源·充电桩开源平台·慧知重卡开源充电桩平台