Nagios监控—主程序的安装
创始人
2024-07-23 21:41:38
0

Nagios 是一个开放源代码的主机、服务和网络监控平台,有各种应用插件,功能非常强大.

一,主程序的安装:

nagios-*.tar.gz  主程序

nagios-plugins.*.tar.gz   插件

nrpe*.tar.gz   被监控端程序

1,安装主程序:

  #tar -zxvf nagios*.tar.gz

  #cd nagios*

  #./configure --prefix=/usr/local/nagios

  #make all

  #pw useradd nagios

  #mkdir /usr/local/nagios                                

  #chown nagios:nagios /usr/local/nagios             

  注:安装的时候如果提示:

  #make install

  /usr/bin/install -c -m 755 -d -o

  #make install-init

  root -g root /usr/local/etc/rc.d

  #make install-config

  #make install-commandmode

  只需增加root组,将rc.d改成chown root:root rc.d

         

2.安装插件

  #tar -zxvf nagios-plugins*.tar.gz

  #cd nagios-plugins*

  #./configure --prefix=/usr/local/nagios

  #make && make install

3,将apache的运行用户加入nagios的组

#grep ^user httpd.conf

#pw groupadd nagios -m www

4.修改apache配置 修改apache的配置文件,增加nagios的目录,并且访问此目录需要进行身份验证 vi /usr/local/apache2/conf/httpd.conf,在最后增加如下内容

#setting for nagios 20070707 ScriptAlias /nagios/cgi-bin /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 //用于此目录访问身份验证的文件     Require valid-user   Alias /nagios /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 //用于此目录访问身份验证的文件     Require valid-user
  增加验证用户 也就是通过web访问nagios的时候,必须要用这个用户登陆.在这里我们增加用户test[root@localhost conf]# /usr/local/apache2/bin/htpasswd -c /usr/local/nagios/etc/htpasswd test

到这里nagios的安装也就基本完成了,你可以通过web来访问了.

http://192.168.0.1/nagios 会弹出对话框要求输入用户名密码

#p#

二.典型配置 之前已经说过nagios要用起来,就必须修改配置文件,增加要监控的主机和服务才行.在具体做这个动作之前,下面的概念必须要了解.   1)预备知识 Nagios自己定义了一套规则用于配置文件,其中最重要的概念就是”对象”----object.通俗的理解:假定我们首先定义了”性别”这个对象,它的值只可能是男,女,人妖等等,然后定义某人为一个对象,例如张三,定义张三的时候有”性别”这个属性,它的值就必须来源了之前定义的性别这个对象,要么是男是女,或者是人妖. 在Nagios里面定义了一些基本的对象,一般用到的有:
联系人 contact 出了问题像谁报告?一般当然是系统管理员了
监控时间段 timeperiod 7X24小时不间断还是周一至周五,或是自定义的其他时间段
被监控主机 host 所需要监控的服务器,当然可以是监控机自己
监控命令 command nagios发出的哪个指令来执行某个监控,这也是自己定义的
被监控的服务 service 例如主机是否存活,80端口是否开,磁盘使用情况或者自定义的服务等
另外,多个被监控主机可以定义为一个主机组,多个联系人可以被定义为一个联系人组,多个服务还能定义成一个服务组呢. 回到上面的例子,定义张三需要之前定义的性别,我们定义一个被监控的服务,当然就要指定被监控的主机,需要监控的时间段,要用哪个命令来完成这个监控操作,出了问题向哪个联系人报告. 所有这些对象绝对多数都是需要我们手动定义的,这就是nagios的安装显得复杂的地方.其实了解了原理,做一遍之后余下的工作就是复制粘贴了.下面就开始动手.   2)将示例配置文件复制为真实配置文件名 cd /usr/local/nagios/etc cp cgi.cfg-sample cgi.cfg cp commands.cfg-sample commands.cfg cp localhost.cfg-sample localhost.cfg cp nagios.cfg-sample nagios.cfg cp resource.cfg-sample resource.cfg   3)修改配置文件 修改nagios的主配置文件nagios.cfg vi nagios.cfg 注释行 #cfg_file=/usr/local/nagios/etc/localhost.cfg[2],然后把下面几行的注释去掉: 
cfg_file=/usr/local/nagios/etc/contactgroups.cfg  //联系组配置文件路径 cfg_file=/usr/local/nagios/etc/contacts.cfg       //联系人配置文件路径 cfg_file=/usr/local/nagios/etc/hostgroups.cfg     //主机组配置文件路径 cfg_file=/usr/local/nagios/etc/hosts.cfg          //主机配置文件路径 cfg_file=/usr/local/nagios/etc/services.cfg       //服务配置文件路径 cfg_file=/usr/local/nagios/etc/timeperiods.cfg    //监视时段配置文件路径
注释掉就说明不使用这个文件,去掉了注释就是需要使用这个文件. 改check_external_commands=0为check_external_commands=1 .这行的作用是允许在web界面下执行重启nagios、停止主机/服务检查等操作。 把command_check_interval的值从默认的1改成command_check_interval=10s(根据自己的情况定这个命令检查时间间隔,不要太长也不要太短)。 主配置文件要改的基本上就是这些,通过上面的修改,发现/usr/local/nagios/etc并没有文件hosts.cfg等一干文件,怎么办?稍后手动创建它们。   修改CGI脚本控制文件cgi.cfg vi cgi.cfg 第二个要修改的配置文件是cgi.cfg,它的作用是控制相关cgi脚本。先确保use_authentication=1。曾看过不少的文章,都是建议把use_authentication的值设置成”0”来取消验证,这是一个十分糟糕的想法。接下来修改default_user_name=test ,再后面的修改在下表列出:
 authorized_for_system_information=nagiosadmin,test authorized_for_configuration_information=nagiosadmin,test authorized_for_system_commands=test  //多个用户之间用逗号隔开 authorized_for_all_services=nagiosadmin,test authorized_for_all_hosts=nagiosadmin,test authorized_for_all_service_commands=nagiosadmin,test authorized_for_all_host_commands=nagiosadmin,test
那么上述用户名打那里来的呢?是执行命令 /usr/local/apache/bin/htpasswd –c /usr/local/nagios/etc/htpasswd test 所生成的,这个要注意,不能随便加没有存在的验证用户,为了安全起见,不要添加过多的验证用户。   定义监控时间段,创建配置文件timeperiods.cfg [root@localhost etc]# vi timeperiods.cfg
define timeperiod{         timeperiod_name         24x7   //时间段的名称,这个地方不要有空格         alias                   24 Hours A Day,7Days 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         }
定义了一个监控时间段,它的名称是24x7,监控的时间是每天全天24小时   定义联系人,创建配置文件contacts.cfg [root@localhost etc]# vi contacts.cfg
define contact{         contact_name                    test   //联系人的名称,这个地方不要有空格         alias                           sys admin         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                           yahoon@test.com         pager                           1338757xxxx         address1                        xxxxx.xyyy@icq.com         address2                        555-555-5555         }
创建了一个名为test的联系人,下面列出其中重要的几个选项做说明
service_notification_period     24x7 服务出了状况通知的时间段,这个时间段就是上面在timeperiods.cfg中定义的.
host_notification_period        24x7 主机出了状况通知的时间段, 这个时间段就是上面在timeperiods.cfg中定义的
service_notification_options    w,u,c,r 当服务出现w—报警(warning),u—未知(unkown),c—严重(critical),或者r—从异常情况恢复正常,在这四种情况下通知联系人.
host_notification_options       d,u,r 当主机出现d­­­­—当机(down),u—返回不可达(unreachable),r—从异常情况恢复正常,在这3种情况下通知联系人
service_notification_commands   notify-by-email 服务出问题通知采用的命令notify-by-email,这个命令是在commands.cfg中定义的,作用是给联系人发邮件.至于commands.cfg之后将专门介绍
host_notification_commands      host-notify-by-email 同上,主机出问题时采用的也是发邮件的方式通知联系人
email                           yahoon@test.com 很明显,联系的人email地址
pager                           1338757xxxx 联系人的手机,如果支持短信的通知的话,这个就很有用了.
alias是联系人别名,address是地址 意义不大.
按照上面的方式简单的复制修改就可以创建多个联系人了.   下面就可以将多个联系人组成一个联系人组,创建文件contactgroups.cfg [root@localhost etc]# vi contactgroups.cfg
define contactgroup{         contactgroup_name               sagroup    //联系人组的名称,同样不能空格         alias                   System Administrators        //别名         members                 test  //组的成员,来自于上面定义的contacts.cfg,如果有多个联系人则以逗号相隔         }
  定义被监控主机,创建文件hosts.cfg [root@localhost etc]# vi hosts.cfg
define host{         host_name                       nagios-server //被监控主机的名称,最好别带空格         alias                           nagios server         //别名         address                         192.168.0.111         //被监控主机的IP地址,我现在暂时先填本机的IP         check_command                   check-host-alive         //监控的命令check-host-alive,这个命令来自commands.cfg,用来监控主机是否存活         max_check_attempts              5         //检查失败后重试的次数         check_period                    24x7         //检查的时间段24x7,同样来自于我们之前在timeperiods.cfg中定义的 contact_groups                  sagroup         //联系人组,上面在contactgroups.cfg中定义的sagroup notification_interval           10         //提醒的间隔,每隔10秒提醒一次 notification_period             24x7         //提醒的周期, 24x7,同样来自于我们之前在timeperiods.cfg中定义的 notification_options            d,u,r //指定什么情况下提醒,具体含义见之前contacts.cfg部分的介绍         }
通过简单的复制修改就可以定义多个主机了.我们在这加上另外两台机器: 名为dbpi的linux主机,ip为192.168.0.111 名为yahoon的xp主机,ip为192.168.0.28   与联系人可以组成联系人组一样,多个主机也可以组成主机组.创建文件hostgrops.cfg [root@localhost etc]# vi hostgroups.cfg
define hostgroup{         hostgroup_name          sa-servers  //主机组名称         alias                   sa Servers  //别名         members                 nagios-server //组的成员主机,多个主机以逗号相隔,必须是上面hosts.cfg中定义的         }
  下面是最关键的了,用nagios主要是监控一台主机的各种信息,包括本机资源,对外的服务等等.这些在nagios里面都是被定义为一个个的项目(nagios称之为服务,为了与主机提供的服务相区别,我这里用项目这个词),而实现每个监控项目,则需要通过commands.cfg文件中定义的命令. 例如我们现在有一个监控项目是监控一台机器的web服务是否正常, 我们需要哪些元素呢?最重要的有下面三点:首先是监控哪台机,然后是这个监控要用什么命令实现,最后就是出了问题的时候要通知哪个联系人?   定义监控的项目,也叫服务,创建services.cfg [root@localhost etc]# vi services.cfg
#service definition define service{         host_name               nagios-server         //被监控的主机,hosts.cfg中定义的         service_description     check-host-alive         //这个监控项目的描述(也可以说是这个项目的名称),可以空格,我们这里定义的是监控这个主机是不是存活         check_command           check-host-alive         //所用的命令,是commands.cfg中定义的         max_check_attempts      5         normal_check_interval   3         retry_check_interval    2         check_period            24x7         //监控的时间段,是timeperiods.cfg中定义的         notification_interval   10         notification_period     24x7         //通知的时间段, ,是timeperiods.cfg中定义的         notification_options    w,u,c,r         //在监控的结果是wucr时通知联系人,具体含义看前文.         contact_groups          sagroup         //联系人组,是contactgroups.cfg中定义的         }
可以看到基本上所有的成员都是已经定义的.同样的将上面的内容复制修改,就可以加上另外两个监控项目:分别监控yahoon和dbpi是否存活 这样整个的配置过程就结束了.虽然功能很简单,但是已经为以后扩展打下了良好的基础.可以放心的告诉大家,以后的工作基本都是复制粘贴啦!!!   在运行nagios之前首先做测试 /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg 看到下面这些信息就说明没问题了
Total Warnings: 0 Total Errors:   0 Things look okay - No serious problems were detected during the pre-flight check
如果有问题的话就可以按照输出信息来排查   作为守护进程后台启动nagios /usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg #p#
三,使用插件来监控更多信息

所有的这些插件是一些实现特定功能的可执行程序,默认安装的路径是/usr/local/nagios/libexec,可以查看这些程序都是可以独立执行的,使用方法可以通过”命令名 –h”来查看 例如,我们查看check_disk这个插件的用法则可以使用check_disk –h,如下图    
[root@server1 libexec]# ./check_disk -h check_disk (nagios-plugins 1.4.9) 1.91 Copyright (c) 1999 Ethan Galstad Copyright (c) 1999-2006 Nagios Plugin Development Team         This plugin checks the amount of used disk space on a mounted file system and generates an alert if free space is less than one of the threshold values Usage: check_disk -w limit -c limit [-p path | -x device] [-t timeout][-m] [-e] [-W limit] [-K limit] [-v] [-q] [-E] Options: ……以下略
 

  输出的资料十分详细给出了这个插件的功能,使用方法,参数意义等,对于每一个插件都是这样.所以当你不懂某个插件怎么使用时就好好读读吧.

 

  从上面的输出可以看到check_disk这个插件是用来检查磁盘使用情况的.

 

  我现在来独立执行它,例如查看根分区的使用情况,执行

  root@server1 libexec]# ./check_disk -w 10% -c 5% /     命令的含义是检查分区/的使用情况,若剩余10%以下,为警告状态(warning),5%以下为严重状态(critical),     执行后我们会看到下面这条信息     DISK WARNING - free space: / 487 MB (6% inode=78%);| /=7449MB;7524;7942;0;8361   明当前是warning的状态,空闲空间只有6%了.如果nagios收到这些状态结果就会采取报警等措施了     或许在这里大家又迷糊了,我们在定义某个监控项目时,所用的监控命令都是来自commands.cfg的,这和这些插件有什么关系???想到了吧,commands.cfg中定义的监控命令就是使用的这些插件.举个例子,之前我们       已经不止一次用到了check-host-alive这个命令,打开commands.cfg就可以看到这个命令的定义,如下:    
################################################################################ # # SAMPLE HOST CHECK COMMANDS # ################################################################################ # This command checks to see if a host is "alive" by pinging it # The check must result in a 100% packet loss or 5 second (5000ms) round trip # average time to produce a critical error. # Note: Only one ICMP echo packet is sent (determined by the '-p 1' argument) # '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         }
command_name    check-host-alive     这句话的意思是定义的命令名是check-host-alive,也就是我们在services.cfg中使用的名称     执行的操作是   $USER1$/check_ping -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 1   其中$USER1$是在resource.cfg文件中定义的,代表插件的安装路径.就如我们上面看到的那样$USER1$=/usr/local/nagios/libexec,至于$HOSTADDRESS$,则默认被定义为监控主机的地址.   简单的说,我们在services.cfg中定义了对dbpi执行check-host-alive命令,实际上就是执行了   /usr/local/nagios/libexec/ check_ping -H dbpi的ip地址 -w 3000.0,80% -c 5000.0,100% -p 1   实际上check-host-alive只是这一长串命令的简称而已,而在services.cfg中都是使用简称的.     在commands.cfg中定义了很多这样的命令简称.基本上我们常用的监控项目都包含了,例如ftp,http,本地的磁盘,负载等等.   我们再看一个命令,check_local_disk定义如下
# 'check_local_disk' command definition define command{         command_name    check_local_disk         command_line    $USER1$/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$         }
  check_local_disk实际上是执行的check_disk插件.这里的$ARG1$, $ARG2$, $ARG3$是什么意思呢?在之前我们已经提到了这个check_disk这个插件的用法,-w的参数指定磁盘剩了多少是警告状态,-c的参数指定剩多少是严重状态,-p用来指定路径.   在使用check-host-alive的时候,只需要在services.cfg中直接写上这个命令名check-host-alive.后面没任何的参数.而使用check_local_disk则不同,在services.cfg中这要这么写   check_local_disk!10%!5%!/   在命令名后面用!分隔出了3个参数,10%是$ARG1$的值,5%是$ARG2$的值,/ 是$ARG3$的值,   我不知道讲的是否清楚,头晕的就在后面提问哈.简单的一句话就是  
services.cfg定义监控项目用某个命令 这个命令必须在commands.cfg中定义 定义这个命令时使用了libexec下的插件
  如果命令不带$ARG1$就可以在services.cfg中直接使用,如果带了使用时就带上参数,以!相隔     如果你理解了上面我说的”昏话”,下面的事情就简单的多了.我们要监控什么就修改相应的 命令就行了.   1).监控nagios-server的ftp   编辑services.cfg 增加下面的内容,基本上就是copy上节我们定义监控主机存活的代码.略做修改.  
define service{         host_name               nagios-server         要监控的机器,给出机器名,注意必须是hosts.cfg中定义的         service_description     check ftp         给这个监控项目起个名字吧,任意起,你自己懂就行         check_command           check_ftp         所用的命令,当然必须是commands.cfg中定义了的         max_check_attempts      5         normal_check_interval   3         retry_check_interval    2         check_period            24x7         notification_interval   10         notification_period     24x7         notification_options    w,u,c,r         contact_groups          sagroup         }
  2).监控dbpi的ssh  
define service{         host_name               dbpi         意义同上 service_description     check-ssh         意义同上 check_command           check_tcp!22         ssh所用的tcp的22号端口,我就用commands中定义的check_tcp命令.至于!22的意思不用我说了吧.         max_check_attempts      5         normal_check_interval   3         retry_check_interval    2         check_period            24x7         notification_interval   10         notification_period     24x7         notification_options    w,u,c,r         contact_groups          sagroup         }
  3).监控yahoon的IIS  
define service{         host_name               yahoon         service_description     check-http         check_command           check_http         max_check_attempts      5         normal_check_interval   3         retry_check_interval    2         check_period            24x7         notification_interval   10         notification_period     24x7         notification_options    w,u,c,r         contact_groups          sagroup         }
  4).监控nagios-sever的根分区的使用情况.  
define service{         host_name               nagios-server         service_description     check disk         check_command           check_local_disk!10%!5%!/         max_check_attempts      5         normal_check_interval   3         retry_check_interval    2         check_period            24x7         notification_interval   10         notification_period     24x7         notification_options    w,u,c,r         contact_groups          sagroup         }
  修改了配置文件,当然就要重新启动了,简单的方法杀掉nagios进程,然后重新启动  /usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...