Python磁盘监控、日志分析监控脚本
来源:互联网 发布:php 输出源代码 编辑:程序博客网 时间:2024/05/01 13:44
前言:
公司在十一放假期间需要对服务器和线上项目进行异常监控,以便在出现问题的时候能及时发现,及时地处理。因为公司异常监控系统还不够完善,特意在Linux服务器上加上Python监控脚本来实现简单的监控功能。
功能:
1、磁盘使用率报警功能。在磁盘使用率超过我们定义的阈值时,会发送邮件到我们的邮箱来通知我们磁盘空间将要不足。
2、日志分析监控功能。根据关键字分析监控系统日志,并且报警,使系统问题能及时发现,及时处理。
代码:log_monitor_real_time.py
#coding:utf-8import osimport reimport smtplibimport datetimeimport shelvefrom email.mime.text import MIMEText# 硬盘使用率报警阀值hd_usage_rate_threshold = 80# 要发给谁mailto_list=["******@17guagua.com","******@17guagua.com"]# 设置服务器,用户名、口令以及邮箱的后缀mail_host="smtp.17guagua.com"mail_user="******@17guagua.com"mail_pass="******"mail_postfix="17guagua.com"# 日志偏移log_offset = shelve.open('log_offset')# 取当天日期log_path_suffix=(datetime.date.today()).strftime('%Y-%m-%d')# 当前日期keycur_time = 'cur_time'# 日志路径app_info = {}app_info['event'] = ['/opt/log/guagua_web_event_extends/event-ext-'+log_path_suffix+'.log',['失败','异常'],[]]# 处理日志def analysis_log(appName ,appInfo): cur_time_val = get_shelve_value(cur_time) if cur_time_val == -1: set_shelve_value(cur_time, log_path_suffix) elif log_path_suffix != cur_time_val: set_shelve_value(appName, 0) set_shelve_value(cur_time, log_path_suffix) f1 = file(appInfo[0], "r") offset = get_shelve_value(appName) if offset != -1: f1.seek(offset,1) else: set_shelve_value(appName, 0) count = 0 exceptionStr = "" for s in f1.readlines(): searchKey = appInfo[1] if len(searchKey) > 0: for i in searchKey: li = re.findall(i, s) if len(li) > 0: count = count + li.count(i) exceptionStr = exceptionStr + " " + s else: li = re.findall('Exception', s) if len(li) > 0: count = count + li.count('Exception') exceptionStr = exceptionStr + " " + s set_shelve_value(appName, f1.tell()) print appName + " 异常数量为 " + str(count) return [count, "---------------------------------" + appName + " ----------------------------- \n " + exceptionStr]#shelve 处理def set_shelve_value(key, value): log_offset[key] = valuedef get_shelve_value(key): if log_offset.has_key(key): return log_offset[key] else: return -1def del_shelve_value(key): if log_offset.has_key(key): del log_offset[key]# 发送邮件def send_mail(to_list,sub,content): me = mail_user + "<"+ mail_user + "@" + mail_postfix + ">" msg = MIMEText(content, 'html', 'utf-8') msg['Subject'] = sub msg['From'] = me msg['To'] = ";".join(to_list) try: s = smtplib.SMTP() s.connect(mail_host) s.login(mail_user,mail_pass) s.sendmail(me, to_list, msg.as_string()) s.close() return True except Exception, e: print str(e) return False# 获得外网ipdef get_wan_ip(): cmd_get_ip = "/sbin/ifconfig |grep 'inet addr'|awk -F\: '{print $2}'|awk '{print $1}' | grep -v '^127' | grep -v '192'" get_ip_info = os.popen(cmd_get_ip).readline().strip() return get_ip_info# 检测硬盘使用def check_hd_use(): cmd_get_hd_use = '/bin/df' try: fp = os.popen(cmd_get_hd_use) except: ErrorInfo = r'get_hd_use_error' print ErrorInfo return ErrorInfo re_obj = re.compile(r'^/dev/.+\s+(?P<used>\d+)%\s+(?P<mount>.+)') hd_use = {} for line in fp: match = re_obj.search(line) if match is not None: hd_use[match.groupdict()['mount']] = match.groupdict()['used'] fp.close() return hd_use# 硬盘使用报警def hd_use_alarm(): for v in check_hd_use().values(): if int(v) > hd_usage_rate_threshold: if send_mail(mailto_list, 'System Disk Monitor', 'nSystem Ip:%s\nSystem Disk Use:%s' % (get_wan_ip(),check_hd_use())): print "sendmail success!!!!!" else: print "disk not mail"if __name__ == '__main__': hd_use_alarm() exceptionCount = 0 exceptionContents = ""; for key in app_info: exceptionContent = analysis_log(key, app_info[key]) exceptionCount += exceptionContent[0] exceptionContents += exceptionContent[1] exceptionContents = exceptionContents + "*********************************************** \n" print exceptionCount if exceptionCount > 0: if send_mail(mailto_list, get_wan_ip() + " 日志报警",exceptionContents): print "发送成功" else: print "发送失败"
说明:
1、设置磁盘报警阈值
2、指定收件人(一个或者多个)
3、增量分析日志 ,例如 如果设置定时任务每一个小时执行,那么分析的文件为 前一个小时的文件内容,可以根据时间调整
4、指定日志和关键字(一个或者多个)
5、指定多个系统日志路径
使用方法:
脚本类型 : python
脚本路径 : 家目录 cd ~
需要配合linux 定时任务(crontab -e), 比如 0 /1 * * python /root/log_monitor_real_time.py (每一个小时执行一次)
注意事项:
1、测试时可以先手动执行脚本 python /root/log_monitor_real_time.py ,每次执行会生成 log_offset 文件,
2、如果再次测试需要先把这个文件删掉,因为这个文件记录了文件偏移量,如果不删除,读到的文件开始位置将会是上次处理过的位置
如果想看效果,大家就自己试试吧~~~
0 0
- Python磁盘监控、日志分析监控脚本
- python 分析监控日志
- 【Python运维脚本】Python监控磁盘
- python监控脚本,监控CPU,磁盘报警时发送邮件
- 日志监控分析系统
- Python监控动态日志
- python流量监控脚本
- zabbix3.2监控日志脚本
- 磁盘监控
- Ubuntn shell脚本之磁盘流量监控
- Nagios自己编写监控磁盘脚本check_disk
- top监控CPU、内存、磁盘脚本
- python动态监控日志内容
- Mysql linux监控脚本分析
- Python 监控 Data Guard 脚本
- python监控脚本的编写
- python脚本监控nginx服务
- zabbix监控nginx(python脚本)
- 传智博客2015年最新版iOS基础视频_最适合初学者入门
- 我的CSDN博客阅读器完成啦!!
- 2015年终总结
- java 线程中yield的用法
- 如何改变Xcode字体大小?
- Python磁盘监控、日志分析监控脚本
- 回溯 dp FatMouse and Cheese
- Android性能专项测试之TraceView工具(Device Monitor)
- 守护线程Daemon
- LightOJ-1370 Bi-shoe and Phi-shoe
- Java对象池技术的原理及其实现
- 理解LSTM网络
- 编译过程的五个阶段
- Xcode自动注释插件:VVDocumenter-Xcode