在一个简易的服务器监控框架(1)一文中,我们介绍了一个简单的服务器监控框架,可以监控服务器的某些状态,但是有一个前提,必须将关心的状态量化,比如磁盘空间使用率定义在一个数值范围内。但是有些信息很难量化,或者如果量化,就显得很繁琐。这里在一个简易的服务器监控框架(1)的基础上,稍作修改,将状态正常与否的判断放到脚本里面完成。
程序包括以下文件和文件夹:
- $ ls -l
- 总计 140
- -rwxrw-r-- 1 winway winway 976 07-28 21:22 analyse.sh
- -rwxrw-r-- 1 winway winway 122 07-28 14:04 config.sh
- drwxrwxr-x 4 winway winway 4096 08-09 23:40 data
- -rwxr--r-- 1 winway winway 411 08-09 18:54 data_clear.sh
- drwxrwxr-x 2 winway winway 4096 08-15 16:08 display
- -rwxrw-r-- 1 winway winway 499 07-28 21:27 display.sh
- drwxrwxr-x 4 winway winway 4096 08-09 19:37 etc
- -rwxrw-r-- 1 winway winway 1377 07-28 21:25 format.sh
- -rwxrw-r-- 1 winway winway 527 07-31 21:18 monitor.sh
- -rwxrwxr-x 1 winway winway 20815 06-30 11:57 mussh
- -rw-rw-r-- 1 winway winway 3718 08-04 17:10 raw2html.py
- -rw-rw-r-- 1 winway winway 1684 07-30 19:19 raw_analyse.py
- -rwxrw-r-- 1 winway winway 1796 08-09 19:37 snatch.sh
- -rwxr--r-- 1 winway winway 1059 08-09 19:40 time_sync.sh
- -rwxr--r-- 1 winway winway 584 08-09 19:21 verify.sh
主程序,会依次调用snatch.sh、analyse.sh、format.sh、verify.sh、display.sh
2)snatch.sh
数据采集,基于mussh(不了解的可以参考下这里)实现,周期性抓取各服务器上感兴趣的数据项,存储到data文件夹中
3)analyse.sh
数据分析,根据etc文件夹中的阈值配置文件,产生需要告警的条目,主要工作由raw_analyse.py完成
4)format.sh
数据格式化,将原始的纯文本数据格式化为html格式,主要工作由raw2html.py完成
5)verify.sh
数据完整性检查,将抓取的数据与配置文件进行对比,确定有误漏掉的监控对象
5)display.sh
数据展示,更新display文件夹下的软连接,指向最新的html文件
6)time_sync.sh
时间同步,由于某种原因,无法使用ntp,所以使用脚本设置被监控服务器的时间
7)data_clear.sh
数据清理,清除data目录下的旧文件
8)config.sh
一些变量的定义
二、配置
配置文件结构如下:
- etc/
- |-- lst.d
- |-- monitor.conf
- `-- sh.d
- $ cat monitor.conf
- # 类型 IP列表文件 检查脚本文件
- database database.lst database.sh
IP列表文件是对应这一角色的服务器的ip集合,格式为
- # 归属地 用户@IP
- 哈尔滨 root@x.x.x.x
- 哈尔滨 root@x.x.x.x
检查脚本文件是获取这个服务器数据应该执行的脚本。在目标机器上执行这个脚本,就可以获得我们关心的各项数据,这个脚本根据需要而定制,且对输出信息的格式有要求。示例脚本如下,其中有问题的数据条目以“**”结尾,而这个条目中真正有问题的项被“^^^^”和“&&&&”包裹,同一项数据组织成一行,行与行之间用“+”连接。
- $ cat sh.d/database.sh
- #! /bin/bash
- #
-
echo -n '
' - n=$(pgrep app1 | wc -l)
- if [[ n -ge 1 ]] && [[ n -le 4 ]]
- then
- echo "$n"
- else
- echo "${n}**"
- fi
-
echo -n '
' - n=$(pgrep app2 | wc -l)
- if [[ n -ge 1 ]] && [[ n -le 4 ]]
- then
- echo "$n"
- else
- echo "${n}**"
- fi
-
echo -n '
' - n=$(pgrep monitor | wc -l)
- if [[ n -ge 1 ]]
- then
- echo "$n"
- else
- echo "${n}**"
- fi
-
echo -n '
' - n=$(netstat -ant | grep -c '1521.*ESTABLISHED')
- if [[ $n -ge 1 ]]
- then
- echo "${n}"
- else
- echo "${n}**"
- fi
-
echo -n '
' - du -sm /backup/* | \
- awk -F'[ \t/]+' '{pref = suff = ""; if($1 >= 7168){warn = "**"; pref = "^^^^"; suff = "&&&&"};res = res ? res "+" pref $1 "M" OFS $NF suff : pref $1 "M" OFS $NF suff}END{print res warn}'
-
echo -n '
' - start=$(date -d '5min ago' '+%s')
- export start
- tail -1500 /var/log/messages | while read a b c d; do e=$(date -d "$a $b $c" '+%s'); [[ $e -ge $start ]] && echo "$a $b $c $d"; done | \
- LANG="C" sed -n '/ORA/s/.*\(ORA-[^:]*\):.*$/\1/p' | \
- awk '{a[$0]; warn = "**"}END{for(i in a)res = res ? res "+" i : i; if(res)print res warn; else print "OK"}'
- unset start
-
echo -n '
' - df -h | awk 'NR > 1{pref = suff = ""; if(int($(NF-1)) >= 80){warn = "**"; pref = "^^^^"; suff = "&&&&"};res = res ? res "+" pref $(NF-1) OFS $NF suff : pref $(NF-1) OFS $NF suff}END{print res warn}'
-
echo -n '
' - date '+%Y-%m-%d %H:%M:%S'
-
echo -n '
' - uptime 2>/dev/null | sed -n '/up/s/^.*up[ \t]*\([^,]*\),.*$/\1/p'
所以,如果你想加入对一批相同类型的机器的监控,你需要:
1、 编辑一个IP列表文件,将他们的IP地址按合法的格式编辑
2、 根据自己关心的数据项,定制一个检查脚本,脚本的输出信息格式如示例脚本所示
3、 在monitor.conf里添加一条配置
三、数据存储
数据存储类似于一个简易的服务器监控框架(1)中描述的。
四、展示
展示类似于一个简易的服务器监控框架(1)中描述的。

五、使用
根据需要编辑crontab文件
六、环境
需要安装mussh和python的PyH模块。
monitor.doc不知道为什么附件.tar.gz传不上来,所以改成了.doc,下载后后缀修改为.tar.gz解压即可。