一、简介
花了两天时间写了个监控服务器各项指标的框架,主要功能包括:根据设置产生各指标项的数据报表,并可以根据阈值的设定产生警告信息。
程序包括以下文件和文件夹:
- $ ls -l
- 总计 88
- -rwxrw-r-- 1 winway winway 277 06-27 19:30 analyse.sh
- -rwxrw-r-- 1 winway winway 122 06-29 10:18 config.sh
- drwxrwxr-x 5 winway winway 4096 07-01 20:08 data
- drwxrwxr-x 2 winway winway 4096 07-01 20:08 display
- -rwxrw-r-- 1 winway winway 148 06-28 09:39 display.sh
- drwxrwxr-x 5 winway winway 4096 07-01 20:07 etc
- -rwxrw-r-- 1 winway winway 471 06-28 09:33 format.sh
- -rwxrw-r-- 1 winway winway 253 06-27 19:28 monitor.sh
- -rw-rw-r-- 1 winway winway 3036 06-29 15:19 raw2html.py
- -rw-rw-r-- 1 winway winway 2107 06-29 13:44 raw_analyse.py
- -rwxrw-r-- 1 winway winway 849 06-29 10:24 snatch.sh
主程序,会依次调用snatch.sh、analyse.sh、format.sh、display.sh
2)snatch.sh
数据采集,基于mussh(不了解的可以参考下这里)实现,周期性抓取各服务器上感兴趣的数据项,存储到data文件夹中
3)analyse.sh
数据分析,根据etc文件夹中的阈值配置文件,产生需要告警的条目,主要工作由raw_analyse.py完成
4)format.sh
数据格式化,将原始的纯文本数据格式化为html格式,主要工作由raw2html.py完成
5)display.sh
数据展示,更新display文件夹下的软连接,指向最新的html文件
6)config.sh
一些变量的定义
二、配置
配置文件结构如下:
- etc/
- |-- lst.d
- | `-- database.lst
- |-- monitor.conf
- |-- sh.d
- | `-- database.sh
- `-- thv.d
- `-- database.thv
- $ cat monitor.conf
- # 类型 IP列表文件 检查脚本文件 阈值文件
- database database.lst database.sh database.thv
IP列表文件是对应这一角色的服务器的ip集合,格式为
# 归属地 用户@IP
- 哈尔滨 root@x.x.x.x
- 哈尔滨 root@x.x.x.x
检查脚本文件是获取这个服务器数据应该执行的脚本。在目标机器上执行这个脚本,就可以获得我们关心的各项数据,这个脚本根据需要而定制,且输出信息的格式有要求。
- $ cat sh.d/database.sh
- #! /bin/bash
- #
-
echo -n "
" - hostname
- echo -n '
- date '+%Y-%m-%d %H:%M:%S'
-
echo -n '
' - uptime | sed -r 's/.*up\s*([^,]*).*/\1/'
-
echo -n '
' - /sbin/ifconfig | sed -nr '/^\S/{N;s/\s+.*inet addr:(\S+).*/ \1/;H};${x;s/^\s*//g;s/\n/+/g;p}'
-
echo -n '
' - ps -e | wc -l
-
echo -n '
' - df -h | awk -F'[ %]+' '$NF == "/"{print $(NF-1)}'
阈值文件用来判断某项数据是否超标。比如如下示例,进程数超过180,我们认为要告警;磁盘使用率超过80%,也需要告警。
-
$ cat etc/thv.d/database.thv
############################################
# 注意!!! #
# 指标要与检查脚本里的名字一致 #
############################################
# 指标 最小值 最大值
process_number 180 300
disk_usage 0 80
所以,如果你想加入对一批相同类型的机器的监控,你需要:
1、 编辑一个IP列表文件,将他们的IP地址按合法的格式编辑
2、 根据自己关心的数据项,定制一个检查脚本,脚本的输出信息格式如示例脚本所示
3、 给你所关心数据项设置告警阈值
4、 在monitor.conf里添加一条配置
三、数据存储
所有数据存储在data文件夹中
- data/
- |-- all_html
- | `-- 20130701
- | `-- 2008
- | `-- database_all.html
- |-- newest.txt
- |-- raw
- | `-- 20130701
- | `-- 2008
- | |-- database_all.raw
- | `-- database_warn.raw
- `-- warn_html
- `-- 20130701
- `-- 2008
- `-- database_warn.html
all_html用于存储包含所有数据项的html文件
warn_html用于存储只包含警告数据项的html文件
newest.txt用于记录最新的数据所在的文件夹
执行完snatch.sh,会在相应的日期时间目录下生成*_all.raw文件
执行完analyse.sh,会在相应的日期时间目录下生成*_warn.raw文件
执行完format.sh,会在相应的日期时间目录下生成*_all.html和*_warn.html文件
四、展示
- display
- |-- new_warning -> ../data/warn_html/20130701/2008
- |-- overall -> ../data/all_html/
- `-- warning -> ../data/warn_html/
new_warning指向最新的警告数据
overall指向all_html文件夹
warning指向warn_html文件夹
在display目录下执行
nohup python -m SimpleHTTPServer 80 &>/dev/null &
就可以在浏览器中查看这些数据了。
五、使用
根据需要编辑crontab文件,如
- */30 8-16 * * * cd ~winway/monitor && ./monitor.sh
- 0 0-7,17-23 * * * cd ~winway/monitor && ./monitor.sh
六、环境
需要安装mussh和python的PyH模块。
monitor.doc
不知道为什么附件.tar.gz传不上来,所以改成了.doc,下载后后缀修改为.tar.gz解压即可。