首页 > 代码库 > Nagios简介与安装(1)
Nagios简介与安装(1)
搭建Nagios实在是一个繁杂的过程,首先需要读者有Linux基础,最为重要的是要花费大量的精力和时间,还有就是耐心和细心。我主要是参考网上这篇文章,觉得写的非常好。
原文:
http://www.cnblogs.com/mchina/archive/2013/02/20/2883404.html
http://www.ibm.com/developerworks/cn/linux/1309_luojun_nagios/
一、Nagios简介
Nagios是一款开源的电脑系统和网络监视工具,能有效监控Windows、Linux和Unix的主机状态,交换机路由器等网络设置,打印机等。在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知。
Nagios是插件式的结构,它本身并没有任何监控功能,所有的监控都是通过插件进行的,因此是高度模块化和富于弹性的。Nagios监控的对象可以分为两类:主机和服务。主机通常指的是物理主机,如服务器、路由器、工作站和打印机等。而服务通常指的是某个特定的功能,如提供http服务的httpd进程等。为了管理上的方便,主机和服务还可以分别被规划为主机组和服务组等。Nagios不监控任何具体数值指标(如流量的大小,进程的个数等)只是根据返回的状态值而做出分析判断,它仅用四种抽象属性对被监控对象的状态进行描述:OK, WARNING, CRITICAL, UNKNOWN。于是,管理员只需要对某种被监控对象的WARNING和CRITICAL的阈值进行关注和定义即可。Nagios通过将WARNING和CRITICAL状态的阈值传递给插件,并由插件负责某具体对象的监控及结果分析,其输出为状态信息(OK, WARNING, CRITICAL, UNKNOWN)。
Nagios原名为NetSaint,由Ethan Galstad开发并维护至今。NAGIOS是一个缩写形式: "Nagios Ain‘t Gonna Insist On Sainthood" Sainthood 翻译为圣徒,而"Agios"是"saint"的希腊表示方法。Nagios被开发在Linux下使用,但在Unix下也工作得非常好。
主要功能
网络服务监控(SMTP、POP3、HTTP、NNTP、ICMP、SNMP、FTP、SSH)
主机资源监控(CPU load、disk usage、system logs),也包括Windows主机(使用NSClient++ plugin)
可以指定自己编写的Plugin通过网络收集数据来监控任何情况(温度、警告……)
可以通过配置Nagios远程执行插件远程执行脚本
远程监控支持SSH或SSL加通道方式进行监控
简单的plugin设计允许用户很容易的开发自己需要的检查服务,支持很多开发语言(shell scripts、C++、Perl、ruby、Python、PHP、C#等)
包含很多图形化数据Plugins(Nagiosgraph、Nagiosgrapher、PNP4Nagios等)
可并行服务检查
能够定义网络主机的层次,允许逐级检查,就是从父主机开始向下检查
当服务或主机出现问题时发出通告,可通过email, pager, sms 或任意用户自定义的plugin进行通知
能够自定义事件处理机制重新激活出问题的服务或主机
自动日志循环
支持冗余监控
包括Web界面可以查看当前网络状态,通知,问题历史,日志文件等
二、Nagios结构
Nagios结构上来说,可分为核心和插件两个部分。Nagios的核心部分只提供了很少的监控功能,因此要搭建一个完善的IT监控管理系统,用户还需要在Nagios服务器安装相应的插件,插件可以从Nagios官方网站下载http://www.nagios.org/ ,也可以根据实际要求自己编写所需的插件。
Nagios core(核心): 它基本不做任何监控工作,所有的监控功能都由Plugins完成。
三、Nagios工作原理
Nagios的功能是监控服务和主机,但是他自身并不包括这部分功能,所有的监控、检测功能都是通过各种插件来完成的。
启动Nagios后,它会周期性的自动调用插件去检测服务器状态,同时Nagios会维持一个队列,所有插件返回来的状态信息都进入队列,Nagios每次都从队首开始读取信息,并进行处理后,把状态结果通过web显示出来。
Nagios提供了许多插件,利用这些插件可以方便的监控很多服务状态。安装完成后,在nagios主目录下的/libexec里放有nagios自带的可以使用的所有插件,如,check_disk是检查磁盘空间的插件,check_load是检查CPU负载的,等等。每一个插件可以通过运行./check_xxx –h 来查看其使用方法和功能。
Nagios可以识别4种状态返回信息,即 0(OK)表示状态正常/绿色、1(WARNING)表示出现警告/***、2(CRITICAL)表示出现非常严重的错误/红色、3(UNKNOWN)表示未知错误/深***。Nagios根据插件返回来的值,来判断监控对象的状态,并通过web显示出来,以供管理员及时发现故障。
四种监控状态
再说报警功能,如果监控系统发现问题不能报警那就没有意义了,所以报警也是nagios很重要的功能之一。但是,同样的,Nagios 自身也没有报警部分的代码,甚至没有插件,而是交给用户或者其他相关开源项目组去完成的。
Nagios软件需安装在一台独立的服务器上运行,这台服务器称为监控中心,监控中心服务器可以采用Linux或Unix操作系统;每一台被监视的硬件主机或服务都运行一个与监控中心服务器进行通信的Nagios软件后台程序,也可以理解为Agent或插件均可。监控中心服务器读取配置文件中的指令与远程的守护程序进行通信,并且指示远程的守护程序进行必要的检查。虽然Nagios软件必须在Linux或Unix操作系统上运行,但是远程被监控的机器可以是任何能够与其进行通信的主机。
图 1. Nagios 监控原理图
可被监控的对象(各个对象之间有紧密联系,相互引用)
主机对象 物理主机、路由器、交换机、打印机等,可归类为组
服务/资源 统称为服务,可归类为组
联系人 联系人及联系人组
时段 对上面三种对象以时间段的方式监控
命令 (模板)应用到某个被监控对象,以实现具体的监控
Nagios是极富弹性的,其监控功能完全可以按照管理员的期望进行。所有这些功能的实现都是基于一个结构明晰的对象定义系统和少数几个对象类型实现的。
命令(commands)
命令用于定义Nagios如何执行某特定的监控工作。它是基于某特定的Nagios插件定义出的一个抽象层,通常包含一组要执行的操作。
时段(time periods)
时段用于定义某操作可以执行或不能执行的日期和时间跨度,如工作日内的每天8:00-18:00等。
联系人和联系人组(contacts and contact groups)
联系人用于定义某监控事件的通知对象,要通知的信息以及这些接收通知者何时及如何接收通知;一个或多个联系人可以定义为联系人组,而一个联系人也可以属于多个组。
主机和主机组(host and host groups)
主机通常指的是物理主机,其包括此主机相关的通知信息的接收者(联系人),如何及何时进行监控的定义。主机也可以分组,一个主机可同时属于多个组。
服务(services)
服务通常指的是主机上可被监控的特定的功能或资源,其包括此服务相关的通知信息的接收者,如何及何时进行监控等。服务也可以分组,及服务组(service groups),一个服务可同时属于多个服务组。
多个被监控对象如果有多个属性相同时,可定义为模板(template),对某一个对象,可以套用模板,然后再额外定义其独有的属性。这听起来是不是很耳熟。
是的。这就是面向对象(OOP)的观点。我们可以把事物相似的属性抽象为一个类,然后我们可以通过这个类实例化某个对象。
各个对象间的关系
如何添加一个被监控设备?
创建一个被监控对象,根据模板实例化一个对象的过程。
怎么监控一个对象?
通过命令, 命令就是实例化一个插件的过程。
如何通知,通知给谁?
这就是联系人。
对象间的依赖关系
为什么需要定义依赖关系呢?
比如,某路由设备故障必然会导致关联在其上的其他主机无法被正常访问,如果不能定义这些设备间的依赖关系,那么监控系统上必然会出现大量的设备故障信息。而Nagios则通过依赖关系来描述网络设备的拓扑结构,并能够实现在某设备故障时不再依赖于此设备的其他设备进行检测,从而避免了无谓的故障信息,方便管理员及时定位并排除故障。
四、Nagios监控方式
由上图可以看出,插件主要分为5大类,其监控的方式也有5大类。
NRPE方式(专门用于监控unix/linux类的主机)
需要在被监控端安装nrpe守护进程和额外的插件,在nagios server端也要安装nrpe插件。
ssh
远程主机,在nagios server上是ssh的客户端,而client上安装的是ssh的服务端sshd。实现过程是:由ssh向服务端sshd发送请求命令,并把结果返回给check_by_ssh插件,插件对返回结果进行分析,把分析的结果再返回给插件核心,由核心决定是否对结果进行报警。
snmp
基于snmp和snmpd的通信机制
NSCA
让nagios实现被动监控功能,由客户端主动向nagios发送信息
check_xyz
用户可以自己定义取名的插件类型,直接获取远程主机的数据
五、Nagios安装
系统需求
Nagios所需要的运行条件是机器必须可以运行Linux(或是Unix变种)并且有C语言编译器gcc。你必须正确地配置TCP/IP协议栈以使大多数的服务检测可以通过网络得以进行。
你需要但并非必须正确地配置Nagios里的CGIs程序,而一旦你要使用CGI程序时,你必须要安装以下这些软件...
一个WEB服务(最好是Apache)
Thomas Boutell制作的gd库版本应是1.6.3或更高(在CGIs程序模块statusmap和trends这两个模块里需要这个库)
Nagios通常由一个主程序(Nagios core)、一个插件程序(Nagios-plugins)和四个可选的Addon(NRPE, NSCA, NSClient++,NDOUtils)组成。
Nagios的监控工作都是通过插件来完成的。因此,Nagios和Nagios-plugins是服务器端工作所必需的组件。
Addon中
NRPE用来在被监控的远程linux/unix主机上执行脚本插件以实现对这些主机资源的监控。
NSCA用来让被监控的远程主机主动通知Nagios服务器
NSClient++,则用来监控windows主机时,安装在windows上的组件
NDOUtils则用来将Nagios的配置信息和各event产生的数据存入数据库,以实现这些数据的快速检索和处理。编译需要指定 --enable-event-broker 选项。
这四个addon中,NRPE和NSClient需要安装在被监控端, DOUtils工作在Nagios端,而NSCA则需要同时安装在Nagios服务器端和被监控端。
服务器端:至少Nagios core, Nagios Plugins, 可选(NRPE, NSCA, SNMP)
被监控端:如果是Linux,则需安装Nagios plugins, NRPE(因为NRPE依赖于前者)
如果是windows,安装NSClient++即可。
1、Prerequisites
[root@localhost ~]# yum -y install wget httpd php gcc glibc glibc-common gd gd-devel make net-snmp
2、Download Nagios Core and Nagios Plugins Tarballs
[root@localhost ~]# wget [root@localhost ~]# wget http://nagios-plugins.org/download/nagios-plugins-2.0.3.tar.gz
3、Adding the Nagios User and Group
# nagcmd组用于从web接口执行外部命令 [root@localhost ~]# groupadd nagcmd [root@localhost ~]# useradd -G nagcmd -c ‘Nagios Admin‘ nagios [root@localhost ~]# passwd nagios # 把apache附加到nagcmd组,以便于在通过web Interface操作nagios时能够具有足够的权限 [root@localhost ~]# usermod -a -G nagcmd apache
4、Compile and Install
[root@localhost ~]# tar xf nagios-4.0.7.tar.gz -C /usr/local/src [root@localhost ~]# tar xf nagios-plugins-2.0.3.tar.gz -C /usr/local/src [root@localhost ~]# cd /usr/local/src [root@localhost src]# cd nagios-4.0.7/ # --enable-event-broker 是为NDOUtils做准备 [root@localhost nagios-4.0.7]# ./configure --sysconfdir=/etc/nagios --with-command-group=nagcmd --enable-event-broker # All systems: # make all # make install # make install-init # make install-config # make install-commandmode # make install-webconf # Nagios WEB主题 # make install-exfoliation OR make install-classicui # cp -R contrib/eventhandlers/ /usr/local/nagios/libexec/ # chown -R nagios:nagios /usr/local/nagios/libexec/eventhandlers ### /usr/local/nagios/bin/nagios -v /etc/nagios/nagios.cfg # service nagios start # service httpd start ### Nagios Service Setup # chkconfig --add nagios # chkconfig nagios on # chkconfig --add httpd # chkconfig httpd on
5、Create a Default User for Web Access
# htpasswd -c /etc/nagios/htpasswd.users nagiosadmin ## 注意 htpasswd.users 这个文件最好是放在nagios的配置目录中
默认情况下,nagios安装完成后,会在apache的配置文件目录中创建一个配置文件,通常nagios.conf。其中定义了nagios的目录别名以及访问权限控制等。
6、Nagios Plugin Installation
Nagios提供的各种监控功能基本是通过插件来完成的,而Nagios的核心只提供了很少的监控功能,因此安装插件是非常有必要的。Nagios官方网站提供了很多不同板块的插件应用,同时插件版本与Nagios版本也没有什么关联。
[root@localhost ~]# cd /usr/local/src [root@localhost src]# cd nagios-plugins-2.0.3/ [root@localhost nagios-plugins-2.0.3]# ./configure --with-nagios-user=nagios --with-nagios-group=nagios [root@localhost nagios-plugins-2.0.3]# make && make install
这样,插件就安装完了,通过查看Nagios的安装目录下,/usr/local/nagios/libexec目录下,就可以看到很多外部插件。
7、SELinux and iptables
如果系统开启了SELinux服务,则默认拒绝nagios web cgi程序的运行。
### 临时关闭SELinux [root@localhost ~]# getenforce Enforcing [root@localhost ~]# setenforce 0 ### 永久关闭SELinux # 如果想完全关闭SELinux,可以编辑/etc/sysconfig/selinux文件,将其中的SELINUX=enforcing 改# 为SELINUX=disabled 即可。但是需要重启 ### 改变SELinux的行为 # chcon -R -t httpd_sys_content_t /usr/local/nagios/sbin # chcon -R -t httpd_sys_content_t /usr/local/nagios/share ### iptables # service iptables stop OR # iptables -I INPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
8、Nagios Web Interface
After correctly following the procedures you should now be able to access your Nagios Core installation from a web browser.
Simply use the following: http://<your.nagios.server.ip>/nagios
And log in with the credentials you chose when adding the nagiosadmin uesr to the htpasswd.users file.
本文出自 “Share your knowledge” 博客,请务必保留此出处http://skypegnu1.blog.51cto.com/8991766/1532948