告警系统

1. 告警系统需求分析

  • 需求:使用shell定制各种个性化告警工具,但需要统一化管理、规范化管理。

  • 思路:指定一个脚本包,包含主程序、子程序、配置文件、邮件引擎、输出日志等。

  • 主程序:作为整个脚本的入口,是整个系统的命脉。

  • 配置文件:是一个控制中心,用它来开关各个子程序,指定各个相关联的日志文件。

  • 子程序:这个才是真正的监控脚本,用来监控各个指标。

  • 邮件引擎:是由一个python程序来实现,它可以定义发邮件的服务器、发邮件人以及发件人密码

  • 输出日志:整个监控系统要有日志输出。

  • 要求:我们的机器角色多种多样,但是所有机器上都要部署同样的监控系统,也就说所有机器不管什么角色,整个程序框架都是一致的,不同的地方在于根据不同的角色,定制不同的配置文件。

  • 程序架构:

bin下是主程序

conf下是配置文件

shares下是各个监控脚本

mail下是邮件引擎

log下是日志。

2. main.sh内容

  1. #!/bin/bash
  2. #Written by aming.
  3. # 是否发送邮件的开关
  4. export send=1
  5. # 过滤ip地址
  6. export addr=`/sbin/ifconfig |grep -A1 "ens33: "|awk '/inet/ {print $2}'`
  7. dir=`pwd`
  8. # 只需要最后一级目录名
  9. last_dir=`echo $dir|awk -F'/' '{print $NF}'`
  10. # 下面的判断目的是,保证执行脚本的时候,我们在bin目录里,不然监控脚本、邮件和日志很有可能找不到
  11. if [ $last_dir == "bin" ] || [ $last_dir == "bin/" ]; then
  12. conf_file="../conf/mon.conf"
  13. else
  14. echo "you shoud cd bin dir"
  15. exit
  16. fi
  17. exec 1>>../log/mon.log 2>>../log/err.log
  18. echo "`date +"%F %T"` load average"
  19. /bin/bash ../shares/load.sh
  20. #先检查配置文件中是否需要监控502
  21. if grep -q 'to_mon_502=1' $conf_file; then
  22. export log=`grep 'logfile=' $conf_file |awk -F '=' '{print $2}' |sed 's/ //g'`
  23. /bin/bash ../shares/502.sh
  24. fi

3. mon.conf内容

  1. ## to config the options if to monitor
  2. ## 定义mysql的服务器地址、端口以及user、password
  3. to_mon_cdb=0 ##0 or 1, default 0,0 not monitor, 1 monitor
  4. db_ip=10.20.3.13
  5. db_port=3315
  6. db_user=username
  7. db_pass=passwd
  8. ## httpd 如果是1则监控,为0不监控
  9. to_mon_httpd=0
  10. ## php 如果是1则监控,为0不监控
  11. to_mon_php_socket=0
  12. ## http_code_502 需要定义访问日志的路径
  13. to_mon_502=1
  14. logfile=/data/log/xxx.xxx.com/access.log
  15. ## request_count 定义日志路径以及域名
  16. to_mon_request_count=0
  17. req_log=/data/log/www.discuz.net/access.log
  18. domainname=www.discuz.net

4. load.sh内容

  1. #! /bin/bash
  2. ##Writen by aming##
  3. load=`uptime |awk -F 'average:' '{print $2}'|cut -d',' -f1|sed 's/ //g' |cut -d. -f1`
  4. if [ $load -gt 10 ] && [ $send -eq "1" ]
  5. then
  6. echo "$addr `date +%T` load is $load" >../log/load.tmp
  7. /bin/bash ../mail/mail.sh aming_test@163.com "$addr\_load:$load"
  8. `cat ../log/load.tmp`
  9. fi
  10. echo "`date +%T` load is $load"

5. 502.sh内容

  1. #! /bin/bash
  2. d=`date -d "-1 min" +%H:%M`
  3. c_502=`grep :$d: $log |grep ' 502 '|wc -l`
  4. if [ $c_502 -gt 10 ] && [ $send == 1 ]; then
  5. echo "$addr $d 502 count is $c_502">../log/502.tmp
  6. /bin/bash ../mail/mail.sh $addr\_502 $c_502 ../log/502.tmp
  7. fi
  8. echo "`date +%T` 502 $c_502"

6. disk.sh内容

  1. #! /bin/bash
  2. ##Writen by aming##
  3. rm -f ../log/disk.tmp
  4. for r in `df -h |awk -F '[ %]+' '{print $5}'|grep -v Use`
  5. do
  6. if [ $r -gt 90 ] && [ $send -eq "1" ]
  7. then
  8. echo "$addr `date +%T` disk useage is $r" >>../log/disk.tmp
  9. fi
  10. if [ -f ../log/disk.tmp ]
  11. then
  12. df -h >> ../log/disk.tmp
  13. /bin/bash ../mail/mail.sh $addr\_disk $r ../log/disk.tmp
  14. echo "`date +%T` disk useage is nook"
  15. else
  16. echo "`date +%T` disk useage is ok"
  17. fi

7. mail.sh内容

//其中mail.py内容到这里下载https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D22Z/mail.py

  1. log=$1
  2. t_s=`date +%s`
  3. t_s2=`date -d "2 hours ago" +%s`
  4. if [ ! -f /tmp/$log ]
  5. then
  6. echo $t_s2 > /tmp/$log
  7. fi
  8. t_s2=`tail -1 /tmp/$log|awk '{print $1}'`
  9. echo $t_s>>/tmp/$log
  10. v=$[$t_s-$t_s2]
  11. echo $v
  12. if [ $v -gt 3600 ]
  13. then
  14. ./mail.py $1 $2 $3
  15. echo "0" > /tmp/$log.txt
  16. else
  17. if [ ! -f /tmp/$log.txt ]
  18. then
  19. echo "0" > /tmp/$log.txt
  20. fi
  21. nu=`cat /tmp/$log.txt`
  22. nu2=$[$nu+1]
  23. echo $nu2>/tmp/$log.txt
  24. if [ $nu2 -gt 10 ]
  25. then
  26. ./mail.py $1 "trouble continue 10 min $2" "$3"
  27. echo "0" > /tmp/$log.txt
  28. fi
  29. fi

shell项目-告警系统的更多相关文章

  1. Linux centosVMware运行告警系统、分发系统-expect讲解、自动远程登录后,执行命令并退出、expect脚本传递参数、expect脚本同步文件、指定host和要同步的文件、shell项目-分发系统-构建文件分发系统、分发系统-命令批量执行

    一运行告警系统 创建一个任务计划crontab -e 每一分钟都执行一次 调试时把主脚本里边log先注释掉 再次执行 没有发现502文件说明执行成功了,每日有错误,本机IP 负载不高 二.分发系统-e ...

  2. shell项目-分发系统-expect讲解

    shell项目-分发系统-expect讲解 yum install -y expect 1. 自动远程登录 #! /usr/bin/expect set host "192.168.133. ...

  3. shell项目-分发系统-构建文件分发系统

    shell项目-分发系统-构建文件分发系统 需求背景对于大公司而言,肯定时不时会有网站或者配置文件更新,而且使用的机器肯定也是好多台,少则几台,多则几十甚至上百台.所以,自动同步文件是至关重要的. 实 ...

  4. Xamarin.FormsShell基础教程(7)Shell项目关于页面的介绍

    Xamarin.FormsShell基础教程(7)Shell项目关于页面的介绍 轻拍标签栏中的About标签,进入关于页面,如图1.8和图1.9所示.它是对应用程序介绍的页面. 该页面源自Views文 ...

  5. Xamarin.FormsShell基础教程(3)Shell项目构成

    Xamarin.FormsShell基础教程(3)Shell项目构成 在创建的ShellDemo解决方案中,有3个子项目,分别为ShellDemo.ShellDemo.Android和ShellDem ...

  6. 第五部分shell项目一监控脚本

    需求: 使用shell定制各种个性化告警工具,但需要统一化管理.规范化管理. 思路:指定一个脚本包,包含主程序.子程序.配置文件.邮件引擎.输出日志等.主程序:作为整个脚本的入口,是整个系统的命脉.配 ...

  7. shell中的函数、shell中的数组、告警系统需求分析

    7月16日任务 20.16/20.17 shell中的函数20.18 shell中的数组20.19 告警系统需求分析 20.16/20.17 shell中的函数 函数就是一个子shell就是一个代码段 ...

  8. Shell编程二

    告警系统需求分析 1.(虽然之前我们学习了zabbix,但有时候也不能满足我们的需求,比如比较冷门的监控项目需要写自定义脚本,或者服务器网络有问题,没有办法将客户端的数据发送到服务端.) 程序架构: ...

  9. CentOS安装gitLab服务器

    首先利用gitlab-install-el6.sh安装,比较简单: (出处:http://www.linuxidc.com/Linux/2013-06/85754.htm) 1:如果有条件,提供一台全 ...

随机推荐

  1. unity SystemInfo类 获得电量battery

    我觉得用Unity 开发最爽的地方, 不是unity跨平台,而是用其他语言,要用很复杂的逻辑才能完成的功能,unity用一两句代码就能搞定 就比如说获取Android 系统的电量,不用发广播,不用申请 ...

  2. UITextField监控文字变化方法

    项目里须要在不隐藏键盘的情况下.来更改button 的状态. 这里就是要对uitextfield监控.uitextfield继承于UIControl.所以能够 使用addTarget方法.详细例如以下 ...

  3. UE4的JSON读写方式<一>

    声明:全部权利保留. 转载必须说明出处:http://blog.csdn.net/cartzhang/article/details/41009343 UE4的Json的解析博客地址: http:// ...

  4. Runtime类中的freeMemory,totalMemory,maxMemory等几个方法

    最近在网上看到一些人讨论到Java.lang.Runtime类中的freeMemory(),totalMemory(),maxMemory ()这几个方法的一些题目,很多人感到很迷惑,为什么,在jav ...

  5. JVM-java字符编码

    在JVM内部,所有的字符都是用Unicode编码的.而对于JVM所在操作系统的文件系统,可能有不同的编码类型. 由于JVM和OS文件系统所使用的编码方式不同,JVM在与操作系统进行数据交互的时候,就会 ...

  6. JNI学习积累之二 ---- 数据类型映射、域描述符说明

    本文原创,转载请注明出处:http://blog.csdn.NET/qinjuning 在Java存在两种数据类型: 基本类型 和 引用类型 ,大家都懂的 . 在JNI的世界里也存在类似的数据类型,与 ...

  7. 79.express里面的app.configure作用

    以下摘自 express 3.0 的 文档 app.configure([env], callback) Conditionally invoke callback when env matches ...

  8. Ftp的上传和下载

    百度知道的那个在“ 绑定和SSL设置”模块,选择的是允许 如果一直找不到网页的话,就是这里错了:反正就是牵扯到一堆防火墙的设置(最后我也没搞成) 选择成无就OK了:一切迎刃而解............ ...

  9. OPENCV(5) —— 图像直方图

    新版本对直方图不再使用之前的histogram的形式,而是用统一的Mat或者MatND的格式来存储直方图,可见新版本Mat数据结构的优势. C++: void calcHist(const Mat* ...

  10. 外部数据库驱动程序XX中的意外错误

    链接EXCEL打开报错 代码如下(Excel2003版本)出现这种错误 现在只需要更改 修改成 并且把导入版本修改