一、简介
花了两天时间写了个监控服务器各项指标的框架,主要功能包括:根据设置产生各指标项的数据报表,并可以根据阈值的设定产生警告信息。
程序包括以下文件和文件夹:
-
$ 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
1)monitor.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
其中monitor.conf是主配置文件
-
$ cat monitor.conf
-
# 类型 IP列表文件 检查脚本文件 阈值文件
-
database database.lst database.sh database.thv
类型是指服务器的角色,如数据库服务器,web服务器等;
IP列表文件是对应这一角色的服务器的ip集合,格式为
# 归属地 用户@IP
-
哈尔滨 root@x.x.x.x
-
哈尔滨 root@x.x.x.x
这里“”的格式是为了mussh执行起来方便而这么写的。
检查脚本文件是获取这个服务器数据应该执行的脚本。在目标机器上执行这个脚本,就可以获得我们关心的各项数据,这个脚本根据需要而定制,且输出信息的格式有要求。
-
$ 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)}'
由于mussh具有远程执行本地脚本的能力,所以我们不需要把这个脚本拷贝到远程主机上。
阈值文件用来判断某项数据是否超标。比如如下示例,进程数超过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
raw文件夹用于存储原始的数据
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/
display文件夹包含三个软连接
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解压即可。
阅读(505) | 评论(0) | 转发(0) |