Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6321169
  • 博文数量: 2759
  • 博客积分: 1021
  • 博客等级: 中士
  • 技术积分: 4091
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-11 14:14
文章分类

全部博文(2759)

文章存档

2019年(1)

2017年(84)

2016年(196)

2015年(204)

2014年(636)

2013年(1176)

2012年(463)

分类: 系统运维

2013-09-14 11:23:29

一、简介
一个简易的服务器监控框架(1)一文中,我们介绍了一个简单的服务器监控框架,可以监控服务器的某些状态,但是有一个前提,必须将关心的状态量化,比如磁盘空间使用率定义在一个数值范围内。但是有些信息很难量化,或者如果量化,就显得很繁琐。这里在一个简易的服务器监控框架(1)的基础上,稍作修改,将状态正常与否的判断放到脚本里面完成。
程序包括以下文件和文件夹:
  1. $ ls -l
  2. 总计 140
  3. -rwxrw-r-- 1 winway winway 976 07-28 21:22 analyse.sh
  4. -rwxrw-r-- 1 winway winway 122 07-28 14:04 config.sh
  5. drwxrwxr-x 4 winway winway 4096 08-09 23:40 data
  6. -rwxr--r-- 1 winway winway 411 08-09 18:54 data_clear.sh
  7. drwxrwxr-x 2 winway winway 4096 08-15 16:08 display
  8. -rwxrw-r-- 1 winway winway 499 07-28 21:27 display.sh
  9. drwxrwxr-x 4 winway winway 4096 08-09 19:37 etc
  10. -rwxrw-r-- 1 winway winway 1377 07-28 21:25 format.sh
  11. -rwxrw-r-- 1 winway winway 527 07-31 21:18 monitor.sh
  12. -rwxrwxr-x 1 winway winway 20815 06-30 11:57 mussh
  13. -rw-rw-r-- 1 winway winway 3718 08-04 17:10 raw2html.py
  14. -rw-rw-r-- 1 winway winway 1684 07-30 19:19 raw_analyse.py
  15. -rwxrw-r-- 1 winway winway 1796 08-09 19:37 snatch.sh
  16. -rwxr--r-- 1 winway winway 1059 08-09 19:40 time_sync.sh
  17. -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 
一些变量的定义
二、配置
配置文件结构如下:
  1. etc/
  2. |-- lst.d
  3. |-- monitor.conf
  4. `-- sh.d
其中monitor.conf是主配置文件
  1. $ cat monitor.conf
  2. # 类型 IP列表文件 检查脚本文件 
  3. database database.lst database.sh
类型是指服务器的角色,如数据库服务器,web服务器等;
IP列表文件是对应这一角色的服务器的ip集合,格式为
  1. # 归属地 用户@IP
  2. 哈尔滨 root@x.x.x.x
  3. 哈尔滨 root@x.x.x.x
这里“root@x.x.x.x”的格式是为了mussh执行起来方便而这么写的。
 检查脚本文件是获取这个服务器数据应该执行的脚本。在目标机器上执行这个脚本,就可以获得我们关心的各项数据,这个脚本根据需要而定制,且对输出信息的格式有要求。示例脚本如下,其中有问题的数据条目以“**”结尾,而这个条目中真正有问题的项被“^^^^”和“&&&&”包裹,同一项数据组织成一行,行与行之间用“+”连接。
  1. $ cat sh.d/database.sh
  2. #! /bin/bash
  3. #
  4. echo -n ''
  5. n=$(pgrep app1 | wc -l)
  6. if [[ n -ge 1 ]] && [[ n -le 4 ]]
  7. then
  8. echo "$n"
  9. else
  10. echo "${n}**"
  11. fi
  12. echo -n ''
  13. n=$(pgrep app2 | wc -l)
  14. if [[ n -ge 1 ]] && [[ n -le 4 ]]
  15. then
  16. echo "$n"
  17. else
  18. echo "${n}**"
  19. fi
  20. echo -n ''
  21. n=$(pgrep monitor | wc -l)
  22. if [[ n -ge 1 ]]
  23. then
  24. echo "$n"
  25. else
  26. echo "${n}**"
  27. fi
  28. echo -n ''
  29. n=$(netstat -ant | grep -c '1521.*ESTABLISHED')
  30. if [[ $n -ge 1 ]]
  31. then
  32. echo "${n}"
  33. else
  34. echo "${n}**"
  35. fi
  36. echo -n ''
  37. du -sm /backup/* | \
  38. 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}'
  39. echo -n ''
  40. start=$(date -d '5min ago' '+%s')
  41. export start
  42. 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 | \
  43. LANG="C" sed -n '/ORA/s/.*\(ORA-[^:]*\):.*$/\1/p' | \
  44. awk '{a[$0]; warn = "**"}END{for(i in a)res = res ? res "+" i : i; if(res)print res warn; else print "OK"}'
  45. unset start
  46. echo -n ''
  47. 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}'
  48. echo -n ''
  49. date '+%Y-%m-%d %H:%M:%S'
  50. echo -n ''
  51. 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解压即可。
阅读(398) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~