使用nagios监控主机及服务

写在前头:限于个人对nagios的了解有限,写得不够深入与系统,甚至可能会有些错误,各位看官还多包涵。本文主要涉及的是nagios daemon、nrpe及三个部分。

01

nagios系统的功能

  • 主机或服务状态监控
    nagios是一款开源的监控软件,从它可以监控的设备类型上来看,主要包含网络设备,服务器设备。常见的网络设备如:路由器、交换机、防火墙、F5、打印机等,常见的服务器设备主要分为:UNIX类、Linux类以及Windows类。按我的理解凡是支持snmp协议的设备,包含PC都可以通过nagios进行监控。当然,nagios实现对主机资源及服务的监控并非全依靠snmp协议,它最为主要的监控手段是通过nrpe组件来实现。
  • 监控告警通知
    nagios对在网络中发现的问题会及时产生告警信息并通过事先定义好的方式,如邮件、短信、微信等方式通知相关人员。随着网络运维工作更加自动化,还可以通过nagios支持的相应API接口,开发相应的程序,实现其自动或人干干预去对监控发现的问题进行自动化的处理。
  • 监控信息可视化
    nagios结合web服务器,可以将整个网络所监控的所有信息以web页面的形式展现出来,还可以结合外部软件实现监控数据可视化,以图表的形式展示在web页面中,本文将介绍nagios常用的画图软件包pnp,现在叫pnp4nagios。
  • 监控数据存储
    nagios监控到的数据会存储下来,可以直接以文件的形式存储也可以通过NDOUtils组件存储到如mysql类的数据库中,从而可以很好支持监控历史数据的查询。

02

nagios系统的组成

nagios系统主要包含nagios daemon、nagios plugin、nrpe、web三个组件,它还包含NDOUtils、NSCA、NSClinet++组件,它们共同组成一个完整的nagios,组成逻辑图如下所示:

使用nagios监控主机及服务
  • Nagios Daemon
    nagios系统的核心组件,它负责组织与管理各组件,将它们协调起来共同完成监控任务,并完成监控信息的组织与展示。
  • Nagios Plugins
    nagios plugins主要就是nagios核心组件自带以及用户自开发的一些插件,它们是实现各项监控的具体小程序,由它们将采集到相应的数据以后,回送给nagios服务器。
  • NRPE
    nagios系统要想取得被监控主机的存活状态、http、ftp、ssh服务是否可用,可以通过程序探测的出来,但如果要想取得被监控端上如磁盘容量,cpu负载这类本地信息时,如果没有相应的权限就不行,所以就产生了代理程序,事先在被监控机上安装代理程序(Linux系统是nrpe软件),然后通过它们来获取监控数据,再回送给nagios服务器。当nrpe启动以后,它会开启5666端口。nrpe的工程原理如下图所示:

使用nagios监控主机及服务

NRPE 总共由两部分组成:
check_nrpe:位于nagios server上。
NRPE daemon:位于被监控的Linux主机上。
当Nagios 需要监控某个远程Linux 主机时:
nagios 会运行check_nrpe 这个插件,告诉它要检查什么
check_nrpe 插件会连接到远程的NRPE daemon,所用的方式是SSL; NRPE daemon 会运行相应的nagios 插件来执行检查;
NRPE daemon 将检查的结果返回给check_nrpe 插件,插件将其递交给nagios做处理。

  • NSClinet++
    NSClient++这一组件是安装在windows主机上,相当于nagios server在windows端的代理程序。
  • NSCA
    NSAC这一组件适用于部署分布式nagios监控系统时使用,它可以实现让被监控端主动将需要监控的信息发送给nagios服务端。

03

本文所用到系统环境

OS:CentOS release 6.8 (Final) 2.6.32-642.el6.x86_64
还有一个重要环境:互联网(yum、百度、Google)。
各软件包:

使用nagios监控主机及服务

04

nagios系统软件部署

服务器侧软件安装

前提:使系统具备编译软件源码包的能力,并提前解决一些包、共享库文件之间的依赖关系,建议安装如下两个Group组件:

使用nagios监控主机及服务
  • 安装nagios依赖的软件包
    nagios要通过web页面展现监控结果,所以nagios服务器同时还得是一个web服务器,因为nagios各种数据的实时展现是动态页面呈现的,因此还需要用到php。nagios要实现画图还依赖于gd、rrdtool包。按照官方说明安装如下包:

使用nagios监控主机及服务
  • 创建nagios用户及组
    很多开源软件如果是通过源码包来进行安装,为后续的安装及服务运行做准备都需要通过事先创建好相应服务的账号及组。这里相关指令如下:

使用nagios监控主机及服务
  • 创建一个可以从web接口接受外部指令的用户组并将nagios及apache添加进组

使用nagios监控主机及服务
    • 安装nagios core
      nagios core就是前文提到的nagios daemon。解压软件包后,源码安装的通用三步骤:
      1. configure
      2. make
      3. make install
        此外相应指令如下:

使用nagios监控主机及服务

configure完成以后若出现make all以完成编译的提示则继续执行:

使用nagios监控主机及服务

如果上述任一指令执行后有error发生或者某文件,某组件没有找到,务必先解决相应的错误,一般可能是某些包没有安装导致,根据提示信息中的关键字找出可能的包,然后yum安装上即可。

  • 创建登录nagios web页面的用户及密码
    默认系统中已存在名为nagiosadmin的账户,只需要给它指定密码,其密码会加密存储,密码文件默认为`/usr/local/nagios/etc/htpasswd.users,无需改动。

使用nagios监控主机及服务
  • 重启web服务

使用nagios监控主机及服务
  • 安装plugin及nrpe组件
    因为nagios服务器本身也同样需要被监控,自己监控自己或者被其它的nagios服务器所监控,所以它也需要安装plugin及nrpe组件。在软件包的解压目录中执行如下指令:

使用nagios监控主机及服务
  • 安装完plugin以后会在/usr/local/nagios/libexec目录下存放大量插件,就是用这些插件来实现最终的监控目的的。
    按着安装nrpe
    nagios服务器安装nrpe包主要目的是为了安装check_nrpe插件,便于与被监控Linux端的NRPE daemon程序通信,如果这台nagios服务器也需要被其它nagios服务器监控,那它还必须安装nrpe daemon和nrpe daemon-config。

使用nagios监控主机及服务
  • 设置web、nagios服务开机自启

使用nagios监控主机及服务
  • 通过web页面登录nagios
    做完以上步骤以后,即可打开浏览器,输入http://nagios-server-ip/nagios,它会弹出提示框,输入前面提到的nagiosadmin及其密码即可登录。登录后的初始界面如下:

使用nagios监控主机及服务

使用nagios监控主机及服务

被监控端软件安装

在网络中需要被监控的Linux主机中安装nagios pluginnrpe两个组件,并安装xinetd组件,用于启动nrpe程序。

  • nagios plugin安装
    创建nagios用户:

使用nagios监控主机及服务
  • 将tar.gz包解压以后进入其目录,然后执行以下命令:

使用nagios监控主机及服务
  • 安装完成以后,建议修改安装目录/usr/local/nagios的属主为nagios,并可查看到其下有三个目录:

使用nagios监控主机及服务
  • 安装nrpe
    客户端因为需要通过nrpe程序来执行从服务器侧接收到的command,因此必须安装nrpe

使用nagios监控主机及服务
  • 安装xinetd
    根据nrpeREADME文件的说明,可以将nrpe daemon作为xinetd下的一个服务来进行管理,所以需要事先将xinetd安装到系统中:

使用nagios监控主机及服务
  • 再接着安装nrpexinetd下的配置文件:

使用nagios监控主机及服务
  • 修改nrpe的配置文件,以允许nagios server连接它:
    vim /etc/xinetd.d/nrpeonly from改成如下内容:

    使用nagios监控主机及服务
  • nrpe服务端口号添加进去:vim /etc/services在最后一行加上nrpe    5666/tcp      #Nagios-Client然后保存退出。

启动xinetd服务并设置开机自启:

使用nagios监控主机及服务

检查nrpe是否启动即端口5666是否处于监听状态: ss -tnl
另一个检测nrpe是否工作正常的办法是在nagios服务器上使用check_nrpe插件来测试与这台客户端的nrpe通信是否正常:

使用nagios监控主机及服务

05

配置nagios监控主机及服务

5.1 nagios配置文件位置

nagios要对哪些主机监控哪些内容都是通过名为.cfg的配置文件进行定义的。
它们通常是位于/usr/local/nagios/etc目录中的*.cfg以及位于/usr/local/nagios/etc/objects目录下的*.cfg
默认的文件如下:

使用nagios监控主机及服务

再看看/objects/目录下的内容:

使用nagios监控主机及服务

5.2 各配置文件的作用:

  • nagios.cfg主配置文件
    nagios.cfgnagios服务端的主配置文件,它可以定义其它*.cfg配置文件的位置,是否启用性能监控(收集监控数据以生成图表),性能数据处理指令,性能数据文件格式模板及存放位置等,配置nagios日志文件存放的信息级别及位置,nagios进程的启动用户及组,日志文件的切割方式,显示的日期格式等等。如果只是实现对主机及服务的监控,不出监控图的话,默认可以不改动这一文件。
  • templates.cfg模板定义文件
    templates.cfg是监控的模板文件,对所有主机、服务、联系人的定义为简化配置都可以根据需求定制相应的模板,然后在主机、服务、联系人配置文件中去引用模板即可。下面进行简要说明:

使用nagios监控主机及服务

以上便是templates.cfg文件中的主要内容,可以按需修改已定义的模板或者新定义模板。其中涉及到部分对command的定义,它是需要在commands.cfg文件中进行定义的。

  • commands.cfg命令定义文件
    commands.cfg文件可以包含监控时需要用到的指令的定义,由这些指令来完成具体的监控工作,它们可以在services.cfg文件中被调用。配置示例如下:

使用nagios监控主机及服务

这里有一个名为check_nrpe的command特别重要:需要指定它才能够启动本地的check_nrpe去连接被监控端上的nrpe daemon,并在被监控端执行相应的命令,需要自己添加,默认commands.cfg文件里是没有的:

使用nagios监控主机及服务
  • contacts.cfg联系人定义文件
    contracts.cfg这一文件定义了当需要发送告警通知时,需要发给哪些联系人组,然后不同的组里可以分别定义相应的成员,默认情况下会将通知发给名为admins的组,里面包含的email地址即为接收告警通知邮件的地址。示例如下:

使用nagios监控主机及服务
  • timeperiods.cfg时间段模板定义文件
    timeperiods.cfg主要用来对要进行监控的时间段以及可以发送通知的时间段进行定义,很灵活很方便。

使用nagios监控主机及服务
  • localhost.cfg监控服务器配置文件
    localhost.cfg这个文件是用来定义对这台nagios服务器的哪些资源及服务进行监控的,它主要包含两部分的定义,针对host级别的和针对service级别的。示例如下:

    使用nagios监控主机及服务
  • hosts.cfg定义要被监控的主机
    hosts.cfg文件可以将网络中所有需要监控的主机定义进来,并将它们根据需求分组,一台主机可以同时属于不同的组,默认情况下不允许组里面一台主机都没有,然后根据需要调用不同的主机模板(事先在templates.cfg中定义)。另一点很重要的是这个文件需要自己创建,不建议直接在localhost.cfg里添加。示例如下:

使用nagios监控主机及服务
  • services.cfg定义要被监控的服务
    services.cfg这个文件默认也是不存在的,需要手工创建,可以以localhost.cfg里定义的service部分作为模板进行修改。在它里面可以针对不同的服务调用不同的模板,以及把这些服务应用到哪些主机或主机组上。示例如下:使用nagios监控主机及服务

由于新增加了两个配置 文件(hosts.cfg和services.cfg),所以需要在nagios主配置文件(nagios.cfg)中指明它们的位置,只需要在nagios.cfg中加上两行,搜索下cfg_file加到它们的下面即可:

使用nagios监控主机及服务

5.3 检查配置文件

nagios自带的就有配置文件语法及逻辑检测工具,检测方式:

使用nagios监控主机及服务

检测如果没有问题,则可以重载nagios服务,使用最新配置文件来工作了。

使用nagios监控主机及服务

重载服务service nagios reload

5.4 客户端配置监测命令及参数

要实现对Linux主机的监控还差非常关键的一步,去到各被监控Linux主机上配置实际要执行的指令,它们是在/etc/usr/local/nagios/etc/nrpe.cfg文件中定义的。 示例文件如下:

使用nagios监控主机及服务

注意:[]中的内容,这些字符要和nagios服务端上
services.cfg里定义command时check_nrpe!后面的字符完全一样,等号中的内容则前面介绍的方法查看每个plugin的具体用法。

客户端在修改完nrpe.cfg文件以后,需要重启nrpe进程:

使用nagios监控主机及服务

06

登录nagios web页面查看监控数据

在nagios客户端还没有配置好nrpe.cfg文件时,nagios server是无法监控到客户端的,此时应该可以通过web页面查看到一堆NRPE:undefined command之类的错误信息,当客户端nrpe服务修改完成并重启之后,过会儿就能够正常监控上这些客户端了。效果展示如下:

使用nagios监控主机及服务

主机监控视图

使用nagios监控主机及服务

细心的读者可能已经发现两图中,日期格式好像更易读,默认会显示为04-08-2017 22:30:00这种,这是因为笔者修改了nagios.cfg的date_formatiso8601,具体可查看nagios.cfg文件获知。

07

结尾

在前期安装及配置过程中要仔细留意可能出现的警告及错误信息,尽可能修复它们之后在后续操作,nagios跑起来以后,可以通过查看/var/log/messages或者/usr/local/nagios/var/nagios.log来观察错误信息,以找到解决办法。
比如:
在系统运行过程中因为nagios server和客户端nrpe间需要建立ssl会话,所以openssl,openssl-devel包是需要安装的。如果要使用snmp监控主机及服务则需要安装net-snmp包。如果对防火墙不熟悉建议关闭其服务,关闭SELinux。这些在文中未提到,但也是需要注意的地方。

通过nagios实现对主机和服务的监控基本操作方法就写到这儿,在日常使用中有很多可可以深入的地方,特别是对现网各种服务各项指标的监控工作,还需要开发插件然后部署才能够实现,这应该才是监控类软件应用真正有挑战的地方,考验运维工程师的开发能力,nagios支持使用perl、Python、shell,C等语言开发插件以满足实际业务监控需求。

相关新闻

历经多年发展,已成为国内好评如潮的Linux云计算运维、SRE、Devops、网络安全、云原生、Go、Python开发专业人才培训机构!