1. #!/usr/bin/env python
  2. #-*-coding:utf-8-*-
  3. #CreateDate:2017/04/14
  4. #Author:Eivll0m
  5. #ScriptName:monitor-log.py
  6. #Crontab:*/5 * * * * /app/sbin/monitor-log.py &>/dev/null
  7.  
  8. import os
  9. import time
  10. import stat
  11. import socket
  12. import smtplib
  13. from email.mime.text import MIMEText
  14. #from email.mime.multipart import MIMEMultipart
  15. from email.header import Header
  16. from email.utils import parseaddr, formataddr
  17.  
  18. def formatAddr(s):
  19. name, addr = parseaddr(s)
  20. return formataddr((Header(name, 'utf-8').encode(), addr))
  21. def sendMail(body,subject):
  22. smtp_server = 'smtp.exmail.qq.com'
  23. from_mail = 'xxx@xxxx.com'
  24. mail_pass = 'password'
  25. to_mail = ['aaa@xxx.com','bbb@xxx.com','ccc@xxx.com']
  26. cc_mail = ['ddd@xxx.com','eee@xxx.com','fff@xxx.com','ggg@xxx.com','hhh@xxx.com']
  27. msg = MIMEText(body,'html','utf-8')
  28. msg['From'] = formatAddr('日志监控 <%s>' % from_mail).encode()
  29. msg['To'] = ','.join(to_mail)
  30. msg['Cc'] = ','.join(cc_mail)
  31. msg['Subject'] = Header(subject, 'utf-8').encode()
  32. try:
  33. s = smtplib.SMTP()
  34. s.connect(smtp_server, "")
  35. s.login(from_mail, mail_pass)
  36. s.sendmail(from_mail, to_mail+cc_mail, msg.as_string())
  37. s.quit()
  38. except smtplib.SMTPException as e:
  39. print "Error: %s" % e
  40.  
  41. def GetText(file):
  42. cmd = "awk -vf='%s' 'BEGIN{while(getline < f){j++;if(/ERROR/)i=j}}NR>=i' %s" %(file,file)
  43. text = os.popen(cmd).readlines()
  44. return ''.join(text)
  45.  
  46. def CheckFileStat(file):
  47. FileStats = os.stat(file)
  48. ModifyTime = time.mktime(time.strptime(time.ctime(FileStats[stat.ST_MTIME]),"%a %b %d %H:%M:%S %Y")) + 300
  49. LocalTime = time.time()
  50. if LocalTime < ModifyTime:
  51. return True
  52. else:
  53. return False
  54.  
  55. if __name__ == "__main__":
  56. logs = ['/app/log/channelmanage/channelerror.log','/app/log/assetmanage/error.log']
  57. LocalIP = socket.gethostbyname(socket.gethostname())
  58. for log in logs:
  59.   if CheckFileStat(log):
  60.   sj = log.split('/')[3] + '日志报错' + '【主机IP:' + LocalIP + '】'
  61.   body = GetText(log)
  62.   sendMail(body,sj)

监控邮件:

tomcat错误日志监控脚本的更多相关文章

  1. 运维开发实践——基于Sentry搭建错误日志监控系统

    错误日志监控也可称为业务逻辑监控, 旨在对业务系统运行过程中产生的错误日志进行收集归纳和监控告警.似乎有那么点曾相识?没错... 就是提到的“APM应用性能监控”.但它又与APM不同,APM系统主要注 ...

  2. Sentry错误日志监控你会用了吗?

    无论作为新手还是老手程序员在程序的开发过程中,代码运行时难免会抛出异常,而且项目在部署到测试.生产环境后,我们便不可能像在开发时那样容易的及时发现处理错误了.一般我们都是在错误发生一段时间后,错误信息 ...

  3. tomcat健康检查监控脚本

    #!/bin/sh#自动监控tomcat脚本并且执行重启操作#获取tomcat_IDTomcatID=`ps -ef|grep tomcat|grep -v "grep"|grep ...

  4. MySQL慢日志监控脚本实例剖析

    公司线上的 MySQL 慢日志,之前一直没有做好监控.趁着上周空闲,我就把监控脚本写了下,今天特地把代码发出来与51博友分享一下. 针对脚本的注解和整体构思,我会放到脚本之后为大家详解. 1 2 3 ...

  5. sentry_sdk 错误日志监控 Flask配置

    https://www.cnblogs.com/sui776265233/p/11348169.html 开源的平台,为小服务日志监控统一管理 pip install --upgrade sentry ...

  6. 第四百零五节,centos7下搭建sentry错误日志服务器,接收python以及Django错误,

    第四百零五节,centos7下搭建sentry错误日志服务器,接收python以及Django错误, 注意:版本,不然会报错 Docker >=1.11Compose >1.6.0 通过d ...

  7. zabbix的日志监控

    前提条件是该日志文件对于启动zabbix agent进程的用户开启了可读权限,而且该日志的路径对该用户开方x权限,让能取到这个日志文件 第一个参数可以不用引号,前提是zabbix用户可以进入文件路径, ...

  8. 一种轻量级的微信小程序日志监控的方法

    今天一个活动要写个H5,明天一个功能要用小程序,天天都在写bug.用户反馈小程序用起来有问题还特么还不知道到底出了啥bug,反馈多了,老板要扣工资了!看来挖了太多坑不填也不行,程序异常还是要主动追踪, ...

  9. 前端异常日志监控 - 使用Sentry

    背景 现在的前端项目越来越复杂,在不同的客户端会产生各种在开发人员机器上不会出现的问题.当用户报告一个问题给开发人员的时候,开发人员无法直接定位问题.在此前,听过一次鹅厂的前端人员,他们对QQ里面的网 ...

随机推荐

  1. 多线程Java Socket编程示例

    package org.merit.test.socket; import java.io.BufferedReader; import java.io.IOException; import jav ...

  2. 20155238 《Java程序设计》实验一(Java开发环境的熟悉)实验报告

    实验内容 使用JDK编译.运行简单的Java程序. 使用Eclipse 编辑.编译.运行.调试Java程序. 实现学生成绩管理功能,并进行测试. 实验步骤及结果 (一)命令行下Java程序开发 编译运 ...

  3. 课下测试ch01修改补交

    由于当时学习态度有问题,没有注意到第一次的课下测试,虽然在当周的总结中就进行补交,但是当时态度并没有很认真,可能没有引起老师的注意,现在重新修改,望老师谅解. (单选题 | 1 分) Amdahl定律 ...

  4. PostgreSQL的xlog实验一

    磨砺技术珠矶,践行数据之道,追求卓越价值 回到上一级页面: PostgreSQL基础知识与基本操作索引页     回到顶级页面:PostgreSQL索引页 一,从initdb开始,initdb执行结束 ...

  5. 《C++ Primer》读书笔记(二)-变量和基本类型

    bool类型与其他类型转换时,0为false,1为true 浮点数赋值给整数的时候,进行近似处理,结果仅保留浮点数小数点之前的部分 整数赋值给浮点数的时候,小数部分记为0,如果该整数超过了浮点类型的容 ...

  6. 2-功能1:基于用户认证组件和Ajax实现登录验证(图片验证码)

    1.登录页面的设计 (1)label标签的id属性 label标签的id属性,点击label标记,相当于点击了input框 bootstarp样式 class="form-group&quo ...

  7. 实现对象属性的lazy-loading(延迟加载)

    一.延迟加载器LazyLoader作用:       说到延迟加载,应该经常接触到,尤其是使用Hibernate的时候,本篇将通过一个实例分析延迟加载的实现方式.LazyLoader接口继承了Call ...

  8. LOJ #6089. 小 Y 的背包计数问题

    LOJ #6089. 小 Y 的背包计数问题 神仙题啊orz. 首先把数分成\(<=\sqrt n\)的和\(>\sqrt n\)的两部分. \(>\sqrt n\)的部分因为最多选 ...

  9. JAVAWEB servlet和jsp的权限访问控制

    要想防止用户直接访问某个页面,那么就需要要求他带着session来访问,我们才让他访问,所以登录时设置的session就用上了 在用户没有session时,访问servlet或者jsp时直接重定向页面 ...

  10. [BZOJ4475][JSOI2015]子集选取[推导]

    题意 题目链接 分析 显然可以看成一个位数为 \(n\) 的二进制数然后每一位分开考虑然后求和.最后的答案是 \(w^n\) 的形式. 考虑一个dp. 定义状态 \(f_{i}\) 表示选择了长度为 ...