Shell Project-Alarm system

Source: Internet
Author: User
Tags email account

Requirements: Use the shell to customize a variety of personalized alarm tools, but the need for unified management, standardized management.
Idea: Specify a script package that contains the main program, subroutine, configuration file, mail engine, output log, and so on.
Main program: As the entire script portal, is the lifeblood of the entire system.
Configuration file: is a control center that uses it to switch individual subroutines, specifying each associated log file.
Subroutine: This is the real monitoring script, used to monitor each indicator.
Mail Engine: It is implemented by a Python program that defines the server to which the message is sent, the person who sent it, and the sender's password
Output log: The entire monitoring system should have a log output.
Requirements: Our machine roles are varied, but the same monitoring system is deployed on all machines, and the entire program framework is consistent, regardless of the role of all machines, depending on the role of the different configuration files.
Program Architecture:

Under Bin is the main program
Conf is the configuration file
Share is the various monitoring scripts
Mail engine under Mail
Log is the journal.
Main script main.sh Content

 [[email protected] bin]# vim main.sh#!/bin/bash#Written by by.# 是否发送邮件的开关export send=1# 过滤ip地址export addr=`/sbin/ifconfig |grep -A1 "ens33: "|awk ‘/inet/ {print $2}‘`dir=`pwd`# 只需要最后一级目录名last_dir=`echo $dir|awk -F‘/‘ ‘{print $NF}‘`# 下面的判断目的是,保证执行脚本的时候,我们在bin目录里,不然监控脚本、邮件和日志很有可能找不到if [ $last_dir == "bin" ] || [ $last_dir == "bin/" ]; then    conf_file="../conf/mon.conf"else    echo "you shoud cd bin dir"    exitfiexec 1>>../log/mon.log 2>>../log/err.logecho "`date +"%F %T"` load average"/bin/bash ../shares/load.sh#先检查配置文件中是否需要监控502if grep -q ‘to_mon_502=1‘ $conf_file; then    export log=`grep ‘logfile=‘ $conf_file |awk -F ‘=‘ ‘{print $2}‘ |sed ‘s/ //g‘`    /bin/bash??../shares/502.shfi

mon.conf Content

 [[email protected] conf]# vim mon.conf## to config the options if to monitor## 定义mysql的服务器地址、端口以及user、passwordto_mon_cdb=0? ?##0 or 1, default 0,0 not monitor, 1 monitordb_ip=10.20.3.13db_port=3315db_user=usernamedb_pass=passwd## httpd? ?如果是1则监控,为0不监控to_mon_httpd=0## php 如果是1则监控,为0不监控to_mon_php_socket=0## http_code_502??需要定义访问日志的路径to_mon_502=0logfile=/data/log/xxx.xxx.com/access.log## request_count? ?定义日志路径以及域名to_mon_request_count=0req_log=/data/log/www.discuz.net/access.logdomainname=www.discuz.net

load.sh Content

[[email protected] share]# vim load.sh#! /bin/bash##Writen by aming##load=`uptime |awk -F ‘average:‘ ‘{print $2}‘|cut -d‘,‘ -f1|sed ‘s/ //g‘ |cut -d. -f1`if [ $load -gt 10 ] && [ $send -eq "1" ]then    echo "$addr `date +%T` load is $load" >../log/load.tmp    /bin/bash ../mail/mail.sh [email protected] "$addr\_load:$load" `cat ../log/load.tmp`fiecho "`date +%T` load is $load"

502.sh Content

[[email protected] share]# vim 502.sh#! /bin/bashd=`date -d "-1 min" +%H:%M`c_502=`grep :$d:??$log??|grep ‘ 502 ‘|wc -l`if [ $c_502 -gt 10 ] && [ $send == 1 ]; then? ???echo "$addr $d 502 count is $c_502">../log/502.tmp? ???/bin/bash ../mail/mail.sh $addr\_502 $c_502??../log/502.tmpfiecho "`date +%T` 502 $c_502"

disk.sh Content

[[email protected] share]# vim disk.sh#! /bin/bash##Writen by by##LANG=enrm -f ../log/disk.tmpfor r in `df -h |awk -F ‘[ %]+‘ ‘{print $5}‘|grep -v Use`do? ? if [ $r -gt 90 ] && [ $send -eq "1" ]then? ? echo "$addr `date +%T` disk useage is $r" >>../log/disk.tmpfiif [ -f ../log/disk.tmp ]then? ? df -h >> ../log/disk.tmp? ? /bin/bash ../mail/mail.sh $addr\_disk $r ../log/disk.tmp? ? echo "`date +%T` disk useage is nook"else? ? echo "`date +%T` disk useage is ok"fi

mail.sh Content

[[email protected] mail]# vim mail.sh#!/bin/bashlog=$1t_s=`date +%s`t_s2=`date -d "2 hours ago" +%s`if [ ! -f /tmp/$log ]then    echo $t_s2 > /tmp/$logfit_s2=`tail -1 /tmp/$log|awk ‘{print $1}‘`echo $t_s>>/tmp/$logv=$[$t_s-$t_s2]echo $vif [ $v -gt 3600 ]then    ./mail.py  $1  $2  $3    echo "0" > /tmp/$log.txtelse    if [ ! -f /tmp/$log.txt ]    then        echo "0" > /tmp/$log.txt    fi    nu=`cat /tmp/$log.txt`    nu2=$[$nu+1]    echo $nu2>/tmp/$log.txt    if [ $nu2 -gt 10 ]    then         ./mail.py  $1 "trouble continue 10 min $2" "$3"         echo "0" > /tmp/$log.txt    fifi??

mail.py Content

[[email protected] mail]# vim mail.py#!/usr/bin/env python#-*-coding:utf-8-*-import os,sysreload (SYS) Sys.setdefaultencoding (' UTF8 ') import getoptimport smtplibfrom email. Mimetext Import mimetextfrom Email. Mimemultipart Import mimemultipartfrom subprocess import *def sendqqmail (Username,password,mailfrom,mailto,subject,        Content): Gserver = ' smtp.163.com ' gport = try:msg = Mimetext (Unicode (content). Encode (' Utf-8 '))        Msg["from" = Mailfrom msg[' to '] = mailto msg[' reply-to '] = mailfrom msg[' Subject '] = Subject SMTP = Smtplib. SMTP (Gserver, Gport) smtp.set_debuglevel (0) Smtp.ehlo () Smtp.login (Username,password) Smtp.sen DMail (Mailfrom, mailto, msg.as_string ()) Smtp.close () except Exception,err:print "Send Mail failed. Error:%s "% errdef Main (): To=sys.argv[1] subject=sys.argv[2] content=sys.argv[3]# #定义QQ邮箱的账号和密码, you need to change your account and password ( Please do not put the real user name and password on the Internet public, otherwise you will die very miserable) sendqqmail (' 15***[email protected] ', ' wan*******27 ', ' 15*******[email protected] ', to,subject,content) if __name__ = = "_ _main__ ": Main () # # # # # # # # #脚本使用说明 ###### #1. First, define the email account number and password # # in the script. Script execution commands are: Python mail.py target Mailbox "message subject" "Message content"

To be Continued ...

Shell Project-Alarm system

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.