系统状态检查脚本

#!/usr/bin/python
# -*- coding: utf8 -*-
import time
import os
import smtplib
from email.mime.text import MIMEText

# get date,time,timespace
def getTime():
    todayTime = []
    timpeStamp=int(time.time())
    timeDate = time.strftime("%Y-%m-%d",time.localtime(timpeStamp))
    timeTime = time.strftime("%H:%M:%S",time.localtime(timpeStamp))
    todayTime = [timpeStamp,timeDate,timeTime]   
    return todayTime

# get system load  1min 5min 15min
def getLoad():
    filepath = ‘/proc/loadavg‘
    sysload = []
    f = open(filepath)
    loadinfo = f.read()
    f.close()
    sysload = loadinfo.split()[0:3]
    return sysload

# get memory used
def getMemUsed():
    filepath = ‘/proc/meminfo‘
    mem = {}
    mem_f = open(filepath)
    meminfo = mem_f.readlines()
    mem_f.close()
    for line in meminfo:
        name,value = line.split(‘:‘)[0],int(line.split(‘:‘)[1].split()[0])
        mem[name]=value
    mem[‘Used‘] = mem[‘MemTotal‘]-mem[‘MemFree‘]-mem[‘Buffers‘]-mem[‘Cached‘]
    mem[‘Used_per‘] = round((float(mem[‘Used‘])/mem[‘MemTotal‘]*100),2)
    return mem[‘Used_per‘]

# get network traffic rz and tx speed
def getNetTraffic():
    filepath = ‘/proc/net/dev‘
    interface = ‘eth0‘
    traffic = {}
    trafficOld_f = open(filepath)
    trafficinfo =trafficOld_f.readlines()
    trafficOld_f.close()
    
    for line in trafficinfo:
        if interface in line:
            traffic[‘rx_value_old‘],traffic[‘tx_value_old‘] = line.split(‘:‘)[1].split()[0],line.split(‘:‘)[1].split()[8]
    
    time.sleep(1)

    trafficNew_f = open(filepath)
    trafficinfo = trafficNew_f.readlines()
    trafficNew_f.close()
    
    for line in trafficinfo:
        if interface in line:
            traffic[‘rx_value_new‘],traffic[‘tx_value_new‘] = line.split(‘:‘)[1].split()[0],line.split(‘:‘)[1].split()[8]

    rxspeed = round((int(traffic[‘rx_value_new‘])-int(traffic[‘rx_value_old‘]))/1024,5)
    txspeed = round((int(traffic[‘tx_value_new‘])-int(traffic[‘tx_value_old‘]))/1024,5)
    
    return [rxspeed,txspeed]

# get socket number by the spefic
def getSocketNum():
    socketinfo=os.popen(‘ss -an‘).readlines()
    port = ‘22‘
    status = ‘ESTAB‘
    socketNum = 0
    for socket in socketinfo:
        if status in socket:
            if port in socket.split()[3].split(‘:‘)[1]:
                socketNum += 1
    return socketNum 

# flatten the list
def flatten(l):  
    for el in l:  
        if hasattr(el, "__iter__") and not isinstance(el, basestring):  
            for sub in flatten(el):  
                yield sub  
        else:  
            yield el 

# write the info to log
def writeLog():
    logfilepath=‘/var/log/syscheck.log‘
    sysrecord = []

    sysrecord.append(getTime())
    sysrecord.append(getLoad())
    sysrecord.append(getMemUsed())
    sysrecord.append(getNetTraffic())
    sysrecord.append(getSocketNum())
    
    sysrecordinfo = ‘,‘.join([str(x) for x in flatten(sysrecord)])+‘\n‘
    log_f = open(logfilepath,‘aw‘)
    log_f.write(sysrecordinfo)
    log_f.close()

# send Message
def sendMessage(receiver,message):
    host = ‘smtp.gmail.com‘
    port = 465
    sender = ‘[email protected]‘
    pwd = ‘ppp‘
    msg = MIMEText(message)
    msg[‘subject‘] = ‘Server Alert‘
    msg[‘from‘] = sender
    msg[‘to‘] = receiver

    s = smtplib.SMTP_SSL(host,port)
    s.login(sender,pwd)
    s.set_debuglevel(1)
    s.sendmail(sender,receiver,msg.as_string())
    s.quit

# send the mail list
def mailSender(message):
    tosendlist=[‘[email protected]‘,‘[email protected]‘]
    for receiver in tosendlist:
        sendMessage(receiver,message)
    

datetime = getTime()
sysload = getLoad()
memused = getMemUsed()
nettraffic = getNetTraffic()
socketnum = getSocketNum()
writeLog()

sys = {}
sys[‘loadcritical‘] = 8
sys[‘memcritical‘] = 95
sys[‘speedcritical‘] = 1000*1024/8*0.8 #千兆网卡1000Mb/s 换算成 KB
sys[‘socketnumcri‘] = 950
altermsg = ‘‘

if float(sysload[0]) >= sys[‘loadcritical‘]:
    altermsg = ‘sysLoad: ‘+str(sysload[0])+‘\n‘

if int(memused) >= sys[‘memcritical‘]:
    altermsg += ‘memUsed: ‘+str(memused)+‘\n‘

if int(nettraffic[0]) >= sys[‘speedcritical‘]:
    altermsg += ‘rxSpeed: ‘+str(nettraffic[0])+‘\n‘

if int(nettraffic[1]) >= sys[‘speedcritical‘]:
    altermsg += ‘txSpeed: ‘+str(nettraffic[0])+‘\n‘

if int(socketnum) >= sys[‘socketnumcri‘]:
    altermsg += ‘socketNum: ‘+str(socketnum)+‘\n‘

if altermsg.strip() !=‘‘:
    mailSender(altermsg)
else:
    print ‘altermsg is null‘

系统状态检查,包含了内存使用\系统负载\网卡流量\指定端口的连接数量\

包含计入csv格式日志功能,系统超载发送邮件功能.

时间: 2024-11-09 00:54:19

系统状态检查脚本的相关文章

linux系统负载状态检查脚本

为了便于分析问题,编写了一个linux状态检查脚本,脚本可放置任意目录,脚本执行检测后会输出日志记录到当前目录下.直接执行脚本可用于一次检测,可通过日志进行分析.如果需要长时间监测,可执行-x参数,脚本会自动增加计划任务,并将日志输出到/tmp目录下.如果需要删除计划任务,可执行-xx参数. 脚本下载地址: wget http://jinxiang.oss-cn-hangzhou.aliyuncs.com/vmstatuscheck.sh #使用方法:  #例:./vmstatuscheck.s

服务器健康状态检查脚本

在日常工作中,我们经常会定期的检查各个服务器的状态,通过此shell脚本系统可以定期的将每日服务器的检查结果发送到邮箱中,此脚本在正式环境中已稳定运行. 因为我们需要通过邮件发送检测结果,首先必须在服务器上开启sendmail服务并设置为开机自启动,然后需要在/etc/mail.rc中设置相应的参数,/etc/mail.rc中参数的设置如下: set from=邮箱地址 set smtp=smtp服务器的地址 set smtp-auth-user=邮箱的用户名 set smtp-auth-pas

python-门户应用状态检查脚本

本周用python实现了一个门户应用状态检查脚本. 主要作用是快速收集应用状态,自动收集预置checkpoint的状态,在出现异常时提升问题定位效率. 已实现以下功能: 1.进程核查 2.GC情况核查 3.峰值秒PV核查 4.TCP连接数核查 5.负载情况核查 6.system error话单核查 7.watchdog状态核查 8.存储使用率核查 9.error日志核查 主要难点: 1.python对shell命令执行结果的解析,因为需要判断是否正常,需要将数据解析成array或dictiona

常用的监测系统状态shell脚本

#!/bin/bash ############################### #     系统状况分析脚本        # #                             # #用途:对系统CPU使用率.内存.# #网络连接.磁盘空间.系统进程 # #交易数量以及交易日志进行分析 # #适用操作系统:Linux          # #版本:1.0                    # #                             # #########

Linux系统检查脚本

一.背景 对登录一个系统,快速查看其系统信息,检查系统各项指标及参数,编写系统快速检查脚本,输出系统信息到脚本运行的logs目录下. 二.脚本 git地址 #!/bin/bash # auth:kaliarch # func:sys info check # version:v1.0 # sys:centos6.x/7.x [ $(id -u) -gt 0 ] && echo "请用root用户执行此脚本!" && exit 1 sysversion=$

如何编写LVS对Real Server的健康状态检测脚本

简介:Linux 虚拟服务器(Linux Virtual Server. LVS),是一个由章文松开发的自由软件.利用KVS可以实现高可用的.可伸缩缩的Web, Mail, Cache和Medial等网络股务..井在此基 础上开发支持庞大用户数的,可伸缩的,高可用的电子商务应用.LVS1998年发展到现在,已经变得比较成熟,目前广泛应用在各种网络服务和电了商务应用 中.LVS具有很好的伸缩缩性.可靠性和管埋性,通过LVS要实现的最终目标是:利用linux 操作系统和LVS集群软件实现一个高可用.

完成rs健康状态检查。

VS具有很好的伸缩缩性.可靠性和管埋性,通过LVS要实现的最终目标是:利用linux 操作系统和LVS集群软件实现一个高可用.高性能,低成本的服务器应用集群. LVS集群的组成利用LVS架设的服务器群系统由3个部分组成:最前端的是负栽均衡层(这里用 Lo ad Balancer表示),中间是服务器集群层(用Server Array表示).LVS体系结构如下图所示: 下面对LVS的各个组成部分进行详细介绍负 栽均衡层:位于整个集群系统的最前端,由一台或多台负栽调度器(Dircctm Server)

LVS自动化添加及删除ipvsadm和后端服务器健康状态检测脚本

  LVS director 负载均衡器增加IPVSADM脚本 #vim director.sh #!/bin/bash #chkconfig: - 88 66 #description: this script to add lvs IP VIP=192.168.0.254 DIP=192.168.0.100 RIP1=192.168.0.101 RIP2=192.168.0.102 PORT=80 SCHELE=wrr LOCKFILE=/var/lock/subsys/ipvsadm ca

SECURITY-linux安全基线检查脚本

#! /bin/bash #vesion 1.1 20190505#author by (jxwpx) ipadd=ifconfig -a | grep Bcast | awk -F "[ :]+" '{print $4}' | tr "\n" "_"cat <<EOF linux基线检查脚本 Author(jxwpx) linux基线配置规范设计 输出结果"/tmp/${ipadd}_checkResult.txt&quo