天天看点

运维监控 ——Nagios

    Nagios是一款开源监控软件。利用Nagios可以监控本地或远程主机资源,如磁盘空间、系统负载等情况,也可以监控各种应用服务,例如HTTP服务、FTP服务等。当主机或服务出现故障时,Nagios还可以通过邮件、手机短信等形式在第一时间通知系统维护人员。

  一. Nagios综述

     作为一名运维人员或系统管理员,难免会遇到主机或服务异常的情况,遭遇故障并不可怕,可怕的是故障出现后,系统管理人员不知道。由于没有及时发现故障,不但解决问题时存在困难,而且可能带来很大的损失。因此,一个能完成对主机或服务进行检测的自动化工具对于运维人员或系统管理人员来说非常重要。Nagios就是一个这样的开源管理软件,通过Nagios可以轻松实现对远程主机、服务以及网络的全面监控。

  二. 什么是Nagios 

     Nagios是一款Linux上成熟的监控系统运行状态和网络信息的开源IT基础设施监视系统。Nagios能监视所指定的本地或远程主机及服务,同时提供异常通知、事件处理等功能。与商业IT管理系统,如IBM Tivoli、HP Open View/Operations等相比,Nagios具有成本低廉、结构简单、可维护性强等诸多有点,越来越受IT运维人员和系统管理人员的青睐。

     Nagios可运行在Linux和UNIX平台上,同时提供一个可选的基于浏览器的Web界面,以方便系统管理人员常看系统的运行状态、网络状态、各种系统问题及日志异常等。

  三. Nagios的结构与特点

     从结构上讲,Nagios可分为核心和插件两个部分。Nagios的核心部分只提供了很少的监控功能,因此要搭建一个完善的IT监控管理系统,用户还需要为Nagios安装相应的插件,这些插件可以从Nagios官方网站上下载,也可以根据实际要求编写。

        Nagios的主要功能特点如下:

           @ 监控本地或者远程主机资源(内存、进程、磁盘等)

         @ 监视网络服务资源(HTTP、PING、FTP、SMTP、POP3等)

         @ 允许用户编写自己的插件来监控特定的服务

         @ 当被监控对象出现异常时,可以通过邮件、短信等方式通知管理人员

         @  可以事先定义时间处理程序,当主机或服务出现故障时自动调用制定制定的处理程序

         @ 可以通过Web界面来监控各个主机或服务的运行状态。

 =========================华丽丽的分割线=====================

Nagios的安装与配置 

一. 安装Nagios

        1.  安装前的准备

        (1)创建Nagios用户和用户组 

        将Nagios进程的运行用户和组设置为nagios,并且将nagios的主程序目录属主设置为nagios,以保证系统的安全(当然设置为root用户也是可以的,但不建议这么做)。基本操作如下:

运维监控 ——Nagios

   (2)开启系统的sendmail服务或Postfix服务

         在Nagios监控服务器上开启sendmail服务的主要作用是让Nagios在检测到故障时可以发送报警邮件。目前很多的Linux发行版本都默认自带了sendmail服务,所以在安装系统时只需开启sendmail服务即可,并不需要在sendmail上进行任何配置。

        【注:系统发行版本不同,默认自带的邮件服务也不同。我使用的为CentOS 6.5 ,自带的为Postfix服务。两者任一皆可】 

        2. 编译安装Nagios

        所有准备工作完成后,开始编译安装Nagios。过程如下:

运维监控 ——Nagios
运维监控 ——Nagios

 注:

        # 解包

        # 进入主目录

        # 指定Nagios的安装目录,这里指定将Nagios安装到/usr/local/nagios目录下

        # 通过make install命令来安装Nagios主程序的CGI和HTML文件

        # 通过make install-init命令可以在/etc/rc.d/init.d目录下创建Nagios的启动脚本

        # 通过make install-commandmode命令来配置目录权限

        # 通过make install-config用来安装Nagios实例配置文件,这里的安装路径是/usr/local/nagios/etc

        设置开机启动。

运维监控 ——Nagios

        Nagios各个目录名称及用途说明如下表所示:

运维监控 ——Nagios

   3. 安装Nagios插件 

        Nagios提供的各种监控功能基本是通过插件来完成的,而Nagios核心只提供了很少的监控功能,因此安装插件是必须的。Nagios的插件可以再www.nagios.org下载到,我下载的是nagios-plugins-2.0.3。其实插件版本与Nagios版本的关联并不大,不一定非要用我下载的这个版本。接着上传对应的nagios-plugins-2.0.3.tar.gz到服务器,解压缩并安装。过程如下:

运维监控 ——Nagios
运维监控 ——Nagios

        这样,安装就完成了。需要说明的是,插件的安装路径最好和Nagios安装路径一致,这样安装完插件后会在Nagios主程序目录(即/usr/local/nagios下的libexec目录)下生成很多可执行文件,这些就是Nagios所需要的插件。

        4. 安装Nagios汉化插件

        对于英语水平不高的用户(比如我这样的- -。),还可以为Nagios安装汉化插件,可以从http://sourceforge.net/projects/nagios-cn/files/下载对应Nagios版本的汉化插件。这里下载的是nagios-cn-3.2.3.tar.bz2。接着开始安装编译Nagios插件,过程如下:

运维监控 ——Nagios

   5. 安装与配置Apache

        Apache不是安装Nagios所必须的,但是Nagios提供了Web监控界面,通过Web监控界面可以清晰的看到被监控的主机和资源的运行状态,因此,安装一个Web服务是很必要的。可选的Web服务器有Apache、Nginx等,我选择Apache了。

        Apache的安装非常简单,需要注意的是,Nagios在nagios 3.1.x版本以后,配置Web监控页面时需要PHP的支持。这里下载的Nagios版本为nagios 4.0.8,因此在安装完Apache后,还需要安装配置PHP。

        LAMP环境的搭建过程省略,我选择以YUM方式搭建。跳至配置过程:

        (1) 配置Apache

        首先在Apache配置文件/etc/httpd/conf/httpd.conf中修改Apache进程的启动用户为Nagios:

运维监控 ——Nagios

        然后找到DirectoryIndex修改为如下并添加AddType一行:

运维监控 ——Nagios

        安全起见,一般要求必须经过授权才能访问Nagios的Web监控页面,在httpd.conf文件最后添加如下信息:

运维监控 ——Nagios

   (2) 创建Apache目录验证文件

        在上面的配置中指定了目录验证文件htpasswd,下面创建这样一个文件:

运维监控 ——Nagios

        (3) 启动Apache服务

        (注意防火墙),可以看到Nagios的监控页面。

运维监控 ——Nagios

         二. 配置Nagios

         Nagios主要用于监控一台或者多台本地主机及远程主机的各种信息,包括本机资源及对外的服务等。默认的Nagios配置没有任何监控内容,仅是一些模板文件。下面通过理论与实践相结合的方式详细介绍如果搭建一个完善的Nagios监控系统。

        1. 默认配置文件介绍

        Nagios安装完毕后,默认的配置文件在/usr/local/nagios/etc目录下,每个文件或目录的用途如下表所示:

运维监控 ——Nagios

        Nagios在配置方面非常灵活,默认的配置文件并不是必须的。可以使用这些默认的配置文件,也可以创建自己的配置文件,然后在主配置文件nagios.cfg中引用即可。

        2. 配置文件之间的关系

        Nagios的配置过程设计的几个定义有:主机、主机组、服务、服务组、联系人、联系人组、监控时间和监控命令等,从这些定义可以看出,Nagios的各个配置文件之间是互为关联、彼此引用的。成功配置一台Nagios监控系统,必须弄清楚每个配置文件之间依赖与被依赖的关系,最重要的4点事:第一次要定义监控哪些主机、主机组、服务、服务组,第二要定义这个监控要通过什么命令实现,第三要定义监控的时间段,最后要定义主机或服务出现问题时要通知的联系人和联系人组。

        清楚了Nagios的配置重点和各个配置文件之间的依赖关系后,配置Nagios就变得非常容易了。

        3. 配置Nagios

        为了能更清楚的说明问题,同时为了方便维护,建议为Nagios各个定义对象创建独立的配置文件:

        创建hosts.cfg文件定义主机和主机组,

        创建services.cfg文件定义服务,

        用默认的contacts.cfg文件定义联系人和联系人组,

        用默认的commands.cfg文件定义命令,

        用默认的timeperiods.cfg文件定义监控时间段,

        将默认的templates.cfg文件作为资源引用文件。  

        (1) templates.cfg 文件

        Nagios主要用于监控主机资源及服务(在Nagios配置中被称为对象)。为了不重复定义一些监控对象,Nagios引入了一个模板配置文件,将一些共性的属性定义成模板,以便多次引用,这就是templates.cfg的作用。templates.cfg文件内容如下:

运维监控 ——Nagios
运维监控 ——Nagios
运维监控 ——Nagios
运维监控 ——Nagios
运维监控 ——Nagios

  (2) resource.cfg 文件

      resource.cfg是Nagios的变量定义文件,文件内容只有一行:

      $USER1$=/usr/local/nagios/libexec

      其中,变量$USER1$指定了安装Nagios插件的路径,如果把插件安装在其他路径,只需要在这里修改即可。需要足以的是,变量必须先定义,然后才能在其他配置文件中进行引用。

  (3) commands.cfg

      此文件在默认情况下是存在的,无需修改即可使用。当然,如果有新的命令需要加入,在此文件中进行添加即可。这里并未列出文件的所有内容,仅介绍了配置中用到的一些命令。

@ notify-host-by-email 命令的定义如下:

运维监控 ——Nagios

@ check-host-alive 命令的定义如下:

运维监控 ——Nagios

        @ 还有其他许多,除了实现的功能不一样配置并无差别。

运维监控 ——Nagios

  (4) hosts.cfg文件

      此文件在默认情况下不存在,需要手动创建。hosts.cfg主要用来制定被监控的主机地址及相关属性信息。一个配置好的实例如下:

运维监控 ——Nagios

  (5) services.cfg文件

      此文件默认情况下也不存在,需要手动创建。services.cfg文件主要用于定义监控的服务和主机资源,例如监控HTTP服务、FTP服务、主机磁盘空间、主机系统负载等。

运维监控 ——Nagios
运维监控 ——Nagios

     这里对web和MySQL主机设置了4个监控服务,分别是check_ping、check_ssh、check_ftp和check_http。如果要监控远程主机更多的服务,按照相同格式增加即可。

     在services.cfg文件中,有很多对命令的定义,例如监控SSH服务的check_ssh、监控FTP服务的check_ftp、监控HTTP服务的check_http等,这些命令均在commands.cfg中进行定义。结合commands.cfg和resource.cfg文件,不难看出,这些命令对应的真实路是/usr/local/nagios/libexec,也就是说,这些命令其实就是安装Nagios插件后产生成的可执行文件。

     在Nagios中,插件命令和参数的组合格式为:命令!参数!参数。如果有更多参数,依次通过叹号分割即可。下面列举几个命令组合进行介绍。

        check_ping!100.0,20%!500.0,60%

        此命令组合从左到右依次为:命令!告警时延,丢包率!严重告警时延,丢包率。

        check_http!0.0020!0.0050!10

        此命令组合从左到右依次为:命令!告警时延!严重告警时延!连接超时时间。

        check_tcp!23!0.0020!0.0050!10

        此命令组合从左到右依次为:命令!端口!告警时延!严重告警时延!连接超时时间。

        check_ssh!22!10

        此命令组合从左到右依次为:命令!端口!连接超时时间。

        check_smtp!0.0020!0.0050!10

        另外,在监控服务器端口时,很多命令都可以使用check_tcp来代替,例如:

        check_ssh=check_tcp!22

        check_imap=check_tcp!143

        check_ftp=check_tcp!21

        check_nntp=check_tcp!119

        check_pop=check_udp!110

        check_udp=check_tcp

        check_telnet=check_tcp!23

   (6) contacts.cfg是一个定义联系人和联系人组的配置文件,当监控的主机或者服务出现故障时,Nagios会通过指定的通知方式(邮件或短信)将信息发给这里指定的联系人或使用者。

        下面是一个配置好的示例。

运维监控 ——Nagios

   (7) timeperiods.cfg文件

       此文件只用于定义监控的时间段。下面是一个配置好的示例:

运维监控 ——Nagios

  (8) cgi.cfg文件

      此文件用来控制相关CGI脚本,如果想在Nagios的Web监控界面执行CGI脚本,例如重启Nagios进程、关闭Nagios通知、停止Nagios主机检测等,这时就需要配置cgi.cfg文件了。由于Nagios的Web监控页面验证用户为wangkun,因此只需要在cgi.cfg文件中添加此用户的执行权限就可以了。需要修改的配置信息如下:

运维监控 ——Nagios

        到这里为止,Nagios的所有对象配置文件已经修改完了。将创建好的8个文件全部放到/usr/local/nagios/etc目录下,接着开始配置nagios.cfg文件。

  (9) nagios.cfg文件

      nagios.cfg文件默认的路径为/usr/local/nagios/etc/nagios.cfg,是Nagios的核心配置文件,所有的对象配置文件都必须在这个文件中进行定义才能发挥其作用,这里只需引用对象配置文件即可。下面分别对Nagios.cfg文件中的内容进行介绍。

运维监控 ——Nagios

      cfg_file变量用来引用对象配置文件,如果有更多的对象配置文件,那么在这里依次添加即可。但在有些时候,监控的对象多达几千个,如果都在这引用将会非常费力,而且还不利于日后的维护,此时就需要另一个变量了,那就是cfg_dir。该变量用于指定一个目录,所有在这个目录下的以.cfg为扩展名的文件都将作为对象配置文件来处理。另外,Nagios将会递归该目录下的子目录并处理其子目录的全部配置文件。

运维监控 ——Nagios
运维监控 ——Nagios
运维监控 ——Nagios
运维监控 ——Nagios
运维监控 ——Nagios
运维监控 ——Nagios
运维监控 ——Nagios

 =======================华丽丽的分割线======================

Nagios的运行和维护  

 一. 验证Nagios配置问价你的正确性

    在上面已经配置完成了一个基本的Nagios监控系统。检查配置文件的正确性方面Nagios做得非常到位,只需要一个命令就可以完成:

运维监控 ——Nagios

        看到如下两个大鸭蛋代表没有错误。如果不是,则根据提示修正即可。

运维监控 ——Nagios

二. 启动与停止Nagios

        有多重启动、停止和重启Nagios的方法,读者可以根据自己的需要,任选其一。

        1. 启动Nagios

        (1) 通过初始化脚本启动Nagios

运维监控 ——Nagios

      或    

运维监控 ——Nagios

        (2) 手工方式启动Nagios

        通过nagios命令的” -d “ 参数来启动nagios守护进程

运维监控 ——Nagios

        2. 关闭nagios服务

        和开启的类似,services命令大家伙都快用烂了我就不废话了

        3. 重启Nagios

        services是一种

        第二种是通过web监控页重启Nagios

        还一种是手工方式平滑重启,也就是kill  -HUP  <nagios_pid>

到此为止,Nagios监控系统已经成功搭建并运行起来了。

运维监控 ——Nagios

三. Nagios故障报警

        Nagios的故障报警功能非常强大,可以支持邮件、短信、MSN、QQ等多种方式,每种报警方式都有自己的优缺点:邮件报警是最普通、最简单的方式,无需任何插件,只需要添加报警的邮件地址即可,但是实时性不好;短信报警实时性最好,可以直接将监控结果发送到指定的手机上,但是短信报警方式需要硬件或第三方插件支持,成本略高;MSN和QQ报警方式实时性介于邮件和短信之间,但需要编写自定义脚本,因此复杂性稍高。

    下图是问题出现后Nagios发送到指定邮箱的报警邮件:

运维监控 ——Nagios