请输入您要查询的百科知识:

 

词条 NAGIOS
释义

Nagios是一款开源的免费网络监视工具,能有效监控Windows、Linux和Unix的主机状态,交换机路由器等网络设置,打印机等。在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知。

功能介绍

Nagios 可以监控的功能有:

1、监控网络服务(SMTP、POP3、HTTP、NNTP、PING等); 2、监控主机资源(处理器负荷、磁盘利用率等);

3、简单地插件设计使得用户可以方便地扩展自己服务的检测方法;

4、并行服务检查机制;

5、具备定义网络分层结构的能力,用"parent"主机定义来表达网络主机间的关系,这种关系可被用来发现和明晰主机宕机或不可达状态;

6、当服务或主机问题产生与解决时将告警发送给联系人(通过EMail、短信、用户定义方式);

7、可以定义一些处理程序,使之能够在服务或者主机发生故障时起到预防作用;

8、自动的日志滚动功能;

9、可以支持并实现对主机的冗余监控;

10、可选的WEB界面用于查看当前的网络状态、通知和故障历史、日志文件等;

系统需求

Nagios所需要的运行条件是机器必须可以运行Linux(或是Unix变种)并且有C语言编译器。你必须正确地配置TCP/IP协议栈以使大多数的服务检测可以通过网络得以进行。你需要但并非必须正确地配置Nagios里的CGIs程序,而一旦你要使用CGI程序时,你必须要安装以下这些软件...一个WEB服务(最好是Apache)

系统安装

1.安装基础支持套件和添加用户

nagios需要一些基础支持套件才能运行,如apache,gcc,glibc,gd库等。

添加一个名为nagios的用户用以专门跑nagios

设置密码

添加nagcmd用户组,用以通过web页面提交外部控制命令

将nagios用户加入nagcmd组

将apache用户加入nagcmd组

2.安装nagios

这时nagios基本已经安装完成,默认安装后的配置文件用于启动nagios是没有问题的。

修改nagiosadmin这行其中的邮件地址为你的email地址,以将报警邮件发到你的邮箱

安装nagios的web接口

设置登陆web界面时HTTP验证的账号密码

3. 安装nagios-plugins

nagios-plugins是nagios官方提供的一套插件程序,nagios监控主机的功能其实都是通过执行插件程序来实现的。

4.安装nagios-snmp-plugins

nagios-snmp-plugins是一套用Perl编写的通过SNMP方式监控主机的插件程序。

配置这些插件的使用时需要配置cpan,CPAN是Comprehensive Perl Archive Network的缩写.。它是一个巨大的Perl软件收藏库,收集了大量有用的Perl模块(modules)及其相关的文件。这里主要是使用Perl-Net-SNMP模块。有两种方式安装:

A)通过CPAN来安装

B) 手工安装

首先去官方网站下载以下几个模块

Crypt::DES

Digest::MD5

Digest::SHA1

Digest::HMAC

Net::SNMP

下载后对于每个模块依次按照下面的方式安装

表示模块名,具体请按上面提到的模块替换

表示模块名,具体请按上面提到的模块替换

注意:Net::SNMP模块必须在最后安装。至此Net::SNMP手动安装完毕

执行nagios-snmp-plugins安装脚本,执行之后会将插件命令安装到/usr/local/nagios/libexec下

5.其他设置

至此nagios基本已经安装完毕,但这时还不能马上启动nagios,需要以下设置。

将nagios添加到服务中

设置服务为自启动

检测nagios的配置是否正确,在后面配置nagios过程中我们为了检测配置的是否正确需要不断执行该命令来检查配置文件。

#service nagios start 启动nagios

需要注意的是,Centos默认打开了selinux并且运行于强制安全模式,这将导致在打开nagios的web界面时会出现Internet Server Error的错误。

查看是否运行于强制模式,结果为1表示是

更改selinux运行于宽容模式

但是这个设置重启后就会失效,如需要重启后保持该设置需要修改/etc/sysconfig/selinux,将其中的SELINUX= enforcing更改为SELINUX= permissive并重启系统。当然你也可以改成disable禁用selinux。

也可以不更改selinux的运行模式,解决办法为:

6.实现MSN报警

要实现MSN报警需要使用phpmsnclass,这是一个用php实现的msn机器人程序。

下载phpmsnclass,此文件为7zip压缩格式,需要安装7z

phpmsnclass需要php支持,安装php,这里为了方便就直接完成LAMP环境的安装

安装mysql数据库,后面安装cacti需要

由于安全原因请将mysql设置为只监听在127.0.0.1上,并删除mysql库中默认的除了外的所有用户,相关设置请见以前的关于postfix安装中的设置。

安装php相关模块

msn报警有2种方式,一种是直接使用php进行登陆验证发送消息,另外一个是以msn机器人的形式发送,将消息存储在目录内。这里采用第二种。

下面把msnbot.php, config.php和msn.class.php拷贝到/var/spool/msnbot/

这个机器人的工作原理是如果要发送消息,就调用php生成消息文件到

/var/spool/msnbot/spool目录中,发送程序检查到该目录有新文件就会模拟msn登陆和发信将信息发送出去。

在配置文件中设置MSN的账号和密码(以后报警通过这个MSN发出)

加上执行权限

在启动函数里执行的php文件前要加上php (php后有空格)

启动MSN机器人

下面发个消息测试一下

如果成功接收到信息说明配置正确,此步骤到此结束,后面的能让Nagios使用MSN进行报警的功能需要到Nagios里设置了。

如果需要支持离线消息即当你在离线状态下也能接收到机器人的信息,需要使用MSNP15协议,修改相关发信的php文件将声明新类的地方new MSN的第一个参数改为MSNP15

系统配置

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

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%的时候为严重。这个依靠这个插件来完成。

-

其中-H参数表示主机地址,-C参数表示SNMP团体名称,-2表示使用SNMP v2协议,-w为warning(警告)状态的阈值,-c表示为critical(严重)状态的阈值

要用nagios实现监控某主机,就是要实现用nagios调用这样的命令即可。

配置resource.cfg,文件内容:

[root@localhost 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后缀的文件

其中的$USER1$和$USER7$即为我们在上面的resource.cfg中定义的两个变量,$HOSTADDRESS$为我们在下面要定义的主机。

在hosts目录下建立一个cfg后缀的文件来存放主机配置。

define host{

use windows-server //定义使用的模板

host_name web83 //定义主机名为web83

alias 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 //通知周期设置

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。

这里的$ARG1$即表示参数1,$ARG2即表示参数2,$ARG3$即表示参数3

而$HOSTADDRESS$是我们定义的检测对象,它的值就是我们的主机IP地址;$USER1$和$USER7$为在resource.cfg里的定义。

而这个命令就是我们实现监控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

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 <<***** CHANGE THIS TO YOUR EMAIL ADDRESS ******

address1 ;这里是个自定义的变量设置,定义了一个MSN地址用以接收MSN报警信息,联系人的自定义变量只能使用address1-address6;通过这个设置你可以实现多种报警方式,如电话,手机短信等,通过在这里设置你的电话,手机号,然后到报警命令定义里定义一个命令即可。

}

其使用了generic-contact这个联系模板,关于这个模板templates.cfg里的定义内容为:

define contact{

name generic-contact ; The name of this contact template

service_notification_period 24x7 ; service notifications can be sent anytime

host_notification_period 24x7 ; host notifications can be sent anytime

service_notification_options w,u,c,r,f,s ; send notifications for all service states, flapping events, and scheduled downtime events

host_notification_options d,u,r,f,s ; send notifications for all host states, flapping events, and scheduled downtime events

service_notification_commands notify-service-by-email,notify-service-by-msn ; send service notifications via email

host_notification_commands notify-host-by-email,notify-host-by-msn ; send host notifications via email

register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL CONTACT, JUST A TEMPLATE!

}

上面我在该配置文件中增加了notify-service-by-msn和notify-service-by-msn的两种报警命令

而关于报警的周期设置在objects下的timeperiods.cfg中,如我们上面在service里定义的7x24的报警周期设置内容为:

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

}

通过这里我们可以灵活设置报警时间以和报警方式结合,如周末和休息时间设置报警为发送短信和邮件,工作时间设置为发送邮件和MSN报警方式。

下面我们来看关于报警命令的设置,在objects下的command.cfg里定义的为

define command{

command_name notify-host-by-email

command_line /usr/bin/printf "%b" "***** Nagios *****\\Notification Type: $NOTIFICATIONTYPE$\Host: $HOSTNAME$\State: $HOSTSTATE$\Address: $HOSTADDRESS$\Info: $HOSTOUTPUT$\\Date/Time: $LONGDATETIME$\" | /bin/mail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$

}

# 'notify-service-by-email' command definition

define command{

command_name notify-service-by-email

command_line /usr/bin/printf "%b" "***** Nagios *****\\Notification Type: $NOTIFICATIONTYPE$\\Service: $SERVICEDESC$\Host: $HOSTALIAS$\Address: $HOSTADDRESS$\State: $SERVICESTATE$\\Date/Time: $LONGDATETIME$\\Additional Info:\\$SERVICEOUTPUT$" | /bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$

}

# 'notify-host-by-msn' command definition

define command{

command_name notify-host-by-msn

command_line php /usr/local/nagios/share/msn/msnsendmsg.php $CONTACTADDRESS1$ "***** Nagios *****\\Notification Type: $NOTIFICATIONTYPE$\Host: $HOSTNAME$\State: $HOSTSTATE$\Address: $HOSTADDRESS$\Info: $HOSTOUTPUT$\\Date/Time: $LONGDATETIME$\"

}

# 'notify-service-by-msn' command definition

define command{

command_name notify-service-by-msn

command_line php /usr/local/nagios/share/msn/msnsendmsg.php $CONTACTADDRESS1$ "***** Nagios *****\\Notification Type: $NOTIFICATIONTYPE$\\Service: $SERVICEDESC$\Host: $HOSTALIAS$\Address: $HOSTADDRESS$\State: $SERVICESTATE$\\Date/Time: $LONGDATETIME$\\Additional Info:\\$SERVICEOUTPUT$"

}

定义了4种报警命令,后面两种msn报警是我添加的;邮件报警是使用系统自带的sendmail来发送邮件的(注意要启动sendmail服务),而msn报警是使用我们上面所配置的msn机器人发送的报警信息。

至此,整个nagios的监控和报警机制了解完毕。注意我们在配置过程中的任何改动都记得要去通过/usr/local/nagios/bin/nagios –c /usr/local/nagios/etc/nagios.cfg以检查配置文件是否正确,如果正确则可以重启nagios加载新配置(service nagios restart)

第三部分 安装cacti

Cacti的运行需要AMP(Apache + MySQL + PHP), RRDTool , net-snmp , AMP环境我们在上面已经配置。

安装rrdtool,rrdtool不能直接通过yum安装,可以加入Dag RPM Repository以便让yum能找到rrdtool

安装cacti

下面开始导入数据库,mysql数据库的基本安全配置这里不做说明,请参考以前的postfix邮件安装文档中的mysql设置部分。

mysql>create database cacti; // 创建一个数据库供cacti使用

mysql>use cacti;

Mysql>source /usr/local/cacti/cacti.sql // 导入mysql数据库

Mysql>grant all privileges on cacti.* to cacti@localhost identified by ‘cactipass’;

添加一个数据库账号cacti 密码为cactipass 用以访问cacti库

Mysql>flush 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的配置文件

修改其中的数据库连接信息,设置好数据库主机地址,用户,密码信息。

至此安装完成,访问根据提示安装cacti (ip换成你对应的主机ip地址)

接下来安装cacti的插件管理

复制相关文件到cacti下

第四部分 整合cacti和nagios

整合cacti和nagios是利用了cacti的一个插件nagios for cacti,它的原理是将nagios的数据通过ndo2db导入到mysql数据库(cacti的库中),然后cacti读取数据库信息将nagios的结果展示出来。

1.安装ndoutils

首先需要安装ndoutils以将nagios的数据能导入到mysql数据库中。

修改nagios主配置文件

添加以下内容

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,这里我的配置文件内容为:

[root@localhost downloads]# cat /usr/local/nagios/etc/ndomod.cfg |grep -v '^#'|sed /^$/d

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

[root@localhost 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 启动ndo2db

2.安装php-json

npc展示部分用到json,需要在php中安装php-json的支持,centos 5下的php 版本默认是5.1.6 不带json支持,无法简单地通过yum install php5-json方式来安装。

#cd ~/downloads

编译前初始化php环境

重启apache

为了验证是否成功可使用phpinfo查看是否已支持json

3.安装npc

启用cacti的插件功能,以admin用户登陆cacti,在console中的user management里对admin的用户权限进行编辑,勾选上Plugin Management,然后到插件管理中心安装并启用NPC即可。

至此完成nagios和cacti的整合。。

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2025/2/27 6:37:22