俗话说:工欲善其事,必先利其器.要做好系统管理,使自己的工作更轻松更有效的话,一个好的监控工具是必不可少的了.在这里我向大家推荐一款我使用了4年多的、功能强大、可灵活定制的开源监控利器---nagios。
运维监控Nagios连载1:Nagios服务器的自我监控实现
运维监控Nagios连载2:部署apache服务器
运维监控Nagios连载3:部署、配置Nagios服务
运维监控Nagios连载4:Nagios监控mysql服务器
运维监控Nagios连载5:关键应用监控的重要策略
【IT168 专稿】俗话说:工欲善其事,必先利其器.要做好系统管理,使自己的工作更轻松更有效的话,一个好的监控工具是必不可少的了.在这里我向大家推荐一款我使用了4年多的、功能强大、可灵活定制的开源监控利器---nagios。
首先,我们来看实际工作中需要监控的对象有哪些?在这里我总结出2种类型的监控对象:网络服务监控及主机资源监控。网络服务监控可包括主机存活检查、web服务监控、ftp服务监控、数据库服务监控、自定义服务监控等;主机资源监控可包括系统负载、当前ip链接数、磁盘空间使用情况、当前进程数以及自定义的资源监控等。
其次,我们再来看nagios监控的表现形式。监控的主要目的是当监控的对象发生故障或资源紧张时及时通知相关人员,以便问题得到迅速的处理。追求的效果就是"在老板和客户发现问题之前得到及时、有效的通知",假定故障通知来自老板,我想大家都不会很愉快的。Nagios为了方便我们的管理工作,提供了至少3种表现手段:
1、web方式,即通过浏览器观看被监控的对象;如正常状态下,其状态(status)是以蓝色填充并显示一个OK。
2、邮件通知,发生故障时,到达设定重试次数和探测间隔时间后发送邮件给管理员或相关人员,报告问题的大致情况。
3、手机短信,这是非常有用和及时的功能了;晚上熟睡中,再也没可能看web页面或查阅邮件,可以一旦发生故障,手机短信却能把你随时唤醒。
一般情况下,这3者是同时进行的:上班时间开个浏览器看页面显示、打开邮件程序定时收取邮件、手机24小时在线。
最后,我们以一个实际场景来展示nagios的强大功能,希望对大家的系统管理工作有所帮助。
场景描述
为了描述问题方便,我们假定有5个服务器要监控(web服务器、数据库服务器、邮件服务器、nfs文件共享服务器),需要对几个服务器的服务进行监控,同时监控每个服务器的资源使用情况,包括负载情况、磁盘分区使用情况、总进程数、当前ip连接数这个4个项目(当然你也可以自己写脚本监控更多的资源对象)。这些服务器除了系统管理员而外,还有其他用户(如程序员)对各自的服务器进行维护;当发生故障的时候,维护网站的程序员能收到报警邮件和报警短信,而管理数据库管理员则无需收到这些报警,同时维护程序的用户可以以自己的帐号登陆监控服务器,通过web方式察看自己所管服务器的状态(只能看自己的而看不到别人管辖服务器的状态)。
通过上面的描述,我们可以整理出下面的表格:
机器名称 | 角色 | 可查看状态及接受报警信息的用户 | 所需工具 |
Nagios服务器 | 监控端 | 系统管理员(SA) | Apache、nagios、nagios plugin、sendmail、perl等 |
邮件服务器 | 被监控端 | 系统管理员、邮件管理员 | Nrpe、nagios plugin、自定义脚本等 |
数据库服务器 | 被监控端 | 系统管理员、dba | Nrpe、nagios plugin、自定义脚本等 |
Web服务器 | 被监控端 | 系统管理员、webmaster | Nrpe、nagios plugin、自定义脚本等 |
Nfs共享服务器 | 被监控端 | 系统管理员 | Nrpe、nagios plugin、自定义脚本等 |
缓存服务器(squid) | 被监控端 | 系统管理员、webmaster | Nrpe、nagios plugin、自定义脚本等 |
配置好nagios和被监控机器后,其在浏览器里的基本输出与下图类似:
Nagios服务器的自我监控实现
要实现资源和服务两个方面的监控,需要配置服务器端(nagios server)及被监控端(NRPE-nagios remote plugin executor).为了能顺利地、有条理的部署nagios监控平台,一个好的工作风格是在nagios server自身实现服务和资源的监控,然后再在其他监控端部署nrpe,从nagios server端用check_nrpe测试通过后,再在nagios server配置文件中逐一增加监控项目。当然如果只是监控服务而不监控主机资源,则被监控端不做任何nrpe的安装。为了方便初学者更容易上手和成功,我们就从简单的步骤开始。
自我监控实现:配置邮件发送功能
因为报警邮件发送给用户邮箱后,监控系统本身没有必要接受别的邮件服务器发送的邮件,因此只需要使用服务器本身自带的sendmail来发送报警信息即可。用sendmail的另外一个目的就是简便。
如果系统是redhat 或 centos ,只需执行 service sendmail start 启动守护进程,然后再用dns服务器给它一个合法的域名(即A记录),马上就可以用mail命令来发送测试邮件到你的某个电子邮箱里了。收到测试邮件,就说明邮件系统配置结束,是不是很容易呢?这里给一个发送邮件的例子:
mail -s "This is sery's nagios test mail" sery@163.com < install.log
自我监控实现:测试短信发送
正常情况下,没有任何服务器能向手机发送短消息的,要到达这个目的,得花钱购买短信服务(也有些人运用飞信一类的方式来达到这个目的,个人觉得对于运营网站不是太靠谱)。要是在几年前,自己申请短信通道还是有可能的,2005年以后似乎门槛提高了很多。当你付费成功后,短信服务商会给你提供入口及加密关键字;然后我们自己写个脚本就可以发送短信。以下是我的服务器用perl写的脚本:
#!/usr/bin/perl -w
use strict;
use LWP::Simple;
use URI::Escape;
use Digest::MD5;
my ($mobile, $content) = @ARGV;
my $log_control = 1;
my $key = 'Ysdbyhd6T';
my $souce_content = substr($mobile, 0, 8) . substr($mobile, -10, 10) . $key;
my $md5 = Digest::MD5->new;
$md5->add($souce_content);
my $result_conent = uc($md5->hexdigest);
my $url = "http://http.asp.sh.cn/MT.do?Username=sery&Password=([-BVG'0&Mobile=$mobile&Content=$content&Keyword=$result_conent";
my $result = get $url;
if($log_control) {
my $fh;
open($fh, '>> /var/log/sms.log') or die "can't open log: $!";
print $fh join(' ', time, $result, "\n");
close $fh;
}
(以上脚本由宇捷提供)
说明:
1、my $key = 'Ysdbyhd6T'' 短信服务商给的验证关键字。
2、my $url="….." 短信服务商给的用户名、密码以及短信服务商的访问接口(url)全包括在这里了。
我们把这个文件放在目录 /usr/local/bin/ 下面,把它命名为 sms_send.pl ,用命令 chomod +x /usr/local/bin/sms.pl 给与它执行权限。这个脚本在各种各样的unix、linux下都可以正常工作,nagios报警短信发送就是靠它了。如果读者也打算拿这个脚本发送短信的话,只要改一下key值和url值就可以直接使用。
接下来就是验证是否可以发送短信,执行命令行 /usr/local/bin/sms.pl 13300108888 "It is a test" ,回车后数秒钟,你的手机应该能收到带有内容"It is a test"的短信息。为了保证短信服务的可靠性,我做了一个策略:每天下午6点定时给我发一个通知短信;告诉我短信发送是正常的,也是该下班回家了。做法:执行 crontab -e 然后输入行 00 18 * * * /usr/local/bin/sms.pl 13300108888 "It is Ok" 。