一、简介
在
一个简易的服务器监控框架(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
1)monitor.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
其中monitor.conf是主配置文件
-
$ cat monitor.conf
-
# 类型 IP列表文件 检查脚本文件
-
database database.lst database.sh
类型是指服务器的角色,如数据库服务器,web服务器等;
IP列表文件是对应这一角色的服务器的ip集合,格式为
-
# 归属地 用户@IP
-
哈尔滨 root@x.x.x.x
-
哈尔滨 root@x.x.x.x
这里“root@x.x.x.x”的格式是为了mussh执行起来方便而这么写的。
检查脚本文件是获取这个服务器数据应该执行的脚本。在目标机器上执行这个脚本,就可以获得我们关心的各项数据,这个脚本根据需要而定制,且对输出信息的格式有要求。示例脚本如下,其中有问题的数据条目以“**”结尾,而这个条目中真正有问题的项被“^^^^”和“&&&&”包裹,同一项数据组织成一行,行与行之间用“+”连接。
-
$ 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'
由于mussh具有远程执行本地脚本的能力,所以我们不需要把这个脚本拷贝到远程主机上。
所以,如果你想加入对一批相同类型的机器的监控,你需要:
1、 编辑一个IP列表文件,将他们的IP地址按合法的格式编辑
2、 根据自己关心的数据项,定制一个检查脚本,脚本的输出信息格式如示例脚本所示
3、 在monitor.conf里添加一条配置
三、数据存储
数据存储类似于
一个简易的服务器监控框架(1)中描述的。
四、展示
展示类似于
一个简易的服务器监控框架(1)中描述的。
五、使用
根据需要编辑crontab文件
六、环境
需要安装mussh和python的PyH模块。
monitor.doc
不知道为什么附件.tar.gz传不上来,所以改成了.doc,下载后后缀修改为.tar.gz解压即可。
阅读(4424) | 评论(1) | 转发(1) |