Nagios的安装部署和与Cacti的整合.docx
《Nagios的安装部署和与Cacti的整合.docx》由会员分享,可在线阅读,更多相关《Nagios的安装部署和与Cacti的整合.docx(23页珍藏版)》请在冰点文库上搜索。
Nagios的安装部署和与Cacti的整合
Nagios的安装部署和与Cacti的整合
本文档基于CENTOS5.2系统和Nagios实现网管监控功能,并与Cacti实现整合。
Centos初始安装后的一些系统基本设置工作本文档不做说明,请参考相关资料。
文档版本:
V1.0
最后修改:
2009-3-19ByNetKey
系统环境:
CentOS5.2
格式约定:
黑色粗体:
为输入命令部分
红色粗体:
为需要按你的环境修改的部分
绿色粗体:
系统返回的提示信息
蓝色粗体:
文档注释部分
Nagios是一款开源的免费网络监视工具,其功能强大,灵活性强。
能有效监控Windows、Linux和Unix的主机状态,交换机路由器等网络设置,打印机等。
本文档主要实现nagios监控windows主机,nagios监控windows系统有三种实现方式:
SNMP、NSClient++、NRPE,后面两种方式都需要在windows上安装agent,因目前服务器上都开启了SNMP,所以本文档只介绍使用SNMP方式来监控Windows。
第一部分:
Nagios的安装
1.安装基础支持套件和添加用户
nagios需要一些基础支持套件才能运行,如apache,gcc,glibc,gd库等。
#yuminstallhttpd
#yuminstallgcc
#yuminstallglibcglibc-common
#yuminstallgdgd-devel
#/usr/sbin/useradd-mnagios添加一个名为nagios的用户用以专门跑nagios
#passwdnagios设置密码
#/usr/sbin/groupaddnagcmd添加nagcmd用户组,用以通过web页面提交外部控制命令
#/usr/sbin/usermod-a-Gnagcmdnagios将nagios用户加入nagcmd组
#/usr/sbin/usermod-a-Gnagcmdapache将apache用户加入nagcmd组
2.安装nagios
#mkdir~/downloads
#cd~/downloads
#wget
#wget
#cd~/downloads
#tarxzfnagios-3.0.6.tar.gz
#cdnagios-3.0.6
#./configure--with-command-group=nagcmd
#makeall
#makeinstall
#makeinstall-init
#makeinstall-config
#makeinstall-commandmode
这时nagios基本已经安装完成,默认安装后的配置文件用于启动nagios是没有问题的。
#viusr/local/nagios/etc/objects/contacts.cfg
修改nagiosadmin这行其中的邮件地址为你的email地址,以将报警邮件发到你的邮箱
#makeinstall-webconf安装nagios的web接口
#htpasswd-c/usr/local/nagios/etc/htpasswd.usersnagiosadmin
设置登陆web界面时HTTP验证的账号密码
#servicehttpdrestart启动apache
3.安装nagios-plugins
nagios-plugins是nagios官方提供的一套插件程序,nagios监控主机的功能其实都是通过执行插件程序来实现的。
#cd~/downloads
#tarxzfnagios-plugins-1.4.13.tar.gz
#cdnagios-plugins-1.4.13
#./configure--with-nagios-user=nagios--with-nagios-group=nagios
#make
#makeinstall
安装插件,安装后所有插件命令将被安装到/usr/local/nagios/libexec目录下
4.安装nagios-snmp-plugins
nagios-snmp-plugins是一套用Perl编写的通过SNMP方式监控主机的插件程序。
#cd~/downloads
#wget
#tarxzfnagios-snmp-plugins.1.1.1.tgz
#cdnagios_plugins
配置check_snmp_int.pl这些插件的使用时需要配置cpan,CPAN是ComprehensivePerlArchiveNetwork的缩写.。
它是一个巨大的Perl软件收藏库,收集了大量有用的Perl模块(modules)及其相关的文件。
这里主要是使用Perl-Net-SNMP模块。
有两种方式安装:
A)通过CPAN来安装
#perl-MCPAN-eshell
cpan>installNet:
:
SNMP
B)手工安装
首先去官方网站www.cpan.org下载以下几个模块
Crypt:
:
DES
Digest:
:
MD5
Digest:
:
SHA1
Digest:
:
HMAC
Net:
:
SNMP
下载后对于每个模块依次按照下面的方式安装
#tarzxf.tar.gz表示模块名,具体请按上面提到的模块替换
#cd表示模块名,具体请按上面提到的模块替换
#perlMakefile.pl
#maketest
#makeinstall
注意:
Net:
:
SNMP模块必须在最后安装。
至此Net:
:
SNMP手动安装完毕
#./install.sh
执行nagios-snmp-plugins安装脚本,执行之后会将插件命令安装到/usr/local/nagios/libexec下
5.其他设置
至此nagios基本已经安装完毕,但这时还不能马上启动nagios,需要以下设置。
#chkconfig--addnagios将nagios添加到服务中
#chkconfignagioson设置服务为自启动
#/usr/local/nagios/bin/nagios-v/usr/local/nagios/etc/nagios.cfg
检测nagios的配置是否正确,在后面配置nagios过程中我们为了检测配置的是否正确需要不断执行该命令来检查配置文件。
#servicenagiosstart启动nagios
需要注意的是,Centos默认打开了selinux并且运行于强制安全模式,这将导致在打开nagios的web界面时会出现InternetServerError的错误。
#getenforce查看是否运行于强制模式,结果为1表示是
#setenforce0更改selinux运行于宽容模式
但是这个设置重启后就会失效,如需要重启后保持该设置需要修改/etc/sysconfig/selinux,将其中的SELINUX=enforcing更改为SELINUX=permissive并重启系统。
当然你也可以改成disable禁用selinux。
也可以不更改selinux的运行模式,解决办法为:
#chcon-R-thttpd_sys_content_t/usr/local/nagios/sbin/
#chcon-R-thttpd_sys_content_t/usr/local/nagios/share/
6.实现MSN报警
要实现MSN报警需要使用phpmsnclass,这是一个用php实现的msn机器人程序。
#cd~/downloads
#wget
下载phpmsnclass,此文件为7zip压缩格式,需要安装7z
#wget
#tarjxvfp7zip_4.65_x86_linux_bin.tar.bz2
#cdp7zip_4.65
#./install.sh安装7z
#cd-
#7zephpmsnclass_1.9.7z解压文件
phpmsnclass需要php支持,安装php,这里为了方便就直接完成LAMP环境的安装
#yum-yinstallmysql-server安装mysql数据库,后面安装cacti需要
由于安全原因请将mysql设置为只监听在127.0.0.1上,并删除mysql库中默认的除了root@localhost外的所有用户,相关设置请见以前的关于postfix安装中的设置。
#yuminstall-yphpphp-cliphp-xcachephp-mysqlphp-mbstringphp-gdphp-pgsqlphp-mcryptphp-mhashphp-xmlphp-bcmath安装php相关模块
msn报警有2种方式,一种是直接使用php进行登陆验证发送消息,另外一个是以msn机器人的形式发送,将消息存储在目录内。
这里采用第二种。
#cdphpmsnclass
#mkdir/var/spool/msnbot
#mkdir/var/spool/msnbot/log
#mkdir/var/spool/msnbot/spool
下面把msnbot.php,config.php和msn.class.php拷贝到/var/spool/msnbot/
#cpmsnbot.phpconfig.phpmsn.class.php/var/spool/msnbot
#chmod777/var/spool/msnbot/spool
#chmodo+t/var/spool/msnbot/spool
这个机器人的工作原理是如果要发送消息,就调用php生成消息文件到
/var/spool/msnbot/spool目录中,发送程序检查到该目录有新文件就会模拟msn登陆和发信将信息发送出去。
#chmod+x/var/spool/msnbot/msnbot.php
#viconfig.php
在配置文件中设置MSN的账号和密码(以后报警通过这个MSN发出)
#cpmsnbot.sh/etc/init.d/
#chmod+xmsnbot.sh加上执行权限
#vimsnbot.sh
在启动函数里执行的php文件前要加上php(php后有空格)
#./msnbot.shstart启动MSN机器人
下面发个消息测试一下
#phpmsnsendmsg.phpnetkey530@"thisisatest2"
向netkey530@的MSN账号发送测试信息
注意需要将netkey530@和config.php里设置的MSN账号相互加为好友
如果成功接收到信息说明配置正确,此步骤到此结束,后面的能让Nagios使用MSN进行报警的功能需要到Nagios里设置了。
如果需要支持离线消息即当你在离线状态下也能接收到机器人的信息,需要使用MSNP15协议,修改相关发信的php文件将声明新类的地方newMSN的第一个参数改为MSNP15
第二部分nagios的配置
nagios目录结构比较清晰,安装后下面一共有binetclibexecsbinsharevar几个目录,其中配置文件都存放在etc目录下,bin下存放的是nagios的相关命令,sbin下存放的是通过web方式外部执行的cgi,libexec存放的是所有插件,而var则存放的是log和pid文件等。
而实现监控都是依靠执行插件来实现的。
要实现监控,需要在nagios中定义一个service,在这个service中指定监控对象和监控命令以及报警机制等。
Nagios的配置关系可以按照下图来做说明:
nagios的配置也比较清晰明了,etc目录下默认有objects目录和一些配置文件,其中objects里放的是主配置文件nagios.cfg包含进去的配置文件。
在nagios.cfg中既可以指定单独包含一个cfg,也可以指定一个包含目录,即该目录下所有的cfg文件都会包含进来。
首先我们配置下主配置文件,为了目录的清晰我们自己建立一些目录来存放相关的配置文件,比如建立commands目录存放命令,建立services目录存放服务,建立hosts目录存放主机,在nagios.cfg文件中找到cfg_file的部分,下面是一个示例,实际部署的时候可以按照你自己的情况去设置:
cfg_file=/usr/local/nagios/etc/objects/commands.cfg包含配置文件,下同
cfg_file=/usr/local/nagios/etc/objects/contacts.cfg
cfg_file=/usr/local/nagios/etc/objects/timeperiods.cfg
cfg_file=/usr/local/nagios/etc/objects/templates.cfg
cfg_file=/usr/local/nagios/etc/objects/localhost.cfg
cfg_file=/usr/local/nagios/etc/objects/switch.cfg
cfg_dir=/usr/local/nagios/etc/services包含配置目录,目录下所有cfg文件将被包含;下同
cfg_dir=/usr/local/nagios/etc/hosts
cfg_dir=/usr/local/nagios/etc/commands
cfg_dir=/usr/local/nagios/etc/switches
cfg_dir=/usr/local/nagios/etc/routers
nagios.cfg其他地方可以暂不调整,该文件中具体参数请参考附件中的配置文件中文注释
这里先说明一下,监控都是依靠插件去完成的,举个例子说明,如我们要监控60.222.111.83这台服务器的虚拟内存,当达到70%的时候状态为警告,达到90%的时候为严重。
这个依靠check_snmp_storage.pl这个插件来完成。
[root@localhostetc]#/usr/local/nagios/libexec/check_snmp_storage.pl-H60.222.111.83-Cmypublic-2-m"^VirtualMemory$"-w70-c90
VirtualMemory:
21%used(531MB/2472MB)(<70%):
OK
其中-H参数表示主机地址,-C参数表示SNMP团体名称,-2表示使用SNMPv2协议,-w为warning(警告)状态的阈值,-c表示为critical(严重)状态的阈值
要用nagios实现监控某主机,就是要实现用nagios调用这样的命令即可。
配置resource.cfg,文件内容:
[root@localhostetc]#catresource.cfg|grep-v'#'|sed/^$/d查看resource.cfg配置
$USER1$=/usr/local/nagios/libexec
$USER7$=-Cmypublic-2
这里其实是定义两个变量$USER1$和$USER7$,因为在后面定义command的时候插件的路径是绝对路径,为了节省输入直接可以用$USER1$代替/usr/local/nagios/libexec。
而SNMP插件的命令行中的参数需要设置SNMP相关的信息,为节省输入这里用$USER7$来代替
-Cmypublic-2。
大家可对照上面检测60.222.111.83的虚拟内存的例子结合来加以理解。
下面我们来定义一个command用以监控,仍然以在nagios中实现监控60.222.111.83这台主机的虚拟内存为例说明。
为了目录结构的清晰,我们将command的定义都放到commands目录下。
在commands下建立一个cfg后缀的文件,针对此示例的command定义内容为
definecommand{
command_namecheck_snmp_storage
command_line$USER1$/check_snmp_storage.pl-H$HOSTADDRESS$$USER7$$ARG1$-w$ARG2$-c$ARG3$
}
其中的$USER1$和$USER7$即为我们在上面的resource.cfg中定义的两个变量,$HOSTADDRESS$为我们在下面要定义的主机。
在hosts目录下建立一个cfg后缀的文件来存放主机配置。
definehost{
usewindows-server定义使用的模板
host_nameweb83定义主机名为web83
aliaswebserveron111.83主机别名
address60.222.111.83主机IP地址
hostgroupslinuxtoneweb将该主机归到linuxtoneweb这个组,如果要归到多个组里,用逗号分隔组名
}
在定义主机的时候我们将83归到了linuxtoneweb这个组,下面来定义这个组名。
可以直接在hosts下建立一个定义组名的cfg文件。
definehostgroup{
hostgroup_namelinuxtoneweb
aliaslinuxtonewebservers
}
这样就定义了一个linuxtoneweb组,将主机归为一个组有两种方法,一种是我们这种在主机的定义中去设置,另外一种是在组的设置中定义members。
如下:
definehostgroup{
hostgroup_namelinuxtoneweb
aliaslinuxtonewebservers
membersweb83设置该组的成员,需要是在host中定义的主机名,多个成员请用逗号分隔
}
在定义主机分组里面我们还可以用hostgroup_members定义下级分组,十分方便。
OK,上面我们完成了命令、主机的定义,下面我们就要进入nagios监控某个对象的关键设置,nagios的监控都是靠定义一个service来实现,这里我们定义一个service来实现监控83的虚拟内存。
在services目录下建立一个cfg文件。
defineservice{
hostgroup_namelinuxtone,linuxtoneweb,database定义监控对象
namememory设置服务名
service_descriptioncheckmemory服务描述
check_period24x7监控周期设置
max_check_attempts4最大检测尝试次数
normal_check_interval3正常检测间隔时间
retry_check_interval2重试检测间隔时间
contact_groupsadmins报警联系组
notification_interval10通知间隔
notification_period24x7通知周期设置
notification_optionsw,u,c,r定义什么状态时报警
check_commandcheck_snmp_storage!
-m"^VirtualMemory$"!
70!
90
}
这样我们完成对一个service的定义,定义监控对象我们这里是定义了3个组,即属于这3个组的所有主机都会检测虚拟内存(注意:
组必须在其他文件中事先定义好)。
当然你也可以用host_name针对主机作为检测对象(多主机用逗号分隔)。
监控周期和报警周期我们设置的都是24x7,这个会在后面去定义。
定义报警状态中的w表示warning,u表示unknown,c表示critial,r表示recovery(即恢复后是否发送通知);报警选项一般生产环境下设置w,c,r即可。
最后我们看到实现监控的主体部分
check_commandcheck_snmp_storage!
-m"^VirtualMemory$"!
70!
90
定义实现这个检测的命令,check_snmp_storage即为我们上面在commands里定义的命令名,
!
表示带入的参数,这里有三个!
表示带入三个参数到command里,每个参数之间用!
分隔,这里表示第一个参数为-m“^VirtualMemory$”,第二个参数为70,第三个参数为90。
下面我们回头去看看check_snmp_storage这个command的定义:
command_line$USER1$/check_snmp_storage.pl-H$HOSTADDRESS$$USER7$$ARG1$-w$ARG2$-c$ARG3$
这里的$ARG1$即表示参数1,$ARG2即表示参数2,$ARG3$即表示参数3
而$HOSTADDRESS$是我们定义的检测对象,它的值就是我们的主机IP地址;$USER1$和$USER7$为在resource.cfg里的定义。
下面我们将参数值代入这个command里,最后实现的效果是:
/usr/local/nagios/libexec/check_snmp_storage.pl–H60.222.111.83–Cmypublic-2–m“^VirtualMemory$”–w70–c90
而这个命令就是我们实现监控83的虚拟内存的命令!
设置3个参数是为了灵活的针对不同主机的调用,如果你对不同的主机设置的阈值不同,只需要对不同的主机定义不同的service即可,command是可以通用的!
而这里的参数1也是为了实现不同的功能而设置的,这个脚本还可以检测物理内存,如果我们把参数1的值设置为”^PhisicalMemory$”就可以针对物理内存进行检测!
定义command的时候参数的个数的设定是你可以根据需要设置的。
只需要在后面service中能将参数值代到command中最终能实现你要检测的命令即可。
到此为止你可以感受到nagios的灵活性了吧。
到这里我们基本实现了nagios的监控功能,下面我们继