一、Nagios简介
Nagios是一款开源的免费网络监视工具,能有效监控Windows、Linux和Unix的主机状态,交换机路由器等网络设置,打印机等。在系统或服务状态异常时发出邮件或短信报警,第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知。
Nagios是一个监视系统运行状态和网络信息的监视系统。Nagios能监视所指定的本地或远程主机以及服务,同时提供异常通知功能等。
Nagios可运行在Linux/Unix平台之上,同时提供一个可选的基于浏览器的WEB界面以方便系统管理人员查看网络状态,各种系统问题,以及日志等等。
二、Nagios的主要功能
1) 网络服务监控(SMTP、POP3、HTTP、NNTP、ICMP、SNMP、FTP、SSH)
2) 主机资源监控(CPU load、disk usage、system logs),也包括Windows主机(使用NSClient++ plugin)
3) 可以指定自己编写的Plugin通过网络收集数据来监控任何情况(温度、警告……)
4) 可以通过配置Nagios远程执行插件远程执行脚本
5) 远程监控支持SSH或SSL加通道方式进行监控
6) 简单的plugin设计允许用户很容易的开发自己需要的检查服务,支持很多开发语言(shell scripts、C++、Perl、ruby、Python、PHP、C#等)
7) 包含很多图形化数据Plugins(Nagiosgraph、Nagiosgrapher、PNP4Nagios等)
8) 可并行服务检查
9) 能够定义网络主机的层次,允许逐级检查,就是从父主机开始向下检查
10) 当服务或主机出现问题时发出通告,可通过email, pager, sms 或任意用户自定义的plugin进行通知
11) 能够自定义事件处理机制重新激活出问题的服务或主机
12) 自动日志循环
13) 支持冗余监控
14) 包括Web界面可以查看当前网络状态,通知,问题历史,日志文件等
三、Nagios工作原理
Nagios的功能是监控服务和主机,但是他自身并不包括这部分功能,所有的监控、检测功能都是通过各种插件来完成的。Nagios 安装是指基本平台,也就是Nagios软件包的安装。它是监控体系的框架,也是所有监控的基础。
启动Nagios后,它会周期性的自动调用插件去检测服务器状态,同时Nagios会维持一个队列,所有插件返回来的状态信息都进入队列,Nagios每次都从队首开始读取信息,并进行处理后,把状态结果通过web显示出来。Nagios 提供了许多插件,利用这些插件可以方便的监控很多服务状态。安装完成后,在nagios 主目录下的/libexec 里放有 nagios 自带的可以使用的所有插件.
1. 如何远端管理服务器对象
Nagios 系统提供了一个插件NRPE,Nagios 通过周期性的运行它来获得远端服务器的各种状态信息。它们之间的关系如下图所示:
Nagios通常由一个主程序(Nagios)、一个插件程序(Nagios-plugins)和四个可选的ADDON(NRPE、NSCA、NSClient++和NDOUtils)组成。Nagios的监控工作都是通过插件实现的,因此,Nagios和Nagios-plugins是服务器端工作所必须的组件。而四个ADDON中,NRPE用来在监控的远程Linux/Unix主机上执行脚本插件以实现对这些主机资源的监控;NSCA用来让被监控的远程Linux/Unix主机主动将监控信息发送给Nagios服务器(这在冗余监控模式中特别要用到);NSClient++是用来监控Windows主机时安装在Windows主机上的组件;而NDOUtils则用来将Nagios的配置信息和各event产生的数据存入数据库,以实现这些数据的快速检索和处理。
(1) nagios通过nsca进行被动监控。被动监测:就是指由被监测的服务器主动上传数据到nagios监控系统中。这种监测方式提高了实时性(出现问题的时候,被监测的服务器可以及时上传数据通知nagios,从而使管理员可以尽快作出处理,而不用像主动监测中一样,非要等到下一个监测周期才能获知被监测服务器的状态)。NSCA就是可以实现Nagios被动监测的一个程序。目前所知道的,只能通过nsca插件对linux/unix服务器进行被动监控。对于windows服务器暂时没发现可用的插件。
(2) nagios通过nrpe插件和snmp协议进行主动监控。简单理解决就是nagios按照检测周期主动的获取远程主机的数据。这样一来实时性就要差一些了。nagios通过nrpe插件和snmp协议实现了对linux/unix服务器进行监控,同时通过snmp协议实现了对windows服务器、交换机、打印机等的监控。另外,nagios通过NSClient++客户端也可以对windows进行监控。
(3) nagios目前完全依赖于对配置文件的读写进行监控数据的展示与配置。当然写的操作nagios是不提供的,这个需要手工通过脚本等进行配置。但是NDOMOD模块的出现解决了nagios无法将数据写入到数据库的问题。提供NDOMOD模块的插件为NDOUtils,NDOMOD模块需要加载到nagios的配置中,NDOUtils插件通过运行NOD2DB进程将nagios的配置文件(.cfg)和status.dat进行分析,并将分析的结果写到mysql数据库中,但是目前来看,这些数据是相当于放入了一个回收站备份一样,并没有实际的被大家用到。但是这个数据对于二次开发来说也算是至关重要的。
2. 状态返回信息类型
Nagios可以识别4种状态返回信息,即 0(OK)表示状态正常/绿色、1(WARNING)表示出现警告/黄色、2(CRITICAL)表示出现非常严重的错误/红色、3(UNKNOWN)表示未知错误/深黄色。Nagios根据插件返回来的值,来判断监控对象的状态,并通过web显示出来,以供管理员及时发现故障。
四、Nagios架构
简要说明:
(1) nagios deamon进程对nagios.cfg配置文件进行读取,nagios.cfg配置文件中放存着一系列配置文件的存放路径。具体如上图。
(2) nagios deamon进程通过对nagios.cfg配置文件中所引用到的信息进行操作,在服务端执行plugin与被监控端的agent进行通讯获取监控结果和数据。
(3) nagios deamon进程将监控结果写入status.dat文件中,status.dat文件相当于一个log或一个db。
(4) cgi程序对status.dat文件中的监控结果进行分析并与读到.cfg配置中的数据进行匹配合并,最终显示在cgi处理结果中。
五、Nagios配置
Nagios 主要用于监控一台或者多台本地主机及远程的各种信息,包括本机资源及对外的服务等。默认的Nagios 配置没有任何监控内容,仅是一些模板文件。若要让Nagios 提供服务,就必须修改配置文件,增加要监控的主机和服务,下面将详细介绍。
1. 默认配置文件介绍
Nagios 安装完毕后,默认的配置文件在/usr/local/nagios/etc目录下。
(1) cgi.cfg 控制CGI访问的配置文件
(2) nagios.cfg Nagios 主配置文件
(3) resource.cfg 变量定义文件,又称为资源文件,在些文件中定义变量,以便由其他配置文件引用,如$USER1$
(4) objects objects 是一个目录,在此目录下有很多配置文件模板,用于定义Nagios 对象
(5) objects/commands.cfg 命令定义配置文件,其中定义的命令可以被其他配置文件引用
(6) objects/contacts.cfg 定义联系人和联系人组的配置文件
(7) objects/localhost.cfg 定义监控本地主机的配置文件
(8) objects/printer.cfg 定义监控打印机的一个配置文件模板,默认没有启用此文件
(9) objects/switch.cfg 定义监控路由器的一个配置文件模板,默认没有启用此文件
(10) objects/templates.cfg 定义主机和服务的一个模板配置文件,可以在其他配置文件中引用
(11) objects/timeperiods.cfg 定义Nagios 监控时间段的配置文件
(12) objects/windows.cfg 监控Windows 主机的一个配置文件模板,默认没有启用此文件
2. 配置文件之间的关系
在nagios的配置过程中涉及到的几个定义有:主机、主机组,服务、服务组,联系人、联系人组,监控时间,监控命令等,从这些定义可以看出,nagios各个配置文件之间是互为关联,彼此引用的。成功配置出一台nagios监控系统,必须要弄清楚每个配置文件之间依赖与被依赖的关系:
(1) 定义监控哪些主机、主机组、服务和服务组;
(2) 定义这个监控要用什么命令实现;
(3) 定义监控的时间段;
(4) 定义主机或服务出现问题时要通知的联系人和联系人组。
3. 配置Nagios
为了能更清楚的说明问题,同时也为了维护方便,建议将nagios各个定义对象创建独立的配置文件:
(1) 创建hosts.cfg文件来定义主机和主机组
(2) 创建services.cfg文件来定义服务
(3) 用默认的contacts.cfg文件来定义联系人和联系人组
(4) 用默认的commands.cfg文件来定义命令
(5) 用默认的timeperiods.cfg来定义监控时间段
(6) 用默认的templates.cfg文件作为资源引用文件
六、Nagios插件
1. Nagios-Plugins插件:
nagios-plugins是nagios官方提供的一套插件程序,nagios监控主机的功能其实都是通过执行插件程序来实现的。
nagios本身并没有监控的功能,所有的监控是由插件完成的,插件将监控的结果返回给nagios,nagios分析这些结果以web的方式展现给我们,同时提供相应的报警功能(这个报警的功能也是由插件完成的)。所有的这些插件是一些实现特定功能的可执行程序,默认安装的路径是/usr/local/nagios/libexec。
2. NRPE
nagios只能监测自己所在的主机的本地信息,而对其他的机器无能为力。使用NRPE监控LINUX上的本地信息。
(1) NRPE总共由两部分组成:
- check_nrpe 插件,位于在监控主机上
- NRPE daemon,运行在远程的linux主机上(通常就是被监控机)
(2) Nagios 通过NRPE 来远端管理服务:
a. Nagios 执行安装在它里面的check_nrpe 插件,并告诉check_nrpe 去检测哪些服务。
b. 通过SSL,check_nrpe 连接远端机子上的NRPE daemon
c. NRPE 运行本地的各种插件去检测本地的服务和状态(check_disk,..etc)
d. 最后,NRPE 把检测的结果传给主机端的check_nrpe,check_nrpe 再把结果送到Nagios状态队列中。
e. Nagios 依次读取队列中的信息,再把结果显示出来。
注意:NRPE daemon需要nagios插件安装在远程的linux主机上,否则,daemon不能做任何的监控。
(3) 通过NRPE的检测分为两种:
a. 直接检测:检测的对象是运行NRPE的那台linux主机的本地资源,被监控机上安装有nrpe,并且还有插件,最终的监控是由这些插件来进行的.当监控主机将监控请求发给nrpe后,nrpe调用插件来完成监控.
b. 间接检测:当运行nagios的监控主机无法访问到某台被监控机,但是运行NRPE的机器可以访问到时,NRPE就可以充当一个代理,将监控请求发送到被监控机(必须要说明的是,通常被监控机与监控机在同一网络内,所以这样的情况很少)