`

Linux中使用shell+python实现监控系统负载+邮件报警

 
阅读更多

1. 获取ip、cpu、内存信息、loadAverage

ip使用ifconfig获得

localip=$(ifconfig eth0 | grep 'inet addr' | awk '{print $2}' | cut -f2 -d:)

空闲cpu由mpstat获得

cpuidle=$(mpstat | grep all | awk '{print $11}')

内存使用情况由free获得

freemem=$(free | grep Mem | awk '{print $4}')

totalmem=$(free | grep Mem | awk '{print $2}')

pcent=$(free | grep Mem | awk '{print $4/$2}')

loadAverage由uptime获得

loadavg1=$(uptime | awk '{print $10}' | cut -f1 -d,)
loadavg5=$(uptime | awk '{print $11}' | cut -f1 -d,)
loadavg15=$(uptime | awk '{print $12}')

[python] view plaincopy
  1. ./etc/profile
  2. AlertNginxCpu=50
  3. AlertNginxMem=50
  4. AlertPcent=0.5
  5. AlertCpu=50
  6. AlertLoad=1
  7. msg=
  8. Subject='服务器超载警报'
  9. mailto(){
  10. /application/search/sendmail.py"$Subject""$msg"
  11. msg=
  12. Subject='服务器超载警报'
  13. }
  14. date=$(date)
  15. localip=$(/sbin/ifconfigeth0|grep'inetaddr'|awk'{print$2}'|cut-f2-d:)
  16. nginxcpu=$(psaxu|grepnginx|grepsearch|grepworker|awk'{print$3}')
  17. nginxmempcent=$(psaxu|grepnginx|grepsearch|grepworker|awk'{print$4}')
  18. nginxmem=$(psaxu|grepnginx|grepsearch|grepworker|awk'{print$6}')
  19. cpuidle=$(mpstat|grepall|awk'{print$11}')
  20. freemem=$(free|grepMem|awk'{print$4}')
  21. totalmem=$(free|grepMem|awk'{print$2}')
  22. freemempcent=$(free|grepMem|awk'{print$4/$2}')
  23. freeswap=$(free|grepSwap|awk'{print$4}')
  24. totalswap=$(free|grepSwap|awk'{print$2}')
  25. freeswappcent=$(free|grepSwap|awk'{print$4/$2}')
  26. loadavg1=$(uptime|awk'{print$10}'|cut-f1-d,)
  27. loadavg5=$(uptime|awk'{print$11}'|cut-f1-d,)
  28. loadavg15=$(uptime|awk'{print$12}')
  29. echo$date
  30. echo$localip
  31. echo'空闲cpu:'$cpuidle
  32. echo'空闲内存:'$freemem
  33. echo'总内存:'$totalmem
  34. echo'空闲内存比:'$freemempcent
  35. echo'空闲交换内存:'$freeswap
  36. echo'总交换内存:'$totalswap
  37. echo'空闲交换内存比:'$freeswappcent
  38. echo$loadavg1
  39. echo$loadavg5
  40. echo$loadavg15
  41. alldata=''$date'|'$localip'|nginx:'$nginxcpu','$nginxmempcent'('$nginxmem')|cpu_idle:'$cpuidle'|Mem:'$freemem'/'$totalmem'='$freemempcent'|Swap:'$freeswap'/'$totalswap'='$freeswappcent'|loadavg:'$loadavg1','$loadavg5','$loadavg15''
  42. echo$alldata>>monitor.log
  43. if[$(echo"$nginxcpu>=$AlertNginxCpu"|bc)=1];then
  44. msg=''$alldata'|nginxcpu'$nginxcpu':高于'$AlertNginxCpu''
  45. Subject=''$Subject':'$localip':nginxcpu'$nginxcpu'高于'$AlertNginxCpu''
  46. echo$msg>>monitor.log
  47. mailto
  48. fi
  49. if[$(echo"$nginxmempcent>=$AlertNginxMem"|bc)=1];then
  50. msg=''$alldata'|nginxmem'$nginxmempcent':高于'$AlertNginxMem''
  51. Subject=''$Subject':'$localip':nginxmem'$nginxmempcent'高于'$AlertNginxMem''
  52. echo$msg>>monitor.log
  53. mailto
  54. fi
  55. if[$(echo"$freeswappcent<=$AlertPcent"|bc)=1];then
  56. msg=''$alldata'|剩余虚拟内存占比'$freeswappcent':低于'$AlertPcent''
  57. Subject=''$Subject':'$localip':剩余虚拟内存占比'$freeswappcent'低于'$AlertPcent''
  58. echo$msg>>monitor.log
  59. mailto
  60. fi
  61. if[$(echo"$cpuidle<=$AlertCpu"|bc)=1];then
  62. msg=''$alldata'|cpu空闲时间'$cpuidle':低于'$AlertCpu''
  63. Subject=''$Subject':'$localip':cpu空闲时间'$cpuidle'低于'$AlertCpu''
  64. echo$msg>>monitor.log
  65. mailto
  66. fi
  67. if[$(echo"$loadavg1>=$AlertLoad"|bc)=1];then
  68. msg=''$alldata'|load'$loadavg1':高于'$AlertLoad''
  69. Subject=''$Subject':'$localip':load'$loadavg1'高于'$AlertLoad''
  70. echo$msg>>monitor.log
  71. mailto
  72. fi
  73. if[-n$msg];then
  74. echo'系统运行正常'
  75. fi


2. 空闲cpu小于cpu报警阈值或空闲内存比例低于内存报警阈值或loadAverage超过阈值时发送邮件报警

[python] view plaincopy
  1. #!/usr/bin/envpython
  2. importsmtplib
  3. importsys
  4. fromemail.mime.textimportMIMEText
  5. mailto_list=[""]
  6. mail_host="smtp.126.com"
  7. mail_user="monitor_algo"
  8. mail_pass=""
  9. mail_postfix="126.com"
  10. defsend_mail(to_list,sub,context):
  11. me=mail_user+"<"+mail_user+"@"+mail_postfix+">"
  12. msg=MIMEText(context)
  13. msg['Subject']=sub
  14. msg['From']=me
  15. msg['To']=";".join(to_list)
  16. try:
  17. send_smtp=smtplib.SMTP()
  18. send_smtp.connect(mail_host)
  19. send_smtp.login(mail_user,mail_pass)
  20. send_smtp.sendmail(me,to_list,msg.as_string())
  21. send_smtp.close()
  22. returnTrue
  23. except(Exception,e):
  24. print(str(e))
  25. returnFalse
  26. if__name__=="__main__":
  27. #print("start")
  28. #forainrange(1,len(sys.argv)):
  29. #printsys.argv[a]
  30. if(True==send_mail(mailto_list,sys.argv[1],sys.argv[2])):
  31. pass
  32. #print("sucess")
  33. else:
  34. pass
  35. #print("failed")


3. 加入crontab定时任务

注意一点,crontan中的环境变量与用户环境的环境变量不一样,因其不会从缺省的用户profile文件中读入环境变量参数,最简单的方法是用source命令(.)

*/1 * * * * . /etc/profile; sh /application/search/monitor.sh
分享到:
评论

相关推荐

    快捷运维,代号kjyw,项目基于shell、python,运维脚本工具库,收集各类运维常用工具脚本,实现快速安装经常使用的脚本

    Shell脚本是Linux和Unix系统中广泛使用的命令行脚本语言,用于自动化执行一系列任务。在kjyw项目中,Shell脚本被用来创建快速安装流程,例如,安装Nginx、MySQL等软件时,只需运行相应的Shell脚本,即可自动处理依赖...

    Linux zabbix自定义监控及报警实现过程解析

    首先,我们的目标是监控`iostat`命令中的`tps`数据,该指标代表每秒处理的事务数,对于评估系统性能特别是磁盘负载至关重要。在被监控的Linux服务器上,我们需要进行以下步骤: 1. **自定义监控项**:在`/etc/...

    基于ganglia的集群监控软件的设计与实现大学本科毕业论文.doc

    在实际开发中,除了集成Ganglia核心组件,还需考虑监控数据的存储策略、报警阈值设定、系统性能调优以及与其他管理系统(如Nagios、Zabbix)的集成,以提高监控的全面性和准确性。 7. 结论 基于Ganglia的集群监控...

    Nagios远程监控Windows服务器的安装与配置

    - **主机资源监控**:包括CPU负载、磁盘使用率、系统日志等;对于Windows主机,还可以通过NSClient++插件进行监控。 - **自定义插件支持**:用户可以编写自己的插件来监控特定的情况,如温度监测、警告信息等。 -...

    Zabbix使用手册V2.0.pdf

    《Zabbix使用手册V2.0.pdf》是针对企业级监控系统Zabbix的详细指南,旨在帮助用户深入了解和有效利用Zabbix构建高效、稳定的监控环境。Zabbix是一款开源的网络监控解决方案,它能够监控各种网络参数,确保系统的运行...

    nagios安装文档

    - **主机资源监控**:包括CPU负载、磁盘使用率、系统日志等,对于Windows主机,可使用NSClient++插件实现监控。 - **自定义插件支持**:用户可以根据需求编写自己的插件,用于监控特定指标(如温度、警报等)。 - **...

    nagios监控配置

    - **主机资源监控**:例如CPU负载、磁盘使用率、系统日志等。此外,也支持Windows主机的监控(通过NSClient++插件)。 - **自定义插件**:用户可以编写自己的插件来收集特定的数据,如温度监测、警报信息等。 - **...

    nagios详解.docx

    Nagios是一款强大的开源系统和网络监控工具,广泛应用于Windows、Linux和Unix环境,以及网络设备如交换机、路由器等的监控。它能够实时监测主机状态和服务,如SMTP、POP3、HTTP等网络服务,以及CPU负载、磁盘使用率...

    nagios初步搭建文档

    2. **主机资源监控**:它可以监控CPU负载、磁盘使用情况、系统日志,并支持使用NSClient++监控Windows主机。 3. **自定义插件**:用户可以通过编写插件来监控几乎任何情况,支持多种编程语言,如shell script、C++、...

    运维实践指南

    《运维实践指南》是一本综合性的IT运维知识手册,涵盖了Linux系统管理、脚本编程、数据库管理、Web服务、监控系统、存储技术、物理机、虚拟化及云服务、负载均衡等多个方面的知识,适合IT行业的专业人士阅读和实践。...

    服务器运维工程师的工作职责(20201209212646).pdf

    5. **脚本编程与自动化**:熟练使用Shell、Perl、Python等脚本语言,编写自动化运维脚本,提高工作效率,减少人为错误。 6. **高可用与负载均衡**:熟悉高可用集群和负载均衡的规划与搭建,以及常规网络安全技术,...

    如何打破薪资瓶颈-50W年薪运维岗位技能剖析

    总结起来,打破薪资瓶颈的50W年薪运维岗位技能包括:扎实的Linux基础,监控报警能力,自动化运维工具的运用,强大的故障排查和编程技能,对云计算的深入理解,以及优秀的团队协作和项目管理能力。只有不断学习和实践...

    Nagios - System and Network Monitoring

    - **脚本执行**:编写Shell脚本或Python脚本来执行复杂的恢复任务,并将其集成到Nagios中。 - **事件管理**:对发生的每个事件进行跟踪记录,便于后续分析问题原因及优化改进措施。 #### 知识点八:社区支持与文档...

    b.zip_introduced6bb_输入

    例如,在Linux系统中,可以使用`/proc/cpuinfo`文件,或者通过`psutil`这样的Python库来获取CPU使用率、核心数等信息。在Windows系统中,可以使用`wmic`命令或者`PerformanceCounter`类来获取类似数据。 处理这些...

    大数据运维工程师的基本职责[修改版].pdf

    - 任职资格:具备丰富的Hadoop生态系统运维经验,熟练使用Perl/Python/Shell等脚本语言,能够独立解决操作系统层面的问题。 7. **监控与自动化** - 职责:建立监控和报警系统,对业务关键指标进行监控,快速响应...

    网站运维技术与实践_样章

    - **操作系统安装与设置**:常见的服务器操作系统有Linux、Windows Server等,其中Linux因其开源免费、安全性高而被广泛使用。 - **虚拟化技术**:通过虚拟化技术可以将一台物理服务器划分为多个虚拟机,提高资源...

    mongodb开发精要 书籍 两本PDF

    1. CRUD操作:MongoDB提供了CRUD(Create、Read、Update、Delete)的基本操作,你可以使用Shell、各种语言驱动程序(如Python、Java、Node.js等)或者MongoDB的管理工具来执行这些操作。 2. 查询语言:MongoDB的查询...

Global site tag (gtag.js) - Google Analytics