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/

http://nagios-cn.sourceforge.net/nagios-cn/beginning.html


一、Nagios简介

Nagios logo

  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负载的,等等。Nagios提供的每一个插件可以通过运行./check_xxx �Ch 来查看其使用方法和功能,这对我们很有帮助

  Nagios可以识别4种状态返回信息,即 0(OK)表示状态正常/绿色、1(WARNING)表示出现警告/***、2(CRITICAL)表示出现非常严重的错误/红色、3(UNKNOWN)表示未知错误/深***。Nagios根据插件返回来的值,来判断监控对象的状态,并通过web显示出来,以供管理员及时发现故障。

四种监控状态

2

  再说报警功能,如果监控系统发现问题不能报警那就没有意义了,所以报警也是nagios很重要的功能之一。但是,同样的,Nagios 自身也没有报警部分的代码,甚至没有插件,而是交给用户或者其他相关开源项目组去完成的。

Nagios软件需安装在一台独立的服务器上运行,这台服务器称为监控中心,监控中心服务器可以采用Linux或Unix操作系统;每一台被监视的硬件主机或服务都运行一个与监控中心服务器进行通信的Nagios软件后台程序,也可以理解为Agent或插件均可。监控中心服务器读取配置文件中的指令与远程的守护程序进行通信,并且指示远程的守护程序进行必要的检查。虽然Nagios软件必须在Linux或Unix操作系统上运行,但是远程被监控的机器可以是任何能够与其进行通信的主机。

图 1. Nagios 监控原理图

Nagios 监控原理图

可被监控的对象(各个对象之间有紧密联系,相互引用)

  • 主机对象    物理主机、路由器、交换机、打印机等,可归类为组

  • 服务/资源   统称为服务,可归类为组

  • 联系人      联系人及联系人组

  • 时段        对上面三种对象以时间段的方式监控

  • 命令        (模板)应用到某个被监控对象,以实现具体的监控    

    Nagios是极富弹性的,其监控功能完全可以按照管理员的期望进行。所有这些功能的实现都是基于一个结构明晰的对象定义系统和少数几个对象类型实现的。

命令(commands)

    命令用于定义Nagios如何执行某特定的监控工作。它是基于某特定的Nagios插件定义出的一个抽象层,通常包含一组要执行的操作。

时段(time periods)

    时段用于定义某操作可以执行或不能执行的日期和时间跨度,如工作日内的每天8:00-18:00等。

联系人和联系人组(contacts and contact groups)

    联系人用于定义某监控事件的通知对象,要通知的信息以及这些接收通知者何时及如何接收通知;一个或多个联系人可以定义为联系人组,而一个联系人也可以属于多个组。

主机和主机组(host and host groups)

    主机通常指的是物理主机,其包括此主机相关的通知信息的接收者(联系人),如何及何时进行监控的定义。主机也可以分组,一个主机可同时属于多个组。

服务(services)

    服务通常指的是主机上可被监控的特定的功能或资源,其包括此服务相关的通知信息的接收者,如何及何时进行监控等。服务也可以分组,及服务组(service groups),一个服务可同时属于多个服务组。


    多个被监控对象如果有多个属性相同时,可定义为模板(template),对某一个对象,可以套用模板,然后再额外定义其独有的属性。这听起来是不是很耳熟。

    是的。这就是面向对象(OOP)的观点。我们可以把事物相似的属性抽象为一个类,然后我们可以通过这个类实例化某个对象。


各个对象间的关系

wKioL1PYtwXSgbKhAADaLKMSTsM841.jpg

如何添加一个被监控设备?

    创建一个被监控对象,根据模板实例化一个对象的过程。

怎么监控一个对象?

    通过命令, 命令就是实例化一个插件的过程。

如何通知,通知给谁?

    这就是联系人。


对象间的依赖关系

为什么需要定义依赖关系呢?

    比如,某路由设备故障必然会导致关联在其上的其他主机无法被正常访问,如果不能定义这些设备间的依赖关系,那么监控系统上必然会出现大量的设备故障信息。而Nagios则通过依赖关系来描述网络设备的拓扑结构,并能够实现在某设备故障时不再依赖于此设备的其他设备进行检测,从而避免了无谓的故障信息,方便管理员及时定位并排除故障。


四、Nagios监控方式

    由上图可以看出,插件主要分为5大类,其监控的方式也有5大类。

wKioL1PYsubCGmc-AAGAKypInWs312.jpg

  1. NRPE方式(专门用于监控unix/linux类的主机)

    需要在被监控端安装nrpe守护进程和额外的插件,在nagios server端也要安装nrpe插件。


    wKioL1PYtTHgoaLwAADb5V2h0hw602.jpg

  2. ssh

    远程主机,在nagios server上是ssh的客户端,而client上安装的是ssh的服务端sshd。实现过程是:由ssh向服务端sshd发送请求命令,并把结果返回给check_by_ssh插件,插件对返回结果进行分析,把分析的结果再返回给插件核心,由核心决定是否对结果进行报警。

  3. snmp

    基于snmp和snmpd的通信机制

  4. NSCA

    让nagios实现被动监控功能,由客户端主动向nagios发送信息

  5. check_xyz

    用户可以自己定义取名的插件类型,直接获取远程主机的数据


报警机制:

  • 邮件(sendmail或者其他邮件服务器postfix)。

       看看sendmail是否正常运行?我们需要使用sendmail来发送故障报警信息,所以这个包必须能够正常工作。Sendmail分为服务器和客户端两部分,有2种发送报警邮件的方式:

    (1)nagios所在的机器通过sendmail客户端程序把邮件发送到专门的邮件服务器,再由邮件服务器把消息发送到用户邮箱。

    (2)邮件客户端和服务器端就用nagios所在系统sendmail。

    第一种方式用起来非常规范,但更麻烦,例如需要做地址解析、修改邮件服务器的配置;另外还有一个问题-它还依赖别的系统,增加了故障点和复杂度。第二种方法十分简单,只需启动sendmail服务即可,而且它不再依赖于别的系统和服务。在我工作的实际场景,这两种方法都使用,用专门的邮件服务器会有发送延迟的情况(因为邮件服务器要处理很多其他用户邮件的收发);而直接用sendmail做服务器和客户端就异常简单和方便了。非常幸运的是,几乎所有的linux/unix发行版都默认安装sendmail,费了这么多笔墨,其实就做一个动作-把sendmail服务运行起来

  • 手机短信发送工具(飞信机器人、或购买官方的短信、或利用第三方平台)。我现在的公司是sp,有自己的短信通道,直接把发送短信的客户端程序sms_send拷贝到目录/usr/local/bin/下。如果没有短信下发的网关通道,那怎么办呢?网络上有很多短信发送的客户端程序,很有名的就是smsclient,把它下载下来,解包后安装。不要忘记购买手机modem和手机卡,modem只支持SIM卡而不支持cdma。安装完smsclient软件和硬件modem后,测试一下是否正常。如果没有modem又怎么办?办法还是有的:让你的手机号可以接受邮件,这需要你去营业厅开通这项功能。短信报警功能是最有用的功能,我们不可能成天盯着监视屏幕,也不可能成天接受电子邮件,但我们的手机却可以24小时在线,只要被监控对象发生故障,马上就可以收到故障报警短信。以前,我很怕放长假,因为最担心关键的设备或服务在假期出故障而自己不知道,所以放假就变成了值班;想必很多网络管理员都有类似的经历。在我动手部署nagios以前,曾经在网上搜索关于nagios配置的文章,发现绝大部分都没有介绍使用手机短信这个方便的功能,真是遗憾呀!在此,强烈建议启用nagios的短信故障报警功能。

  • 有些邮箱支持短信通知的功能, 这个功能不错。我们只要在邮箱上面设置了之后,收到邮件的同时也会给我们发送短信消息。这也是一个比较好的办法。


五、Nagios安装

系统需求

    Nagios所需要的运行条件是机器必须可以运行Linux(或是Unix变种)并且有C语言编译器gcc。你必须正确地配置TCP/IP协议栈以使大多数的服务检测可以通过网络得以进行。

你需要但并非必须正确地配置Nagios里的CGIs程序,而一旦你要使用CGI程序时,你必须要安装以下这些软件...

  • 一个WEB服务(最好是Apache)

  • Thomas Boutell制作的gd库版本应是1.6.3或更高(在CGIs程序模块statusmap和trends这两个模块里需要这个库)


Nagios组成

    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 http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-4.0.7.tar.gz
[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/
# --sysconfdir    指定配置文件目录,默认为/usr/local/nagios/etc
# --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的web配置文件nagios.conf

默认情况下,nagios安装完成后,会在apache的配置文件目录中创建一个配置文件,通常nagios.conf。其中定义了nagios的目录别名以及访问权限控制等。


6、Nagios Plugin Installation

    Nagios提供的各种监控功能基本是通过插件来完成的,而Nagios的核心只提供了很少的监控功能,因此安装插件是非常有必要的。Nagios官方网站提供了很多不同板块的插件应用,同时插件版本与Nagios版本也没有什么关联。

### 在安装Plugin之前,先检查是否安装openssl
[root@localhost ~]# rpm -qa | grep openssl
openssl-1.0.1e-16.el6_5.14.x86_64
openssl-devel-1.0.1e-16.el6_5.14.x86_64

## 如果没有安装,请先安装再继续
# yum -y install openssl openssl-devel

[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的行为,让CGI模块在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. 你需要在提示下输入你的用户名(nagiosadmin)和口令。

wKioL1PdzzOiqV3vAAI7amSeIwM772.jpg


如果您看到这界面,说明安装成功。

9、完成了

    祝贺你已经成功安装好Nagios,但网络监控工作仅仅只是刚开始,毫无疑问你不是只监控本地系统,所以要看以下这些文档。

  • 对Windows主机的监控

  1. 对Linux/Unix主机的监控

  2. 对Netware服务器的监控

  3. 监控路由器和交换机

  4. 监控公众化服务(HTTP、FTP、SSH等)


请不要放松,继续看下篇博客。j_0069.gif

你可能感兴趣的:(监控,nagios,路由器)