2022年Nagios的安装部署 .pdf
Nagios的安装部署和与Cacti 的整合本文档基于CENTOS5.2系统和 Nagios 实现网管监控功能, 并与 Cacti实现整合。 Centos 初始安装后的一些系统基本设置工作本文档不做说明,请参考相关资料。文档版本: V1.0 最后修改: 2009-3-19 By NetKey系统环境: 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 库等。#yum install httpd#yum install gcc #yum install glibc glibc-common #yum install gd gd-devel #/usr/sbin/useradd -m nagios 添加一个名为nagios 的用户用以专门跑nagios#passwd nagios 设置密码#/usr/sbin/groupadd nagcmd 添加 nagcmd用户组,用以通过web页面提交外部控制命令#/usr/sbin/usermod -a -G nagcmd nagios 将 nagios 用户加入nagcmd组#/usr/sbin/usermod -a -G nagcmd apache 将 apache 用户加入nagcmd组2. 安装 nagios#mkdir /downloads #cd /downloads #wget http:/ #wget http:/ 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 15 页 - - - - - - - - - #cd /downloads #tar xzf nagios-3.0.6.tar.gz #cd nagios-3.0.6 #./configure -with-command-group=nagcmd #make all #make install #make install-init #make install-config #make install-commandmode 这时 nagios 基本已经安装完成,默认安装后的配置文件用于启动nagios 是没有问题的。#vi usr/local/nagios/etc/objects/contacts.cfg 修改 nagiosadmin这行其中的邮件地址为你的email 地址,以将报警邮件发到你的邮箱#make install-webconf 安装 nagios的 web 接口#htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin 设置登陆web 界面时 HTTP 验证的账号密码#service httpd restart 启动 apache3. 安装 nagios-pluginsnagios-plugins 是 nagios 官方提供的一套插件程序,nagios 监控主机的功能其实都是通过执行插件程序来实现的。#cd /downloads #tar xzf nagios-plugins-1.4.13.tar.gz #cd nagios-plugins-1.4.13 #./configure -with-nagios-user=nagios -with-nagios-group=nagios #make #make install安装插件,安装后所有插件命令将被安装到/usr/local/nagios/libexec 目录下4.安装 nagios-snmp-pluginsnagios-snmp-plugins 是一套用Perl 编写的通过SNMP 方式监控主机的插件程序。#cd /downloads #wget http:/ #tar xzf nagios-snmp-plugins.1.1.1.tgz #cd nagios_plugins 配置check_snmp_int.pl这些插件的使用时需要配置cpan,CPAN 是 Comprehensive Perl Archive Network 的缩写 .。它是一个巨大的Perl 软件收藏库,收集了大量有用的Perl 模块(modules)及其相关的文件。这里主要是使用Perl-Net-SNMP 模块。有两种方式安装:A)通过 CPAN 来安装名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 15 页 - - - - - - - - - #perl -MCPAN -e shell cpan install Net:SNMPB) 手工安装首先去官方网站www.cpan.org 下载以下几个模块Crypt:DES Digest:MD5 Digest:SHA1 Digest:HMAC Net:SNMP 下载后对于每个模块依次按照下面的方式安装#tar zxf .tar.gz 表示模块名,具体请按上面提到的模块替换#cd 表示模块名,具体请按上面提到的模块替换#perl Makefile.pl #make test #make install 注意: Net:SNMP 模块必须在最后安装。至此Net:SNMP 手动安装完毕#./install.sh 执行 nagios-snmp-plugins 安装脚本 ,执行之后会将插件命令安装到/usr/local/nagios/libexec下5.其他设置至此 nagios 基本已经安装完毕,但这时还不能马上启动nagios,需要以下设置。#chkconfig -add nagios将 nagios添加到服务中#chkconfig nagios on 设置服务为自启动#/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg检测 nagios的配置是否正确,在后面配置nagios过程中我们为了检测配置的是否正确需要不断执行该命令来检查配置文件。#service nagios start 启动 nagios需要注意的是, Centos 默认打开了selinux 并且运行于强制安全模式,这将导致在打开nagios的 web 界面时会出现Internet Server Error 的错误。#getenforce 查看是否运行于强制模式,结果为1 表示是#setenforce 0 更改 selinux 运行于宽容模式但是这个设置重启后就会失效,如需要重启后保持该设置需要修改/etc/sysconfig/selinux ,将其中的 SELINUX= enforcing更改为 SELINUX= permissive并重启系统。当然你也可以改成disable 禁用 selinux。也可以不更改selinux 的运行模式,解决办法为:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 15 页 - - - - - - - - - #chcon -R -t httpd_sys_content_t /usr/local/nagios/sbin/ #chcon -R -t httpd_sys_content_t /usr/local/nagios/share/ 6.实现 MSN 报警要实现 MSN 报警需要使用phpmsnclass,这是一个用php 实现的 msn 机器人程序。#cd /downloads #wget http:/ phpmsnclass ,此文件为7zip 压缩格式,需要安装7z #wget http:/ #tar jxvf p7zip_4.65_x86_linux_bin.tar.bz2 #cd p7zip_4.65 #./install.sh 安装 7z#cd - #7z e phpmsnclass_1.9.7z 解压文件phpmsnclass需要 php 支持,安装php,这里为了方便就直接完成LAMP 环境的安装#yum -y install mysql-server安装 mysql 数据库,后面安装cacti 需要由于安全原因请将mysql 设置为只监听在127.0.0.1 上,并删除mysql 库中默认的除了rootlocalhost 外的所有用户,相关设置请见以前的关于postfix 安装中的设置。#yum install -y php php-cli php-xcache php-mysql php-mbstring php-gd php-pgsql php-mcrypt php-mhash php-xml php-bcmath 安装 php 相关模块msn 报警有 2 种方式,一种是直接使用php 进行登陆验证发送消息,另外一个是以msn 机器人的形式发送,将消息存储在目录内。这里采用第二种。#cd phpmsnclass #mkdir /var/spool/msnbot #mkdir /var/spool/msnbot/log #mkdir /var/spool/msnbot/spool 下面把 msnbot.php, config.php 和 msn.class.php拷贝到 /var/spool/msnbot/ #cp msnbot.php config.php msn.class.php /var/spool/msnbot #chmod 777 /var/spool/msnbot/spool #chmod o+t /var/spool/msnbot/spool 这个机器人的工作原理是如果要发送消息,就调用php 生成消息文件到/var/spool/msnbot/spool 目录中,发送程序检查到该目录有新文件就会模拟msn 登陆和发信将信息发送出去。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 15 页 - - - - - - - - - #chmod +x /var/spool/msnbot/msnbot.php #vi config.php在配置文件中设置MSN 的账号和密码(以后报警通过这个MSN 发出)#cp msnbot.sh /etc/init.d/ #chmod +x msnbot.sh 加上执行权限#vi msnbot.sh 在启动函数里执行的php 文件前要加上php ( php 后有空格)#./msnbot.sh start 启动 MSN 机器人下面发个消息测试一下#php msnsendmsg.php this is a test2 向 的 MSN 账号发送测试信息注意需要将 和 config.php 里设置的MSN 账号相互加为好友如果成功接收到信息说明配置正确,此步骤到此结束,后面的能让Nagios 使用 MSN 进行报警的功能需要到Nagios 里设置了。如果需要支持离线消息即当你在离线状态下也能接收到机器人的信息,需要使用MSNP15 协议,修改相关发信的php 文件将声明新类的地方new MSN 的第一个参数改为MSNP15 第二部分nagios的配置nagios 目录结构比较清晰, 安装后下面一共有bin etc libexec sbin share var 几个目录,其中配置文件都存放在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 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 15 页 - - - - - - - - - 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 这个插件来完成。rootlocalhost etc# /usr/local/nagios/libexec/check_snmp_storage.pl -H 60.222.111.83 -C mypublic -2 -m Virtual Memory$ -w 70 -c 90 Virtual Memory: 21%used(531MB/2472MB) (70%) : OK 其中 -H 参数表示主机地址,-C 参数表示SNMP 团体名称, -2 表示使用SNMP v2 协议, -w为 warning( 警告 )状态的阈值, -c 表示为 critical (严重)状态的阈值要用 nagios 实现监控某主机,就是要实现用nagios 调用这样的命令即可。配置 resource.cfg,文件内容:rootlocalhost etc# cat resource.cfg |grep -v #| sed /$/d 查看 resource.cfg配置$USER1$=/usr/local/nagios/libexec $USER7$=-C mypublic -2这里其实是定义两个变量$USER1$和$USER7$,因为在后面定义command 的时候插件的路径是绝对路径,为了节省输入直接可以用$USER1$代替 /usr/local/nagios/libexec 。而SNMP插件的命令行中的参数需要设置SNMP 相关的信息,为节省输入这里用$USER7$来代替-C mypublic -2 。大家可对照上面检测60.222.111.83 的虚拟内存的例子结合来加以理解。下面我们来定义一个command 用以监控, 仍然以在nagios 中实现监控60.222.111.83 这台主机的虚拟内存为例说明。为了目录结构的清晰,我们将command 的定义都放到commands目录下。在commands 下建立一个cfg 后缀的文件,针对此示例的command 定义内容为define command command_name check_snmp_storage command_line $USER1$/check_snmp_storage.pl -H $HOSTADDRESS$ $USER7$ $ARG1$ -w $ARG2$ -c $ARG3$ 其 中 的 $USER1$ 和 $USER7$ 即 为 我 们 在 上 面 的resource.cfg中 定 义 的 两 个 变 量 ,$HOSTADDRESS$ 为我们在下面要定义的主机。在 hosts 目录下建立一个cfg 后缀的文件来存放主机配置。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 15 页 - - - - - - - - - define host use windows-server 定义使用的模板host_name web83定义主机名为web83alias web server on 111.83 主机别名address 60.222.111.83主机 IP 地址hostgroups linuxtoneweb 将该主机归到linuxtoneweb 这个组,如果要归到多个组里,用逗号分隔组名 在定义主机的时候我们将83 归到了 linuxtoneweb 这个组,下面来定义这个组名。可以直接在 hosts 下建立一个定义组名的cfg 文件。define hostgroup hostgroup_name linuxtoneweb alias linuxtone web servers 这样就定义了一个linuxtoneweb 组,将主机归为一个组有两种方法,一种是我们这种在主机的定义中去设置,另外一种是在组的设置中定义members。如下:define hostgroup hostgroup_name linuxtoneweb alias linuxtone web servers members web83设置该组的成员,需要是在host中定义的主机名,多个成员请用逗号分隔 在定义主机分组里面我们还可以用hostgroup_members 定义下级分组,十分方便。OK,上面我们完成了命令、主机的定义,下面我们就要进入nagios 监控某个对象的关键设置,nagios 的监控都是靠定义一个service 来实现, 这里我们定义一个service 来实现监控83的虚拟内存。在services目录下建立一个cfg 文件。define service hostgroup_name linuxtone,linuxtoneweb,database 定义监控对象name memory 设置服务名service_description check memory 服务描述check_period 24x7 监控周期设置max_check_attempts 4 最大检测尝试次数normal_check_interval 3 正常检测间隔时间retry_check_interval 2 重试检测间隔时间contact_groups admins 报警联系组notification_interval 10 通知间隔notification_period 24x7 通知周期设置名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 15 页 - - - - - - - - - notification_options w,u,c,r 定义什么状态时报警check_command check_snmp_storage!-m Virtual Memory$!70!90 这样我们完成对一个service 的定义,定义监控对象我们这里是定义了3 个组,即属于这3个组的所有主机都会检测虚拟内存(注意:组必须在其他文件中事先定义好)。当然你也可以用 host_name 针对主机作为检测对象(多主机用逗号分隔)。监控周期和报警周期我们设置的都是24x7,这个会在后面去定义。定义报警状态中的w 表示 warning ,u 表示 unknown,c 表示 critial , r 表示 recovery(即恢复后是否发送通知);报警选项一般生产环境下设置w,c,r即可。最后我们看到实现监控的主体部分check_command check_snmp_storage!-m Virtual Memory$!70!90 定义实现这个检测的命令,check_snmp_storage即为我们上面在commands 里定义的命令名,!表示带入的参数, 这里有三个! 表示带入三个参数到command 里,每个参数之间用!分隔,这里表示第一个参数为-m “ Virtual Memory$ ” ,第二个参数为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 H 60.222.111.83 C mypublic -2 m “ Virtual Memory$ ” w 70 c 90 而这个命令就是我们实现监控83 的虚拟内存的命令!设置 3 个参数是为了灵活的针对不同主机的调用,如果你对不同的主机设置的阈值不同,只需要对不同的主机定义不同的service 即可, command 是可以通用的!而这里的参数1也是为了实现不同的功能而设置的,这个脚本还可以检测物理内存,如果我们把参数1 的值设置为” Phisical Memory$ ” 就可以针对物理内存进行检测!定义command 的时候参数的个数的设定是你可以根据需要设置的。只需要在后面service 中能将参数值代到command 中最终能实现你要检测的命令即可。到此为止你可以感受到nagios 的灵活性了吧。到这里我们基本实现了nagios 的监控功能,下面我们继续来看看其他设置。在定义host 的时候我们有个主机模板的设置,这个设置的定义在object/template.cfg 中定义的,这是一个系统自带的配置文件,关于我们所使用的Windows-Server 的模板定义内容为:# Windows host definition template - This is NOT a real host, just a template! define host name windows-server ; The name of this host template use generic-host ; Inherit default values from the generic-host template 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 15 页 - - - - - - - - - check_period 24x7 ; By default, Windows servers are monitored round the clock check_interval 5 ; Actively check the server every 5 minutes retry_interval 1 ; Schedule host check retries at 1 minute intervals max_check_attempts 10 ; Check each server 10 times (max) check_command check-host-alive ; Default command to check if servers are alive notification_period 24x7 ; Send notification out at any time - day or night notification_interval 30 ; Resend notifications every 30 minutes notification_options d,r ; Only send notifications for specific host states contact_groups admins ; Notifications get sent to the admins by default hostgroups windows-servers ; Host groups that Windows servers should be a member of register 0 ; DONT REGISTER THIS - ITS JUST A TEMPLATE objects 目录下的 contact.cfg 中定义的是报警联系人。define contact contact_name nagiosadmin ; Short name of user use generic-contact ; Inherit default values from generic-contact template (defined above) alias Nagios Admin ; Full name of user email ; create database cacti; 创建一个数据库供cacti 使用mysqluse cacti; Mysqlsource /usr/local/cacti/cacti.sql 导入 mysql 数据库Mysqlgrant all privileges on cacti.* to cactilocalhost identified by cactipass ; 添加一个数据库账号cacti 密码为 cactipass 用以访问 cacti 库Mysqlflush privileges; 刷新权限信息Apache 设置#vi /etc/http/conf.d/cacti.conf 编辑 cacti 站点的配置文件,文件内容如下:Alias /cacti /usr/local/wwwroot/cacti Options FollowSymLinks MultiViews AllowOverride None Order allow,deny Allow from all 修改 cacti 的配置文件#vi /usr/local/wwwroot/cacti/include/config.php 修改其中的数据库连接信息,设置好数据库主机地址,用户,密码信息。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 15 页 - - - - - - - - - 至此安装完成, 访问 http:/ip/cacti/install 根据提示安装cacti (ip 换成你对应的主机ip 地址)接下来安装cacti 的插件管理#cd /download/ #wget http:/mirror.cactiusers.org/downloads/plugins/cacti-plugin-0.8.7d-PA-v2.4.zip #unzip cacti-plugin-0.8.7d-PA-v2.4.zip #mysql u root p cactipa.sql 导入 sql 到 cacti 库中#cd cd files-0.8.7d/ #cp rf * /usr/local/wwwroot/cacti 复制相关文件到cacti下第四部分整合cacti和 nagios 整合 cacti 和 nagios 是利用了cacti 的一个插件nagios for cacti ,它的原理是将nagios 的数据通过 ndo2db 导入到 mysql 数据库( cacti 的库中),然后 cacti 读取数据库信息将nagios 的结果展示出来。1.安装 ndoutils首先需要安装ndoutils 以将 nagios 的数据能导入到mysql 数据库中。#yum -y install mysql-devel安装 mysql 开发包以编译ndoutils#wget http:/ #tar zxvf ndoutils-1.4b7.tar.gz #cd ndoutils #./configure -enable-mysql -disable-pgsql -with-mysql-lib=/usr/lib/mysql #make #cp config/ndomod.cfg /usr/local/nagios/etc 修改 nagios 主配置文件#vi /usr/local/nagios/etc/nagios.cfg 添加以下内容check_external_commands=1 command_check_interval=-1 event_broker_options=-1 broker_module=/usr/local/nagios/bin/ndomod.o config_file=/usr/local/nagios/etc/ndomod.cfg process_performance_data=1 添加的内容至此结束#cd src #cp ndomod-3x.o nod2db-3x log2ndo file2sock /usr/local/nagios/bin #cp src/ndo2db-3x /usr/local/nagios/bin/ndo2db #cp config/ndo2db.cfg /usr/local/nagios/etc 修改配置文件ndocmd.cfg 和 ndo2db.cfg,这里我的配置文件内容为:rootlocalhost downloads# cat /usr/local/nagios/etc/ndomod.cfg |grep -v #|sed /$/d名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 15 页 - - - - - - - - - instance_name=default output_type=tcpsocket output=127.0.0.1 tcp_port=5668 output_buffer_items=5000 buffer_file=/usr/local/nagios/var/ndomod.tmp file_rotation_interval=14400 file_rotation_timeout=60 reconnect_interval=15 reconnect_warning_interval=15 data_processing_options=-1 config_output_options=2 rootlocalhost downloads# cat /usr/local/nagios/etc/ndo2db.cfg |grep -v #|sed /$/d ndo2db_user=nagios ndo2db_group=nagios socket_type=tcp socket_name=/usr/local/nagios/var/ndo.sock tcp_port=5668 db_servertype=mysql db_host=127.0.0.1 db_port=3306 db_name=cacti db_prefix=npc_ db_user=cacti db_pass=cacti2008 max_timedevents_age=1440 max_systemcommands_age=10080 max_servicechecks_age=10080 max_hostchecks_age=10080 max_eventhandlers_age=44640 debug_level=1 debug_verbosity=1 debug_file=/usr/local/nagios/var/ndo2db.debug max_debug_file_size=1000000 #/usr/local/nagios/bin/ndo2db -c /usr/local/nagios/etc/ndo2db.cfg 启动 ndo2db2.安装 php-jsonnpc 展示部分用到json,需要在php 中安装 php-json 的支持, centos 5 下的 php 版本默认是5.1.6 不带 json 支持,无法简单地通过yum install php5-json 方式来安装。#cd /downloads #wget http:/ #tar xvjf php-json-ext-1.2.0.tar.bz2 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 15 页 - - - - - - - - - #cd php-json-ext-1.2.0 #phpize 编译前初始化php 环境#./configure #make #make install #vi /etc/php.d/json.iniextension=p