Nagios 是一个开放源代码的主机、服务和网络监控平台。它被广泛使用在企业的IT部门中,负责企业核心营运情况的监控工作。
这次我对Nagios的研究目的在于,为我所服务的公司搭建一套能够监控主机运行的服务和其性能情况的系统。预计此项目的运行环境为RHEL5(所以本系列中测试环境均为RHEL5,禁用SElinux),涉及到的开源项目可能会包括:nagios、rrdtool、pnp等等。
本项工作于2007年8月初开始,预计会持续1个月的时间。
在研究过程中,多次受到网络上朋友的鼓励和帮助,非常感谢!
分类: LINUX
与其说Nagios 是一个服务器监控系统,不如说nagios是一个服务和主机的监控平台。
为什么这么说呢?Nagios的设计者并没有把nagios设计成万能的巨人,而是把nagios设计成监控王国之中的国王,或者说是“监控之神”。
nagios的功能是监控服务和主机,但是他自身并不包括这部分功能的代码,所有的监控、检测功能都是有插件来完成的。再说报警功能,如果监控系统发现问题不能报警那就没有意义了,所以报警也是nagios很重要的功能之一。但是,同样的,nagios自身也没有报警部分的代码,甚至没有插件,而是交给用户或者其他相关开源项目组去完成。类似这样细致的工作,被nagios的开发人员称为dirty work(脏活)。其实脏活不脏,只是太细致了,对于nagios——一个负责监控工作的老板来说,细致的工作必然是交给他的员工去搞定啦。
所以我这里说的nagios安装,是指基本平台,也就是nagios软件包的安装。它是监控体系的框架,也是所有监控的基础。
打开nagios官方的文档,会发现nagios基本上没有什么依赖包,只要求系统是linux或者其他nagios支持的系统。不过如果你没有安装apache(http服务),那么你就没有那么直观的界面来了解信息了,所以apache姑且算是一个前提条件。关于apache的安装,网上有很多,照着安装就是了。安装之后要检查一下是否可以正常工作。
Ok,准备工作搞定。让我们开启nagios之旅!
首先到官方网站(http://www.nagios.org/download/)去下载最新的nagios软件包,本文中使用的是nagios-2.9.tar.gz 。顺便把官方文档也下载下来,以备不时之需。
其实nagios的安装是很简单的,sery兄称其为“难够死”,也只是因为配置上稍显麻烦。所以如果下决心要搞定nagios,那么你需要的最重要的能力,不是技术,而是毅力。呵呵,玩笑话就不多说了,让我们开始安装软件包:
<!--[if !supportLists]-->1、 <!--[endif]-->nagios用户
adduser nagios mkdir /usr/local/nagios chown nagios.nagios /usr/local/nagios |
<!--[if !supportLists]-->2、 <!--[endif]-->nagios 组
grep "^User" /etc/httpd/conf/httpd.conf #确定apache的用户,默认是apache /usr/sbin/groupadd nagcmd /usr/sbin/usermod -G nagcmd apache #apache的用户名 /usr/sbin/usermod -G nagcmd nagios |
<!--[if !supportLists]-->3、 <!--[endif]-->解压
tar xzf nagios-version.tar.gz |
<!--[if !supportLists]-->4、 <!--[endif]-->编译
./configure --prefix=prefix --with-nagios-user=someuser --with-nagios-group=somegroup --with-command-group=cmdgroup #变量prefix 为安装目录,例如/usr/local/nagios #变量someuser 为nagios的用户,例如nagios #变量somegruop 为nagios属于的组,例如nagios #变量cmdgroup 为nagios命令行属组,例如nagcmd |
<!--[if !supportLists]-->5、 <!--[endif]-->安装
make all make install make install-config make install-init |
<!--[if !supportLists]-->6、 <!--[endif]-->检查
ls /usr/local/nagios/ |
<!--[if !supportLists]-->7、 <!--[endif]-->生成http用户验证文件,用户名为nagios
/usr/bin/htpasswd -c /usr/local/nagios/etc/htpasswd.users nagios |
<!--[if !supportLists]-->8、 <!--[endif]-->将nagios的信息加到apache中,打开/etc/httpd/conf/httpd.conf文件,在文件最后添加如下代码:
ScriptAlias /nagios/cgi-bin /usr/local/nagios/sbin <Directory "/usr/local/nagios/sbin"> Options ExecCGI AllowOverride None Order allow,deny Allow from all AuthName "Nagios Access" AuthType Basic AuthUserFile /usr/local/nagios/etc/htpasswd.users Require valid-user </Directory> Alias /nagios /usr/local/nagios/share <Directory "/usr/local/nagios/share"> Options None AllowOverride None Order allow,deny Allow from all AuthName "Nagios Access" AuthType Basic AuthUserFile /usr/local/nagios/etc/htpasswd.users Require valid-user </Directory> |
<!--[if !supportLists]-->9、 <!--[endif]-->重启apache
/etc/init.d/httpd restart |
经过上述9个步骤,如果没有出问题的话,你的nagios页面将神奇的出现在下面的地址,赶快去验收成果吧!
把我的图片贴上给大家看看
![](http://blogimg.chinaunix.net/blog/upfile/070808145308.jpg)
分类: LINUX
Nagios的插件是真正工作在检测服务和主机工作的第一线的真正英雄,没有他,nagios系统只是一个空壳而已.因此,在安装了nagios平台之后的第一件事情就是将插件安装上去。
从nagios主页下载了最新的nagios官方插件,本文中用到的是nagios-plugins-1.4.9.tar.gz 。
<!--[if !supportLists]-->1、 <!--[endif]-->解压
tar xzf nagios-plugins-1.4.9.tar.gz
<!--[if !supportLists]-->2、 <!--[endif]-->编译
./configure --prefix=prefix
#变量prefix 为安装目录,例如/usr/local/nagios
<!--[if !supportLists]-->3、 <!--[endif]-->安装
make
make install
<!--[if !supportLists]-->4、 <!--[endif]-->检查
ls /usr/local/nagios/libexec
如果安装成功的话,你可以看到在这个目录下有很多可执行程序或者脚本,名称类似:check_icmp。
经过上述4个步骤,nagios的脚本就宣告安装成功,但是如何让这些脚本工作起来呢?nagios并没有提供每个监控程序的脚本的说明文档,想了解这些脚本如何工作的话,需要通过--h参数,显示其使用方法和参数。例如:
./check_icmp --h Usage: check_icmp [options] [-H] host1 host2 hostn Options: -h, --help Print detailed help screen -V, --version Print version information -H specify a target -w warning threshold (currently 200.000ms,0%) -c critical threshold (currently 500000.000ms,80%) -n number of packets to send (currently 5) -i max packet interval (currently 80.000ms) -I max target interval (currently 0.000ms) -m number of alive hosts required for success -l TTL on outgoing packets (currently 0) -t timeout value (seconds, currently 10) -b icmp packet size (currenly ignored) -v verbose ... |
根据提示的方法,可以在命令行中尝试使用一下:
./check_icmp -H www.baidu.com OK - www.baidu.com: rta 33.632ms, lost 0%|rta=33.632ms;200.000;500.000;0; pl=0%;40;80;; |
可以看到状态值“OK”,以及一些详细的数据信息。
经过了上述实验,说明这些插件都是可以独立使用的,那在nagios之中,是如何调用这些插件的呢?如果要加入参数又需要用哪种格式呢?
首先,要了解这些插件会被nagios用在什么地方。nagios有很多个cfg文件,用来定义各式各样的信息,其中hosts.cfg和services.cfg(一般是这两个,也可能是其他定义主机和服务的配置文件)是用来定义主机和服务的信息的。这些插件就被使用在这里。例如,我在services.cfg中定义个一需要监控的SSH服务,名称为TestSSH:
define service { host_name TestSSH service_description check_ssh check_command check_ssh } |
除了直接使用插件来做check_command项的参数以外,还可以使用自己定义的命令来。例如,我定义一个需要监控的主机,名字是test.VN:
define host { host_name test.VN alias test.VN address 192.168.0.1 check_command check-host-alive } |
在此例中,check_command项的参数“check-host-alive”并非一个插件,而是在commands.cfg文件中定义的一个命令。其实他的本质也是插件,只不过,他把插件加工包装了。我们来看一下在commands.cfg中对这个命令的定义:
# 'check-host-alive' command definition define command{ command_name check-host-alive command_line $USER1$/check_ping -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 1 } |
在这个定义中,可以看到,命令名称就定义为“check-host-alive”,命令实际的操作定义为蓝色部分。我们对应check_ping的说明来分析一下这个操作的意图。
|
首先, $USER1$这个参数在resource.cfg中定义,这个值会指向插件的目录(如:/usr/local/nagios/libexec)。 “-H $HOSTADDRESS$” 是定义目标主机的地址,这个地址在hosts.cfg中定义了(如:www.baidu.com 或者 192.168.0.1)。 “-w 3000.0,80%” 其中-w说明后面的一对值对应的是“WARNING”状态,“80%”是其临界值。 “-c 5000.0,100%” 其中“-c”说明后面的一对值对应的是" CRITICAL",“100%”是其临界值。“-p 1”说明每次探测发送一个包。
有很多朋友问我这样的问题,如何监听非默认端口的服务。下面我就举例说明一下这个问题:
例如:现需检查的一个运行在8080端口上的http服务。那么我们可以对commands.cfg文件中对关于check_http的声明做如下修改(红色部分为添加的内容)。
# 'check_http' command definition define command{ command_name check_http command_line $USER1$/check_http -H $HOSTADDRESS$ -p $ARG1$ } |
其中 $ARG1$是指在调用这个命令的时候,命令后面的第一个参数。
再把services.cfg中,对应服务的检测命令后面加一个参数:
define service { host_name ... ... check_command check_http!8080 } |
这样就可以对8080端口的http服务进行监控了。如果你要添加多个参数的时候,也可以类似操作。
综上,插件的安装和调用方法也就举例介绍完毕了,大家在使用中也可以使用自己写的检测脚本来完成比较特殊的检测功能。Enjoy!
分类: LINUX
Nagios的基础平台和插件都安装完成之后,下一步就是启动nagios的服务了。不要着急,在启动之前,我们还要做点准备工作。
1、准备各种配置文件。还记得在基础系统安装的时候,敲过这样一个命令吧:make install-config 。这个命令的作用是生成配置文件的样式文件。你可以在 nagios/etc/ 目录下找到这些文件,其名字类似commands.cfg-sample 。我们首先要做的就是将这些文件变成我们初始的配置文件。
cd ...nagios/etc cp nagios.cfg-sample nagios.cfg cp commands.cfg-sample commands.cfg cp cgi.cfg-sample cgi.cfg cp localhost.cfg-sample localhost.cfg .... |
总之,就是把那些sample去掉,让它们真正的上岗。
然后,我们修改cgi.cfg文件:
use_authentication=1 (默认) default_user_name=nagios authorized_for_system_information=nagiosadmin,nagios authorized_for_configuration_information=nagiosadmin,nagios authorized_for_system_commands=nagiosadmin,nagios authorized_for_all_services=nagiosadmin,nagios authorized_for_all_hosts=nagiosadmin,nagios authorized_for_all_service_commands=nagiosadmin,nagios authorized_for_all_host_commands=nagiosadmin,nagios |
我是用nagios这个名字做为默认用户的,所以在上述几个配置项中,我都在最后添加了这个用户。
ok,做了上述几个简单的操作之后,我们就可以检测一下配置文件的正确性了,这个操作是很重要且必要的,在以后对nagios做配置修改或者添加监控对象的时候,也都要记得重启nagios之前要做这个操作:
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg |
如果没有问题的话,会有如下显示:
Total Warnings: 0 Total Errors: 0 |
如果存在问题,会提示你问题,出在什么地方,修复错误就可以了。如果不清楚如何修改,请参详我之后关于各个配置文件的说明文档。
终于可以启动了吧,命令如下:
/etc/rc.d/init.d/nagios start |
如果正常启动,那么就可以去验收我们的成果了,打开浏览器,在地址栏中输入
http://ServerIP/nagios/ |
这是会提示你输入用户名和密码,这个密码就是我们在安装基本系统的时候,用命令
/usr/bin/htpasswd -c /usr/local/nagios/etc/htpasswd.users nagios |
生成的,命令后面的参数分别是认证文件和用户名。如果你忘记了用户名和密码,没关系,再执行一次吧。
如果要添加用户的认证,那么要 去掉参数“-c”,否则会覆盖之前的用户验证信息。另外,添加了用户之后,也要在cgi.cfg文件中进行相应的添加哦!
为了庆祝胜利,我来上传一些登录的图片给大家分享一下吧。
![](http://blogimg.chinaunix.net/blog/upfile/070809171551.jpg)
![](http://blogimg.chinaunix.net/blog/upfile/070809171602.jpg)
![](http://blogimg.chinaunix.net/blog/upfile/070809171613.jpg)
![](http://blogimg.chinaunix.net/blog/upfile/070809171622.jpg)
分类: LINUX
针对主机监控的配置项都是怎样的呢?一般对于主机的监控配置都会写在一个名字为hosts.cfg的配置文件中,以下是定义一台主机可以用到的定义参数:
define host{ host_name host_name #简短的主机名称 alias alias #别名,可以更详细的说明主机 address address #ip地址,当然你如果足够信任你的DNS的话,也可以写名称。如果你不定义这个值,nagios将会用host_name去寻找主机。 parents host_names #上一节点的名称,也就是指从nagios服务器到被监控主机之间经过的节点,可以是路由、交换机、主机等等。当然,这个节点也要定义,并且要被nagios监控。 hostgroups hostgroup_names #主机组名称,简短的 check_command command_name #检查命令的简短名称,如果此项留空,nagios将不会去判断该主机是否alive。 max_check_attempts 整数 #当检查命令的返回值不是“OK”时,重试的次数 check_interval 数字 #循环检查的间隔时间。 active_checks_enabled [0/1] #是否启用“active_checks” passive_checks_enabled [0/1] #是否启用“passive_checks”,及“被动检查” check_period timeperiod_name #检测时间段简短名称,注意这个只是个名称,具体的时间段要写在其他的配置文件中哦! obsess_over_host [0/1] #是否启用主机操作系统探测。 check_freshness [0/1] #是否启用freshness测试。freshness测试是对于启用被动测试模式的主机而言的,其作用是定期检查该主机报告的状态信息,如果该状态信息已经过期,freshness将会强制作主机检查。 freshness_threshold 数字 #fressness的临界值,单位为秒。 如果定义为0,则为自动定义。 event_handler command_name #当主机发生状态改变时,采用的处理命令的简短的名字(可以在commands.cfg中对其定义) event_handler_enabled [0/1] #是否启用event_handler low_flap_threshold 数字 #抖动的下限值。这里我简单解释一下抖动的含义,它定义了这样一种现象:在一段时间内,主机(或服务)的状态值频繁的发生变化,类似一个问题风暴或者一个网络问题。 high_flap_threshold 数字 #抖动的上限值 flap_detection_enabled [0/1] #是否启用抖动检测 process_perf_data [0/1] #是否启用processing of performance data retain_status_information [0/1] #程序重启时,是否保持主机状态相关的信息 retain_nonstatus_information [0/1] #程序重启时,是否保持主机状态无关的信息 contact_groups contact_groups #联系人组(这个组会在contactgroup.cfg文件中定义),在此组中的联系人都会受到该主机的告警提醒信息。 notification_interval 整数 #告警临界值。达到此次数之后,才会发送该机的报警提醒信息。 notification_period timeperiod_name #该机的告警时间段 notification_options [d,u,r,f] #该机告警包括的状态变化结果 notifications_enabled [0/1] #是否启用告警提醒功能 stalking_options [o,d,u] #持续状态检测参数,o = 持续的UP状态, d = 持续的DOWN状态, and u = 持续的UNREACHABLE状态. } |
呵呵,看了上面那么长的配置说明是否有点头晕,一般我们对主机的监控需求是很简单的,如 :
在任何时间内,只要用ping命令判断是否可以ping通主机即可。连续出现5次ping不通,则断定其出现问题。连续出现3次问题发通知到mygroup组。发送提醒包括以下状态改变:DOWN(ping不通) UNREACHABLE(不可达) RECOVERY(恢复正常,可以ping通了)
根据以上需求,其监控主机的配置如下即可:
define host { host_name test.1 alias test.1 address 192.168.0.1 contact_groups mygroup check_command check-host-alive max_check_attempts 5 notification_interval 3 notification_period 24x7 notification_options d,u,r } |
分类: LINUX
define service { host_name host_name service_description service_description servicegroups servicegroup_names is_volatile [0/1] #是否启用“volatile”模式。这个模式的含义是说名这个服务是不稳定的,或者说是危险的。只要其状态改变了,就不会再自己被恢复回来。这个参数很少使用,等到使用的时候我们再来细说。 check_command command_name max_check_attempts # retry_check_interval # active_checks_enabled [0/1] passive_checks_enabled [0/1] check_period timeperiod_name parallelize_check [0/1] obsess_over_service [0/1] check_freshness [0/1] freshness_threshold # event_handler command_name event_handler_enabled [0/1] low_flap_threshold # high_flap_threshold # flap_detection_enabled [0/1] process_perf_data [0/1] retain_status_information [0/1] retain_nonstatus_information [0/1] notification_interval # notification_period timeperiod_name n otification_options [w,u,c,r,f] notifications_enabled [0/1] contact_groups contact_groups stalking_options [o,w,u,c] } |
ok,还是让我们来举例说明一下吧。
1、随时监控Web.TEST主机上的HTTP服务(80端口),发生两次不能访问及认定是发生故障,故障累计3次告警,联系人组是mygroup。告警之后每两分钟再进行一次检查,如果10分钟之后仍然没有恢复,再发送一次告警。
define service { host_name Web.TEST service_description check_tcp 80 check_period 24x7 max_check_attempts 2 normal_check_interval 3 retry_check_interval 2 contact_groups mygroup notification_interval 10 notification_period 24x7 notification_options w,u,c,r check_command check_tcp!80 } |
如果要检测其他服务,则将代码中蓝色的两行修改即可。例如,要检查默认的ssh服务是否开启:
define service { host_name Web.TEST service_description check_ssh check_period 24x7 …… check_command check_ssh } |
在测试服务的时候,要充分发挥插件的功能,如何安装和使用插件,请看 这篇文章。
分类: LINUX
1、文件contactgroups.cfg,用来定义联系人组。多个组员用“,”隔开。
define contactgroup { contactgroup_name mygroup alias network administrator group members feiyang,bb,cc } |
2、文件contacts.cfg,用来定义联系人。
define contact { contact_name feiyang alias hosts & network administrator service_notification_period 24x7 host_notification_period 24x7 service_notification_options w,u,c,r host_notification_options d,u,r service_notification_commands notify-by-email host_notification_commands notify-by-email email XXXX@nagios.net } |
3、文件timeperiods.cfg,用来定义时间段
define timeperiod { timeperiod_name WorkTime alias 10 Hours A Day, 5.5 Days A Week sunday 07:30-17:30 monday 07:30-17:30 tuesday 07:30-17:30 wednesday 07:30-17:30 thursday 07:30-17:30 friday 07:30-17:30 saturday 07:30-12:00 } |
分类: LINUX
著名的开源服务监系统nagios拥有强大的功能,可谓服务器监控之神。它的功能之一就是故障告警。一旦出现问题,它可以第一时间通知工作人员。那么如此强大的告警提醒功能如果出现了问题,要如何定位问题?配置文档中的相关参数又表示什么意义呢?下面我会逐个向大家介绍。
问题阐述:无法发送告警提醒信息(email、传真、短信等)
解决方法:顺藤摸瓜,根据告警提醒功能运作的原理,一层一层去检查设置。
<!--[if !supportLineBreakNewLine]-->ps:如果你还没有设置你的告警,也可以顺着我的叙述来设置你的告警 ^-^
(1)所有提醒任务首先要查看hosts.cfg或者services.cfg,在这两个文件中有如下几个参数关系到提醒:
notifications_enabled : 是否开启提醒功能。1为开启,0为禁用。注,一般,这个选项会在主配置文件(nagios.cfg)中定义,效果相同。
contact_groups: 定义接受提醒的联系人组,如果hosts.cfg文件中所有的条件都符合,那么提醒任务将会继续检查contactgroup.cfg文件。
notification_interval: 重复发送提醒信息的最短间隔时间。默认间隔时间是60分钟。如果这个值设置为0,将不会发送重复提醒。
notification_period: 发送提醒的时间段。非常重要的主机(服务)我定义为7×24,一般的主机(服务)就定义为上班时间。如果不在定义的时间段内,无论什么问题发生,都不会发送提醒。
notification_options: 这个参数定义了发送提醒包括的情况:d = 状态为DOWN, u = 状态为UNREACHABLE , r = 状态恢复为OK , f = flapping。,n=不发送提醒。
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->
综上,如果要提醒信息顺利通过hosts.cfg文件,并且发出提醒的话,要满足:
notifications_enabled 值为1
contact_groups 的组已经定义正确。见(3)
notification_period 定义的时间段包括出问题的时间,检查方法如见(2)
notification_options 定义的包括需要提醒的状态改变。
(2)检查timeperiod的配置,一般在主配置文件中,或者在timeperiod.cfg等配置文件中可以找到:
define timeperiod { timeperiod_name 24x7 alias 24 Hours A Day, 7 Days A Week sunday 00:00-24:00 monday 00:00-24:00 tuesday 00:00-24:00 wednesday 00:00-24:00 thursday 00:00-24:00 friday 00:00-24:00 saturday 00:00-24:00 } |
这个配置就是定义了一个名字是"24×7"的时间段,包括从周一到周日中每天的24小时。这个时间段里,系统会将故障告警信息发送给联系人。
(3)检查contactgroup.cfg的配置
define contactgroup{ contactgroup_name novell-admins alias Novell Administrators members jdoe,rtobert,tzach } |
此配置定义了一个名字叫 novell-admins 的联系人组,包括成员 jdoe,rtobert,tzach 等三个人。你要确定(1)中contact_groups 的值在这里有定义。
(4)要检查各个联系人的配置,就要查看contacts.cfg文件:
define contact{ contact_name jdoe alias John Doe service_notification_period 24x7 host_notification_period 24x7 service_notification_options w,u,c,r host_notification_options d,u,r service_notification_commands notify-by-email host_notification_commands host-notify-by-email email jdoe@localhost.localdomain pager 555-5555@pagergateway.localhost.localdomain address1 xxxxx.xyyy@icq.com address2 555-555-5555 } |
这个配置文件例子顶一了一个jdoe的联系方式和另外一些参数。注意这里的参数也可能会造成提醒信息没有发送。email、pager、address分别对应该联系人的email地址、传真地址、其他地址等等。这里解释一下其他相关的参数:
host_notification_period: 主机类提醒发送时间。定义主机类提醒发给该联系人的时间段。在hosts.cfg中已经定义了一个notification_period, 那个定义是是定义所有该主机需要提醒的人接受提醒的时间段。这里的这个时间段则是说明这个人接受提醒信息的时间段,也就是说提醒发送的时间必须同时满足主 机配置文件和此配置文件中的时间段才会正常发送给联系人jdoe。这个参数对于那些24小时3班导的人,或者10点之后起床的老板,是很有用的。
service_notification_period: 这个参数类似于host_notification_period,不多说了。
host_notification_commands: 这个参数说明发送主机提醒信息的命令。呵呵,如果以上的配置都没有问题,但是没有接受到提醒的话,要留意这里!
service_notification_commands: 这个参数说明发送服务提醒信息的命令。
host_notification_options:定义接受提醒的主机状态改变:d = DOWN , u = UNREACHABLE, r=UP or OK, f = flapping,n =什么都不发送。
service_notification_options: 定义接受提醒的服务状态改变。参数意义同host_notification_options。
(5) 小结。根据以上的分析,如果关于服务状态改变、提醒信息发送时间段、联系人的联系地址等都没有问题,那么可能的问题就是发送提醒信息的命令出现问题。查看 这些命令之前,请确定nagios系统的服务器上有mail或sendmail等发送邮件的软件包,且工作正常。如果你有一些短信猫,或者用了其他的提醒 脚本,请确定其工作正常。
另外,nagios还包括一个名为 Notification Escalations 的模块,用来扩展已经很强大的提醒体系。
举例说明一下这个模块的功能:你定义一台主机的提醒,首次发现问题不提醒,直到连续三次重复出现问题时,主机管理员A会收到提醒,然后过了一段时间,问题还没有修复,这是又继续发送第4次提醒给A(此时A共收到2次提醒),在第五次提醒的时候,就发给了管理员B,…… ,在第十次提醒的时候就发给了管理员的老板…… 如果你用到这个模块,也需要检查其是否配置正确。
(6)提醒命令
一般的提醒命令名称如 xxx-notify-by-xxx,他只是一个名字,具体是用什么来实现这个提醒的具体工作的,要查看command.cfg文件中,关于此命令的定义,举个例子:
# 'notify-by-email' command definition define command{ command_name notify-by-email command_line /usr/bin/printf "%b" "*****Nagios2.9*****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$" | /bin/mail -s "** $NOTIFICATIONTYPE$ alert - $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$ } |
上例中,定义了一个名字为" notify-by-email"的命令,这个命令的内容,就是 command_line对应的命令行定义的。如果你是用独立的脚本来完成提醒功能,可能会类似下面的情况:
#host-notify-by-sms define command { command_line /nagios/sms.sh } |
本文参考官方文档
![]() |
|
分类: LINUX
PNP是一个小巧的开源软件包,它是基于PHP和PERL,利用rrdtool将Nagios采集的数据绘制成图表。如果你要安装PNP,那么准备工作有如下3项:
1、整合Apache和PHP(本文使用版本:Apache 2.2.3 PHP 5.1.6)
2、安装rrdtools (本文使用版本:RRDTools 1.2.23)
3、安装Perl (本文使用版本: Perl5 )
关于这3项工作的方法,网络上有很多精彩的文章介绍,我就不多说了,下面介绍一下PNP的工作原理,顺便将安装配置的内容也描述如下。
要介绍PNP工作原理,首先要说明一下Nagios提供的数据接口,也就是PNP的数据来源。在前面的文章中,我提到过,在定义host或service中都有一个定义项,名为process_perf_data,其值可以定义为0或1,其作用是是否启用Nagios的数据输出功能。如果你将此项赋值为1,那么Nagios就会将收集的数据写入到某个文件中,以备提取。所以,如果你想让Nagios将数据输出的话,首先要将Nagios的主配置文件nagios.cfg中相关的配置修改:
process_performance_data=1 service_perfdata_command=process-service-perfdata #默认此句被注释掉了 |
如果想要对某个监控对象做数据图表,则需在所对应的host或者service定义中(一般写在hosts.cfg或者services.cfg文件中),包含如下的定义:
process_perf_data 1 |
这样,Nagios就会调用相应的命令来输出数据了。Nagios的command定义中默认有一项“process-service-perfdata”,该命令声明了Nagios输出哪些值到输出的文件中。不过其定义相对简单,PNP提供了一个perl脚本,更详尽的定义了一个输出数据的方法。如果要使用PNP的话,我们需要在command的定义中,将“process-service-perfdata”命令对应的执行命令行的内容替换成该脚本:
define command{ command_name process-service-perfdata command_line /usr/local/nagios/libexec/process_perfdata.pl } |
这样设置了之后,Nagios就会利用PNP提供的脚本进行相关的工作了。
细心的看管大概已经发现了,刚刚定义命令时用到的脚本“process_perfdata.pl”现在还不存在。我们现在就来安装,也就PNP的软件包(本文用的版本是pnp-0.3.3.tar.gz)。安装方法很简单,过程也很顺利(我的系统安装时选择了开发工具,谢天谢地!)
./configure --with-rrdtool=/usr/local/rrdtool/bin/rrdtool --with-perfdata-dir=/usr/local/nagios/share/perfdata/ make all make install |
安装结束之后,再去检查一下Nagios的插件目录(libexec),就会发现多了一个名为“process_perfdata.pl”的脚本。
ok,现在执行一下Nagios配置检查命令
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg |
如果没有什么错误,那么我们重新启动Nagios。
/etc/init.d/nagios restart |
验收一下成果,在浏览器的地址栏中输入:
http://IP/nagios/pnp/ |
如果可以看到图表,那就恭喜啦!贴上我的图表给大家看看。
![](http://blogimg.chinaunix.net/blog/upfile/070815150925.jpg)
分类: LINUX
为什么要使用这个客户端呢?在nagios的插件中,有一个名为“check_ssh”的插件,它也可以实现对于远程服务器中local信息的监控。但是,相对NRPE,“check_ssh”占用的系统资源就略多了一点。监控少量的服务时可能不会察觉,但是如果监控对象比较多,那么差距就非常明显了。但是还有一点要说明,虽然NRPE也是使用SSL安全通道,但是“check_ssh”的安全性要高于NRPE,安全性总是和易用性成反比的。 -_-||
首先,需要在nagios监控平台服务器上安装NRPE,安装很简单,到官方网站下载最新的nrpe包,本例中使用的是nrpe-2.8.1.tar.gz。
tar xzf nrpe-2.8.1.tar.gz cd nrpe-2.8.1 ./configure make all make install-plugin |
如果安装成功,就可以在/.../nagios/libexec 目录中找到 "check_nrpe"这个插件。
之后需要定义一个可以在监控平台使用的命令,这个定义一般会在/.../nagios/etc/commands.cfg中,其内容如下:
define command{ command_name check_nrpe command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ } |
这样就可以在定义服务的时候使用这个命令了,举个例子:
define service{ host_name remotehost service_description CPU Load ... check_command check_nrpe!check_load } |
这个例子就定义了对remotehost服务器cpu负载情况的监控。其中红色的“check_load”是什么,来自哪里,我们下面再说。
ok,现在来说本文的重点内容,如何在被监控服务器上安装NRPE。
首先,需要准备的包有两个:NRPE和nagios-plugin。本文使用的版本是nagios-plugins-1.4.9.tar.gz和nrpe-2.8.1.tar.gz。首先安装插件:
/usr/sbin/useradd nagios passwd nagios tar xzf nagios-plugins-1.4.9.tar.gz |
然后安装NRPE:
tar xzf nrpe-2.8.1.tar.gz cd nrpe-2.8.1 ./configure make all make install-plugin make install-daemon make install-daemon-config |
ok,安装好了,可以到/usr/local/nagios/下面检查一下,应该生成了4个目录:bin、etc、libexec、share。之后我们要配置一下,目的是让NRPE可以以守护进程的形式监听5666端口,为特定地址的nagios平台提供服务。在官方的NRPE文档中,详细说明了如何将NRPE嵌入xinetd服务中,我在这里就不啰嗦了。有些情况,我们的服务器上没有xinetd或者inetd这样的服务,那如何办呢?我在这里介绍一种更加通用的方法。
首先,需要修改/usr/local/nagios/etc/nrpe.cof。
找到“allowed_hosts=127.0.0.1”将其改为:
allowed_hosts=127.0.0.1,$Nagios监控平台的地址或域名 |
这个配置的作用是声明合法的nrpe服务对象,没有在这里声明的地址是无法从本机的NRPE获得服务的。“$Nagios监控平台的地址或域名”可以是ip地址,也可以是域名。在我环境中,nagios监控平台没有一个固定的公网ip,所以其他在公网上的服务器如果安装了NRPE的话,就只能通过动态域名来辨别监控平台的地址。
启动NRPE守护进程:(可以将此命令加入/etc/rc.local,以便开机自动启动)
/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d |
此命令生成的日志会在系统的日志(/var/log/message)中。如果没有出错,就基本搞定了。我们来验收一下,在本机上:
/usr/local/nagios/libexec/check_nrpe -H 127.0.0.1 |
或者在nagios监控平台服务器上:
/usr/local/nagios/libexec/check_nrpe -H $目标主机地址 |
正常的返回值为被监控服务器上安装的NRPE的版本信息:
NRPE v2.8.1 |
如果看到这些,恭喜你,你的NRPE安装成功了。
那么,通过NRPE,可以监控到哪些信息呢? 只要在被监控服务器上有的插件(/usr/local/nagios/libexec中的所有插件),都可以使用。也就是说,你想监控什么,只要有对应的插件,就可以实现。
例如,我希望监控一台远程服务器上的cpu负载。在远程主机的插件中有“check_load”,那么,在nrpe.conf中定义一个cpu负载的监控:
command[check_load]=/usr/local/nagios/libexec/check_load -w 15,10,5 -c 30,25,20 |
这个配置就声明了一个命令:“check_load”,也就是上述中红色字 check_load的真身所在了。
本文参考Nagios官方文档NRPE.pdf
分类: LINUX
在经过了若干次重新安装配置之后,我所架设的Nagios监控平台已经稳定的运行了一段时间,目前其监控着四十几台主机,一百余个服务的运行情况。在此期间,我得到了很多朋友的帮助,我在这里要感谢他们。特别的,我要感谢帮助完成统计工作的工作伙伴——小华。
在这里,我还有一些心得想分享给大家。
首先,关于服务的命名,我在前面的文章里面的命名规则是
应用名称.[物理位置].域名(小写英文)|项目名称首字母(大写字母) |
但是在nagios的显示界面中,是安装字母顺序排序的,所以,用一个项目的主机不是排列在一起的,看起来不太方便,如果你也遇到这样的麻烦,那么我建议倒过来:
域名(小写英文)|项目名称首字母(大写字母).[物理位置].应用名称 |
另外,在实际的应用中,对某一个服务监控的质量,与你选择的插件的适合度是息息相关的。有个朋友推荐了一个nagios插件的网站给我,让我受益良多:http://www.nagiosexchange.org
在日常的使用中,nagios有的时候是有点神经质的,这也体现了其工作的高效。他默认的情况会尽快的对服务进行检查,有的时候服务只是重启一下,nagios就发了短信给我。所以,我对nagios的主配置文件进行了修改,将间检查周期定为90秒,目前感觉还可以,建议大家也不要让nagios太迅猛了,呵呵~~
随着以后的使用,我还会不定期的将使用情况和新的发现填充到这个系列里来。
最后,再次感谢各位对我博客的关注,谢谢!