linux 监控 开源软件,利用开源软件打造Linux应用软件平台之监控子系统

它山之石,可以攻玉。监控子系统是每一个高级应用软件平台必不可少的一个子系统,这个子系统应具备的基本功能包括:各进程的运行状态,系统资源的占用状况,重要配置文件的改变情况,重要目录的异动,常用服务的对外提供情况等。一种可行的实现方法是自己写一大堆的脚本,然后加入crond服务去定时做这些监控, 另一条捷径是利用开源软件Monit。本文介绍如何利用Monit去快速构建一个具备上述功能的软件平台的监控子系统。

全局设置:

Monit可以从网上下载源码自己编译安装,也可以直接找现成的二进制rpm包安装。成功安装后会自动生成全局配置文件/etc/monit.conf,一个示列如下:

[root@RHEL5 1.0.1]# less monit.conf

set daemon 10

set logfile syslog facility log_local2

set mailserver mail.foo.bar

set alert [email protected]

set httpd port 9527

allow 0.0.0.0/0

allow adm:bbnd_adm

include /adm/config/monit/logging.rc

include /adm/config/monit/mysql_log.rc

include /adm/config/monit/process.rc

include /adm/config/monit/core.rc

该示例简单说明如下:

1.设定Monit监控间隔时间为10s;

2.设定monit日志输出facility, 参见syslog;

3.设定邮件通知服务器地址,默认server地址为localhost;

4.设定告警通知邮件的目的地;

5.monit内置一个Web服务器,用于展示系统当前运行状态,这里设定访问port.比如在浏览器里输入:http://192.168.1.2:9527.注意别被iptables阻隔了;

6.设为充许任何机器访问监控结果;

7.设定访问的监控结果的用户名跟密码;

8.跟C语言的include语义一样,把那些文件的内容包含进本文件.

监控进程:

进程监控可以监控进程是否退出,异常退出频率,CPU使用情况,内存使用情况,子进程的数目等.一个示例如下:

check process smb with pidfile /var/run/smbd.pid

start program = "/etc/init.d/smb start"

stop program = "/etc/init.d/smb stop"

if 2 restarts within 3 cycles then timeout

if totalmem > 100 Mb then alert

if children > 255 for 5 cycles then stop

if cpu usage > 95% for 3 cycles then restart

depends on smb.conf

check file smb.conf with path /etc/samba/smb.conf

if changed checksum then exec "/etc/init.d/smb restart"

该配置的用意如下:

1.当smb退出的时候,自动重启smb;

2.当在连续3次检查过程中有两次以上出问题,认为smb服务本身已经出错。则不再浪费时间去重启smb;

3.如果总的内存使用量超过100M则发送告警通知邮件;

4.如果在连续5次检查过程中子进程数都超过255个则停smb服务.这里纯粹是一个说明示例,对smb来说检查子进程没有意义;

5.如果在连续3次检查CPU使用率超过95%则重启smb服务.通过选stop然后start实现

6.指定smb监控还依依赖于smb.conf文件

7.如果smb.conf文件内容有变则重启smb服务。

如上,monit内置了已经很多的检查及动作,但由于提供了exec这种响应方式,所以你也可以扩展,比如可以写一个脚本发送一个信号到目标程序,并以约定好的方式通知目标程序当前发生了什么事情。这样目标程序就很容易的可以做出相应的响应。

监控文件:

文件监控可以监控文件的大小,检查文件是否做过修改等。一个简单的示例如下:

check file AdmApp.log with path /adm/log/AdmApp.log

if size > 100 MB then exec "/usr/sbin/logrotate -f /adm/config/app_log_rotate.conf"

该配置用意如下:

1.当日志文件AdmApp.log的大小大于100M时就使用logrorate进行日志转储,以避免产生过多的日志以及过大的日志文件。

监控目录:

目录监控用于监控目录的变动情况。一个简单的示例如下:

[root@RHEL5 1.0.1]# less core.rc

check directory bin with path /adm/bin

if changed timestamp then exec "/bin/corerotate /adm/ 6"

[root@RHEL5 1.0.1]# less /bin/corerotate

Num=$2

eval "ls --sort=time $1/core.*" | gawk 'NR > "'"$Num"'" {system("/bin/rm -rf " $0)}'

这个例子用意如下:

1.如下目录/adm/bin发生了变动就执行脚本/adm/bin/corerotate /adm/bin 6. 这个脚本用于保留最新生成的6个core文件,以防止大量的老旧core文件占用存储空间。

监控设备:

设备监控用于监控设备的使用情况,比如一块硬盘的使用空间情况,里面创建I节点数的情况等。一个简单的示例如下:

check device disk1 with path /dev/hda1

start = "/bin/mount /dev/hda1 /mnt/test"

stop = "/bin/umont /mnt/test"

if space usage > 90% then alert

if space usage > 99% then stop

这个例子用意如下:

1.如果/dev/hda1空闲,则自动挂载/dev/hda1

2.如果这个硬盘分区使用量超过90%时发送告警邮件

3.如果使用量超过99%时umount该设备

监控远程主机:

远程主机服务监控可以监控运程主动服务的提供情况,来通知本地进程做出相应的响应。一个简单的示例如下:

check host up2date with address 192.168.1.2

if failed port 21 protocol ftp

then exec “/usr/bin/genalarm /“NO FTP Service/” TestPrograme”

[root@RHEL5 1.0.1]# less genalarm

#!/bin/bash

# Author: Joshua Guo

# Time: July 23 2010

# Usage: genalarm [signal no] [process name]

if (( $# != 2 ))

then

echo "Usage: genalarm [alarm] [process name]"

exit 1

fi

pidfile="/var/run/$2.pid"

pid=

if [ -f "$pidfile" ]

then

line=

p=

read line < "$pidfile"

for p in $line

do

[ -z "${p//[0-9]/}" -a -d "/proc/$p" ] && pid="$pid $p"

done

if [ -n "$pid" ]

then

echo "$1" > /var/run/notice;

kill -SIGUSR2 $pid &> /dev/null

fi

else

echo "something wrong"

fi

这个例子用意如下:

1.如果远端机器192.168.1.2的ftp服务中断,则通知应用程序TestPrograme远端ftp服务已经中断。

从上可见,只需要简单的配置monit加上一些用C或是shell编写的胶合程序。一个强大的平台监控子系统就建立起来了。上面只是例举了一些简单的例子,更多详细信息请man monit和该问网站http://mmonit.com/monit/

你可能感兴趣的:(linux,监控,开源软件)