最代码官方
2017-05-28 23:15:26
原
python开发监控linux cpu高于指定值的脚本,并统计nginx日志访问记录最高的ip发送邮件
最代码经常被莫名的ip攻击到cpu超高导致服务异常,所以通过python实现了一个监控脚本,可以通过crontab每隔1分钟监控cpu的使用率,如果超过指定值70%则统计下nginx访问的最近10000条log中,最高访问记录的10个ip并且发邮件到指定邮箱。
# encoding=utf8 import re import os import commands ##定时监控cpu,超过80%则统计nginx访问log,将10000行内访问记录数最大的前10名ip和log记录发邮件 cpu_max = 70 zuidaima_nginx_log_path = "/usr/local/nginx/logs/www.zuidaima.com.access.log" # cpu 1秒刷新采集5次 sar_cpu_shell = "sar -u 1 5|awk -F\" \" '{print $3}'" tail_nginx_shell = "tail -n 10000 " + zuidaima_nginx_log_path+" |grep -v \"GET /user/reminds\"|grep -v \" 403 \"" pattern = re.compile(r'^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}') mail_shell = "echo \"%s\" | mail -s \"$(echo -e \"%s\nContent-Type: text/html\")\" zuidaima@qq.com" def parse_cpu(): outputs = commands.getoutput(sar_cpu_shell) cpu_array = outputs.split("\n") ret = cpu_array[len(cpu_array) - 1] return float(ret) def tail_date_nginx_log(): ret = commands.getoutput(tail_nginx_shell) return ret def parse_ip_view(logs): log_list = logs.split("\n") ret = {} ip_log_dic = {} for log in log_list: match = pattern.match(log) if match: ip = match.group(0) if ip in ip_log_dic: ip_view = ip_log_dic[ip] else: ip_view=[] ip_view.append(log) ip_log_dic[ip] = ip_view sorted_ip_log_dic = sorted(ip_log_dic.iteritems(), key=lambda ip_view: len(ip_view[1]), reverse=True) #print type(sorted_ip_log_dic) l = len(sorted_ip_log_dic) if len > 10: l = 10 ret = sorted_ip_log_dic[0:l] return ret def mail(content): content_str="" for log in content: log0=log[1][0].replace("\"","'") content_str=content_str+" "+log[0]+" "+str(len(log[1]))+" <div style='color:red'>"+log0+"</div><br/><br/>" #content_str = ''.join(content).replace("\"","'") mail_shell_str = (mail_shell % (content_str, "cpu monitor")) # print mail_shell_str commands.getoutput(mail_shell_str) def main(): cpu = parse_cpu() #print cpu,cpu<cpu_max if (cpu < cpu_max): return logs = tail_date_nginx_log() ip_views = parse_ip_view(logs) mail(ip_views) main()
通过crontab定时1分钟调用
*/1 * * * * python /data/src/zuidaima_script/src/com/zuidaima/script/jarvis.py
运行截图
最代码是阿里云服务器,自带的python版本是2.4.3,如果语法有兼容性问题,牛牛们可以根据情况做调整。enjoy it
喜欢钢铁侠的jarvis机器人,所以命名为jarvis.py,以后还会有更多类似的jarvis小机器人上线处理你想要的一些繁琐,重复,有规律的任务。
猜你喜欢
请下载代码后再发表评论
相关代码
最近下载
qiheideguang LV16
2023年3月29日
lifengxiang998 LV1
2022年7月5日
马儿爱吃兰 LV10
2021年6月8日
blockC LV10
2019年11月23日
mengnan8989 LV22
2019年4月21日
m719067455 LV20
2019年3月26日
摘星星的老鼠 LV8
2019年2月24日
hhhhhefd LV17
2018年9月28日
jic499 LV27
2018年4月14日
byj1987 LV18
2018年1月18日
最近浏览
爽朗的凯 LV2
2023年11月20日
wangjie49 LV7
2023年11月3日
123456dian LV6
2023年10月21日
三几个 LV11
2023年8月8日
flyjoe LV3
2023年7月11日
阿金斯顾客1
2023年6月30日
暂无贡献等级
妖刀飞姬杯 LV2
2023年6月11日
2292250314 LV2
2023年5月28日
lichun cai LV1
2023年5月24日
zhb1991
2023年4月27日
暂无贡献等级