1、编辑shell脚本

[root@web03 ~/monitor_scripts]# cat inspect.sh
#!/bin/bash # 设置磁盘的阀值
disk_max=90 # 设置监控inode的分区
partition="/dev/sda3" # 设置磁盘inode使用率的阀值
disk_inode_use=90 # 这是mem的阀值
mem_max_use=90 # CPU的空闲程度
cpu_less=10 function disk_space_info() {
disk_used=$(df -h|grep /$|awk '{print $(NF-1)}'|cut -d% -f1)
if [ $disk_used -gt $disk_max ];then
Msg="TIME: $(date +%F-%T)
HostName: $(hostname)
IP: $(hostname -I)
Info: 磁盘使用率超过80%,请及时处理!"
mail $Msg
fi
} function disk_inode_use() {
inode_used=$(df -i /dev/sda3 |tail -1|awk -F'[ %]+' '{print $5}')
if [ $inode_used -gt $disk_inode_use ];then
Msg="TIME: $(date +%F-%T)
HostName: $(hostname)
IP: $(hostname -I)
Info: ${partition}分区inode使用率超过${disk_inode_use}%,请及时处理!"
mail $Msg
fi
} function monitor_mem() {
mem_used=$(free|grep Mem|awk '{printf ($3/$2)*100}'|cut -d. -f1)
if [ $mem_used -gt $mem_max_use ];then
Msg="TIME: $(date +%F-%T)
HostName: $(hostname)
IP: $(hostname -I)
Info: 内存使用率超过${mem_max_use}%,请及时处理!"
mail $Msg
fi
} function monitor_cpu() {
cpu_used=$(vmstat 1 3|awk 'NR>=3{x=x+$(NF-2)} END {printf("%u",x/3)}')
if [ $cpu_used -lt $cpu_less ];then
Msg="TIME: $(date +%F-%T)
HostName: $(hostname)
IP: $(hostname -I)
Info: cpu空闲率小于${cpu_less},请及时处理!"
mail $Msg
fi
} disk_space_info
disk_inode_use
monitor_mem
monitor_cpu

2、编辑python脚本发送邮件

在使用的时候把mail文件授予x权限,再复制到/usr/bin,目录下当作命令执行。

[root@web03 ~/monitor_scripts]# cat mail
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import sys
import smtplib
import email.mime.multipart
import email.mime.text server = 'smtp.qq.com' # 邮箱服务器
port = '25' # 邮箱服务器端口 def sendmail(server,port,user,pwd,msg):
smtp = smtplib.SMTP()
smtp.connect(server,port)
smtp.login(user, pwd)
smtp.sendmail(msg['from'], msg['to'], msg.as_string())
smtp.quit()
print('邮件发送成功email has send out !') if __name__ == '__main__':
msg = email.mime.multipart.MIMEMultipart() msg['Subject'] = '系统监控告警邮件' # 邮件标题
msg['From'] = '1402122292@qq.com' # 发送方的邮箱地址
msg['To'] = 'gonglovepj@gmail.com' # 目的邮箱地址 user = '1402122292@qq.com' # 登陆的用户
pwd = 'folgrpnvvjfxjijc' # 授权码 content='%s\n%s' %('\n'.join(sys.argv[1:4]),' '.join(sys.argv[4:])) #格式处理,专门针对我们的邮件格式 txt = email.mime.text.MIMEText(content, _charset='utf-8')
msg.attach(txt) sendmail(server,port,user,pwd,msg)

使用shell+python脚本实现系统监控并发送邮件的更多相关文章

  1. python进行linux系统监控

      python进行linux系统监控 Linux系统下: 静态指标信息: 名称 描述 单位 所在文件 mem_total 内存总容量 KB /proc/meminfo disks 磁盘相关信息 - ...

  2. python对 windows系统监控插件

    在python编程的windows系统监控中,需要监控监控硬件信息需要两个模块:WMI 和 pypiwin32 .

  3. shell脚本实例-系统监控

    shell脚本监控网站并实现邮件.短信报警shell进程监控脚本(发送邮件报警)Shell脚本监控服务器在线状态和邮件报警的方法 http://www.jbxue.com/jb/shell/ 11. ...

  4. 使用python脚本+zabbix前端监控云联网底层TCP数据流所负载的链路质量,并在丢包时联动保存MTR记录

    背景 目前国内各家云联网跨区域数据传输,会将数据流通过哈希运算负载到不同的底层链路上,而底层链路质量差异较大,这种情况导致的现象就是,使用传统的icmp监控线路正常,但是业务一直不稳定,所以才有了使用 ...

  5. Python脚本日志系统

    Python通过logging模块提供日志功能,关于logging模块的使用网络上已经有很多详细的资料,这里要分享的是怎样在实际工程中使用日志功能. 假设要开发一个自动化脚本工具,工程结构如下,Com ...

  6. 【原】Gradle调用shell脚本和python脚本并传参

    最近由于项目自动化构建的需要,研究了下gradle调用脚本并传参的用法,在此作个总结. Pre build.gradle中定义了$jenkinsJobName $jenkinsBuild两个Jenki ...

  7. 计算python脚本的运行时间

    首先说一下我遇到的坑,生产上遇到的问题,我调度Python脚本执行并监控这个进程,python脚本运行时间远远大于python脚本中自己统计的程序执行时间. 监控python脚本执行的时间是36个小时 ...

  8. Linux 服务器系统监控脚本 Shell【转】

    转自: Linux 服务器系统监控脚本 Shell - 今日头条(www.toutiao.com)http://www.toutiao.com/i6373134402163048961/ 本程序在Ce ...

  9. Shell 脚本实现 Linux 系统监控

    一.实验介绍 1.1 实验内容 本课程实现 shell 脚本监控系统的各项参数,并可以将脚本加入系统环境中,可以直接在终端里执行.还添加了几个参数,一个脚本可以执行不同的操作. 1.2 知识点 本实验 ...

随机推荐

  1. 将一个字符串进行反转:将字符串中指定部分进行反转。比如“abcdefg”反转为”abfedcg”

    将一个字符串进行反转:将字符串中指定部分进行反转.比如"abcdefg"反转为"abfedcg"方式一:转换为char[] public String reve ...

  2. (十四)docker exec 详解

    1. 作用 在运行的容器中执行命令 2. 语法 docker exec [OPTIONS] CONTAINER COMMAND [ARG...] OPTIONS说明: -d :分离模式: 在后台运行 ...

  3. JVM调优基础到进阶

    GC和GC Tuning GC的基础知识 1.什么是垃圾 C语言申请内存:malloc free C++: new delete c/C++ 手动回收内存 Java: new ? 自动内存回收,编程上 ...

  4. go中panic源码解读

    panic源码解读 前言 panic的作用 panic使用场景 看下实现 gopanic gorecover fatalpanic 总结 参考 panic源码解读 前言 本文是在go version ...

  5. Tree Recovery UVA - 536

    Little Valentine liked playing with binary trees very much. Her favorite game was constructing rando ...

  6. k8s service NodePort 方式向外发布

    k8s service NodePort 方式向外发布 k8s 无头service 方式向内发布 k8s service 服务发现 {ServiceName}.{Namespace}.svc.{Clu ...

  7. ECMAScript 2019(ES10)新特性简介

    简介 ES10是ECMA协会在2019年6月发行的一个版本,因为是ECMAScript的第十个版本,所以也称为ES10. 今天我们讲解一下ES10的新特性. ES10引入了2大特性和4个小的特性,我们 ...

  8. Android平台下Dalvik层hook框架ddi的研究

    通过adbi,可以对native层的所有代码进行hook.但对于Android系统来说,这还远远不够,因为很多应用都还是在Dalvik虚拟机中运行的. 那么,有没有什么办法可以对Dalvik虚拟机中跑 ...

  9. 将Android源码导入eclipse中的方法以及编译Android源码指定模块

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/53365659 将android源码导入eclipse.androidstudio. ...

  10. 逆向 stdio.h 函数库 fwrite 函数(调试版本)

    0x01 fwrite 函数 函数原型: size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream) 函数功能:把 ...