阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Linux下Nagios+PNP4Nagios的安装与配置

173次阅读
没有评论

共计 62651 个字符,预计需要花费 157 分钟才能阅读完成。

一、Nagios 简介

Nagios 是一款开源的电脑系统和网络监视工具,能有效监控 Windows、Linux 和 Unix 的主机状态,交换机路由器等网络设置,打印机等。在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知。

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 后,它会周期性的自动调用插件去检测服务器状态,同时 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 显示出来,以供管理员及时发现故障。

四种监控状态

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

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

Nagios 安装,是指基本平台,也就是 Nagios 软件包的安装。它是监控体系的框架,也是所有监控的基础。

打开 Nagios 官方的文档,会发现 Nagios 基本上没有什么依赖包,只要求系统是 Linux 或者其他 Nagios 支持的系统。不过如果你没有安装 apache(http 服务),那么你就没有那么直观的界面来查看监控信息了,所以 apache 姑且算是一个前提条件。关于 apache 的安装,网上有很多,照着安装就是了。安装之后要检查一下是否可以正常工作。

知道 Nagios 是如何通过插件来管理服务器对象后,现在开始研究它是如何管理远端服务器对象的。Nagios 系统提供了一个插件 NRPE。Nagios 通过周期性的运行它来获得远端服务器的各种状态信息。它们之间的关系如下图所示:

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

Nagios 通过 NRPE 来远端管理服务

1. Nagios 执行安装在它里面的 check_nrpe 插件,并告诉 check_nrpe 去检测哪些服务。

2. 通过 SSL,check_nrpe 连接远端机子上的 NRPE daemon

3. NRPE 运行本地的各种插件去检测本地的服务和状态 (check_disk,..etc)

4. 最后,NRPE 把检测的结果传给主机端的 check_nrpe,check_nrpe 再把结果送到 Nagios 状态队列中。

5. Nagios 依次读取队列中的信息,再把结果显示出来。

三、实验环境

Host name OS IP Software
 Nagios-Server CentOS release 6.5(Final) 192.168.70.82 Apache、php、nagios、nagios-plugins
 Nagios-Linux  CentOS release 6.5(Final)192.168.70.83nagios-plugins、nrpe
Nagios-WindowsWindows 7 x64 192.168.70.60  NSClient++

Server 安装了 nagios 软件,对监控的数据做处理,并且提供 web 界面查看和管理。当然也可以对本机自身的信息进行监控。

Client 安装了 NRPE 等客户端,根据监控机的请求执行监控,然后将结果回传给监控机。

防火墙已关闭 /iptables: Firewall is not running.

SELINUX=disabled

四、实验目标

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

五、Nagios 服务端安装

5.1 基础支持套件:gcc glibc glibc-common gd gd-devel xinetd openssl-devel

# rpm -q gcc glibc glibc-common gd gd-devel xinetd openssl-devel

如果系统中没有这些套件,使用 yum 安装

#  yum -y install gcc gd gd-devel xinetd openssl-devel

5.2 创建 nagios 用户和用户组
# useradd  nagios
# mkdir /usr/local/nagios
# chown -R nagios.nagios /usr/local/nagios

查看 nagios 目录的权限

# ll -d /usr/local/nagios/

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

5.3 编译安装 Nagios

# wget http://sourceforge.net/projects/nagios/files/nagios-3.x/nagios-3.5.0/nagios-3.5.0.tar.gz/download?use_mirror=cznic

# tar xzvf nagios-3.5.0.tar.gz

# cd nagios

# ./configure –prefix=/usr/local/nagios

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

#make all

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

#make install

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

#make install-init

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

#make install-commandmode

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

# make install-config

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

# chkconfig –add nagios

# chkconfig –level 35 nagios on

# chkconfig –list nagios

Linux 下 Nagios+PNP4Nagios 的安装与配置

 

5.4 验证程序是否被正确安装

切换目录到安装路径(这里是 /usr/local/nagios),看是否存在 etc、bin、sbin、share、var 这五个目录,如果存在则可以表明程序被正确的安装到系统了。Nagios 各个目录用途说明如下:

bin

 Nagios 可执行程序所在目录

etc

Nagios 配置文件所在目录

sbin

 Nagios CGI 文件所在目录,也就是执行外部命令所需文件所在的目录

 share

 Nagios 网页文件所在目录

 libexec

 Nagios 外部插件所在目录

 var

 Nagios 日志文件、lock 等文件所在的目录

 var/archives

 Nagios 日志自动归档目录

 var/rw

 用来存放外部命令文件的目录

5.5 安装 Nagios 插件

#wget http://nagios-plugins.org/download/nagios-plugins-2.0.1.tar.gz

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

# tar xzvf nagios-plugins-2.0.1.tar.gz

# cd nagios-plugins-2.0.1

# ./configure –prefix=/usr/local/nagios

Linux 下 Nagios+PNP4Nagios 的安装与配置

# make && make install

Linux 下 Nagios+PNP4Nagios 的安装与配置

 

5.6 安装与配置 Apache 和 Php

Apache 和 Php 不是安装 nagios 所必须的,但是 nagios 提供了 web 监控界面,通过 web 监控界面可以清晰的看到被监控主机、资源的运行状态,因此,安装一个 web 服务是很必要的。
需要注意的是,nagios 在 nagios3.1.x 版本以后,配置 web 监控界面时需要 php 的支持。这里我们下载的 nagios 版本为 nagios-3.5.0,因此在编译安装完成 apache 后,还需要编译 php 模块,这里选取的 php 版本为 php5.4.10。安装 apache 之前,先卸载 CentOS 自带的 apache:

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

a. 安装 Apache

# mkdir /usr/local/apache2

# wget http://archive.apache.org/dist/httpd/httpd-2.2.23.tar.gz

# tar zxvf httpd-2.2.23.tar.gz

# cd httpd-2.2.23

# ./configure –prefix=/usr/local/apache2

# make && make install
 

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

b. 安装 Php

# mkdir /usr/local/php

# wget http://cn2.php.net/distributions/php-5.4.10.tar.gz

# tar zxvf php-5.4.10.tar.gz

# cd php-5.4.10

# ./configure –prefix=/usr/local/php –with-apxs2=/usr/local/apache2/bin/apxs

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

编译提示错误,只要安装 libxml2 和 libxml2-devel 包就可以了:

Linux 下 Nagios+PNP4Nagios 的安装与配置

然后从新编译:

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

# make && make install

Linux 下 Nagios+PNP4Nagios 的安装与配置

然后将 php.ini 拷贝到 lib 目录下:

Linux 下 Nagios+PNP4Nagios 的安装与配置

c. 配置 apache
找到 apache 的配置文件 /usr/local/apache2/conf/httpd.conf

找到:

User daemon
Group daemon

修改为

User nagios
Group nagios

然后找到
DirectoryIndex index.html

修改为 

DirectoryIndex index.html index.php

接着增加如下内容:

AddType application/x-httpd-php .php

为了安全起见,一般情况下要让 nagios 的 web 监控页面必须经过授权才能访问,这需要增加验证配置,即在 httpd.conf 文件最后添加如下信息:

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

   

检测一下配置文件是否出错:

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

根据上面内容,提示 domain name 错误,可以忽略不管,也可以直接找到:

#ServerName www.example.com:80
改成:
ServerName localhost:80

重新检测配置文件:

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

d. 创建 apache 目录验证文件

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

# /usr/local/apache2/bin/htpasswd -c /usr/local/nagios/etc/htpasswd pzh

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

 e. 启动 apache 服务

# /usr/local/apache2/bin/apachectl start

到这里 nagios 的安装也就基本完成了,你可以通过 web 来访问了。

Linux 下 Nagios+PNP4Nagios 的安装与配置

Linux 下 Nagios+PNP4Nagios 的安装与配置

 

六、配置 Nagios

Nagios 主要用于监控一台或者多台本地主机及远程的各种信息,包括本机资源及对外的服务等。默认的 Nagios 配置没有任何监控内容,仅是一些模板文件。若要让 Nagios 提供服务,就必须修改配置文件,增加要监控的主机和服务,下面将详细介绍。

6.1 默认配置文件介绍

Nagios 安装完毕后,默认的配置文件在 /usr/local/nagios/etc 目录下,我们查看下 Nagios 目录下的文件。

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

每个文件或目录含义如下表所示:

文件名或目录名 用途
cgi.cfg 控制 CGI 访问的配置文件
nagios.cfgNagios 主配置文件
resource.cfg 变量定义文件,又称为资源文件,在些文件中定义变量,以便由其他配置文件引用,如 $USER1$
objectsobjects 是一个目录,在此目录下有很多配置文件模板,用于定义 Nagios 对象
objects/commands.cfg 命令定义配置文件,其中定义的命令可以被其他配置文件引用
objects/contacts.cfg 定义联系人和联系人组的配置文件
objects/localhost.cfg 定义监控本地主机的配置文件
objects/printer.cfg 定义监控打印机的一个配置文件模板,默认没有启用此文件
objects/switch.cfg 定义监控路由器的一个配置文件模板,默认没有启用此文件
objects/templates.cfg 定义主机和服务的一个模板配置文件,可以在其他配置文件中引用
objects/timeperiods.cfg 定义 Nagios 监控时间段的配置文件
objects/windows.cfg 监控 Windows 主机的一个配置文件模板,默认没有启用此文件

————————————– 分割线 ————————————–

在 Ubuntu 下配置 Mrtg 监控 Nginx 和服务器系统资源 http://www.linuxidc.com/Linux/2013-08/88417.htm

使用 snmp+Mrtg 监控 Linux 系统 http://www.linuxidc.com/Linux/2012-11/73561.htm

Mrtg 服务器搭建(监控网络流量)http://www.linuxidc.com/Linux/2012-07/64315.htm

网络监控器 Nagios 全攻略 http://www.linuxidc.com/Linux/2013-07/87067.htm

Nagios 搭建与配置详解 http://www.linuxidc.com/Linux/2013-05/84848.htm

Nginx 环境下构建 Nagios 监控平台 http://www.linuxidc.com/Linux/2011-07/38112.htm

在 RHEL5.3 上配置基本的 Nagios 系统 (使用 Nagios-3.1.2) http://www.linuxidc.com/Linux/2011-07/38129.htm

CentOS 5.5+Nginx+Nagios 监控端和被控端安装配置指南 http://www.linuxidc.com/Linux/2011-09/44018.htm

Ubuntu 13.10 Server 安装 Nagios Core 网络监控运用 http://www.linuxidc.com/Linux/2013-11/93047.htm

————————————– 分割线 ————————————–

 

6.2 配置文件之间的关系

在 nagios 的配置过程中涉及到的几个定义有:主机、主机组,服务、服务组,联系人、联系人组,监控时间,监控命令等,从这些定义可以看出,nagios 各个配置文件之间是互为关联,彼此引用的。

成功配置出一台 nagios 监控系统,必须要弄清楚每个配置文件之间依赖与被依赖的关系,最重要的有四点:

第一:定义监控哪些主机、主机组、服务和服务组;
第二:定义这个监控要用什么命令实现;
第三:定义监控的时间段;
第四:定义主机或服务出现问题时要通知的联系人和联系人组。

6.3 配置 Nagios

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

  • 创建 hosts.cfg 文件来定义主机和主机组
  • 创建 services.cfg 文件来定义服务
  • 用默认的 contacts.cfg 文件来定义联系人和联系人组
  • 用默认的 commands.cfg 文件来定义命令
  • 用默认的 timeperiods.cfg 来定义监控时间段
  • 用默认的 templates.cfg 文件作为资源引用文件

a. templates.cfg 文件

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

下面详细介绍下 templates.cfg 文件中每个参数的含义:

define contact{
        name                            generic-contact    ; 联系人名称

        service_notification_period    24×7              ; 当服务出现异常时,发送通知的时间段,这个时间段 ”24×7″ 在 timeperiods.cfg 文件中定义

        host_notification_period        24×7              ; 当主机出现异常时,发送通知的时间段,这个时间段 ”24×7″ 在 timeperiods.cfg 文件中定义

        service_notification_options    w,u,c,r            ; 这个定义的是“通知可以被发出的情况”。w 即 warn,表示警告状态,u 即 unknown,表示不明状态,c 即 criticle,表示紧急状态,r 即 recover,表示恢复状态 ; 也就是在服务出现警告状态、未知状态、紧急状态和重新恢复状态时都发送通知给使用者。

        host_notification_options      d,u,r                  ; 定义主机在什么状态下需要发送通知给使用者,d 即 down,表示宕机状态;u 即 unreachable,表示不可到达状态,r 即 recovery,表示重新恢复状态。

        service_notification_commands  notify-service-by-email ; 服务故障时,发送通知的方式,可以是邮件和短信,这里发送的方式是邮件; 其中“notify-service-by-email”在 commands.cfg 文件中定义。

        host_notification_commands      notify-host-by-email    ; 主机故障时,发送通知的方式,可以是邮件和短信,这里发送的方式是邮件; 其中“notify-host-by-email”在 commands.cfg 文件中定义。

        register                        0                    ; DONT REGISTER THIS DEFINITION – ITS NOT A REAL CONTACT, JUST A TEMPLATE!
        }

define host{
        name                            generic-host    ; 主机名称,这里的主机名,并不是直接对应到真正机器的主机名 ; 乃是对应到在主机配置文件里所设定的主机名。
        notifications_enabled          1              ; Host notifications are enabled
        event_handler_enabled          1              ; Host event handler is enabled
        flap_detection_enabled          1              ; Flap detection is enabled
        failure_prediction_enabled      1              ; Failure prediction is enabled
        process_perf_data              1              ; 其值可以为 0 或 1,其作用为是否启用 Nagios 的数据输出功能; 如果将此项赋值为 1,那么 Nagios 就会将收集的数据写入某个文件中,以备提取。
        retain_status_information      1              ; Retain status information across program restarts
        retain_nonstatus_information    1              ; Retain non-status information across program restarts
        notification_period            24×7            ; 指定“发送通知”的时间段,也就是可以在什么时候发送通知给使用者。
        register                        0              ; DONT REGISTER THIS DEFINITION – ITS NOT A REAL HOST, JUST A TEMPLATE!
        }

define host{
        name                            linux-server    ; 主机名称
        use                            generic-host    ; use 表示引用,也就是将主机 generic-host 的所有属性引用到 linux-server 中来; 在 nagios 配置中,很多情况下会用到引用。
        check_period                    24×7            ; 这里的 check_period 告诉 nagios 检查主机的时间段
        check_interval                  5              ; nagios 对主机的检查时间间隔,这里是 5 分钟。
        retry_interval                  1              ; 重试检查时间间隔,单位是分钟。
        max_check_attempts              10              ; nagios 对主机的最大检查次数,也就是 nagios 在检查发现某主机异常时,并不马上判断为异常状况  ; 而是多试几次,因为有可能只是一时网络太拥挤,或是一些其他原因,让主机受到了一点影响; 这里的 10 就是最多试 10 次的意思。
        check_command                  check-host-alive ; 指定检查主机状态的命令,其中“check-host-alive”在 commands.cfg 文件中定义。
        notification_period            24×7            ; 主机故障时,发送通知的时间范围,其中“workhours”在 timeperiods.cfg 中进行了定义; 下面会陆续讲到。
        notification_interval          10              ; 在主机出现异常后,故障一直没有解决,nagios 再次对使用者发出通知的时间。单位是分钟; 如果你觉得,所有的事件只需要一次通知就够了,可以把这里的选项设为 0
        notification_options            d,u,r          ; 定义主机在什么状态下可以发送通知给使用者,d 即 down,表示宕机状态 ; u 即 unreachable,表示不可到达状态; r 即 recovery,表示重新恢复状态。
        contact_groups                  admins            ; 指定联系人组,这个“admins”在 contacts.cfg 文件中定义。
        register                        0              ; DONT REGISTER THIS DEFINITION – ITS NOT A REAL HOST, JUST A TEMPLATE!
        }

define host{
        name                    windows-server  ; The name of this host template
        use                    generic-host    ; Inherit default values from the generic-host template
        check_period            24×7            ; By default, Windows servers are monitored round the clock
        check_interval          5              ; Actively check the server every 5 minutes
        retry_interval          1              ; Schedule host check retries at 1 minute intervals
        max_check_attempts      10              ; Check each server 10 times (max)
        check_command          check-host-alive        ; Default command to check if servers are “alive”
        notification_period    24×7            ; Send notification out at any time – day or night
        notification_interval  10              ; Resend notifications every 30 minutes
        notification_options    d,r            ; Only send notifications for specific host states
        contact_groups          ts              ; Notifications get sent to the admins by default
        hostgroups              windows-servers ; Host groups that Windows servers should be a member of
        register                0              ; DONT REGISTER THIS – ITS JUST A TEMPLATE
        }

define service{
        name                            generic-service        ; 定义一个服务名称
        active_checks_enabled          1                      ; Active service checks are enabled
        passive_checks_enabled          1                      ; Passive service checks are enabled/accepted
        parallelize_check              1                      ; Active service checks should be parallelized;
                                                                ; (disabling this can lead to major performance problems)
        obsess_over_service            1                      ; We should obsess over this service (if necessary)
        check_freshness                0                      ; Default is to NOT check service ‘freshness’
        notifications_enabled          1                      ; Service notifications are enabled
        event_handler_enabled          1                      ; Service event handler is enabled
        flap_detection_enabled          1                      ; Flap detection is enabled
        failure_prediction_enabled      1                      ; Failure prediction is enabled
        process_perf_data              1                      ; Process performance data
        retain_status_information      1                      ; Retain status information across program restarts
        retain_nonstatus_information    1                      ; Retain non-status information across program restarts
        is_volatile                    0                      ; The service is not volatile
        check_period                    24×7            ; 这里的 check_period 告诉 nagios 检查服务的时间段。
        max_check_attempts              3                ; nagios 对服务的最大检查次数。
        normal_check_interval          5                ; 此选项是用来设置服务检查时间间隔,也就是说,nagios 这一次检查和下一次检查之间所隔的时间 ; 这里是 5 分钟。
        retry_check_interval            2                ; 重试检查时间间隔,单位是分钟。
        contact_groups                  ts          ; 指定联系人组
        notification_options            w,u,c,r          ; 这个定义的是“通知可以被发出的情况”。w 即 warn,表示警告状态 ; u 即 unknown,表示不明 ; c 即 criticle,表示紧急状态,r 即 recover,表示恢复状态; 也就是在服务出现警告状态、未知状态、紧急状态和重新恢复后都发送通知给使用者。
        notification_interval          10              ; Re-notify about service problems every hour
        notification_period            24×7            ; 指定“发送通知”的时间段,也就是可以在什么时候发送通知给使用者。
        register                        0                ; DONT REGISTER THIS DEFINITION – ITS NOT A REAL SERVICE, JUST A TEMPLATE!
        }

define service{
        name                            local-service          ; The name of this service template
        use                            generic-service        ; Inherit default values from the generic-service definition
        max_check_attempts              4            ; Re-check the service up to 4 times in order to determine its final (hard) state
        normal_check_interval          5            ; Check the service every 5 minutes under normal conditions
        retry_check_interval            1            ; Re-check the service every minute until a hard state can be determined
        register                        0            ; DONT REGISTER THIS DEFINITION – ITS NOT A REAL SERVICE, JUST A TEMPLATE!
        }

b. resource.cfg 文件

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

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

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

c. commands.cfg 文件

此文件默认是存在的,无需修改即可使用,当然如果有新的命令需要加入时,在此文件进行添加即可。

 

#notify-host-by-email 命令的定义
define command{
        command_name    notify-host-by-email            #命令名称,即定义了一个主机异常时发送邮件的命令。
        command_line    /usr/bin/printf “%b” “***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n” | /bin/mail -s “** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **” $CONTACTEMAIL$                                    #命令具体的执行方式。
        }

#notify-service-by-email 命令的定义
define command{
        command_name    notify-service-by-email          #命令名称,即定义了一个服务异常时发送邮件的命令
        command_line    /usr/bin/printf “%b” “***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n” | /bin/mail -s “** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **” $CONTACTEMAIL$
        }

#check-host-alive 命令的定义
define command{
        command_name    check-host-alive                #命令名称,用来检测主机状态。
        command_line    $USER1$/check_ping -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 5           
                        # 这里的变量 $USER1$ 在 resource.cfg 文件中进行定义,即 $USER1$=/usr/local/nagios/libexec;
                        # 那么 check_ping 的完整路径为 /usr/local/nagios/libexec/check_ping;
                        #“-w 3000.0,80%”中“-w”说明后面的一对值对应的是“WARNING”状态,“80%”是其临界值。
                        #“-c 5000.0,100%”中“-c”说明后面的一对值对应的是“CRITICAL”,“100%”是其临界值。
                        #“-p 1”说明每次探测发送一个包。
        }

define command{
        command_name    check_local_disk
        command_line    $USER1$/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$            #$ARG1$ 是指在调用这个命令的时候,命令后面的第一个参数。
        }

define command{
        command_name    check_local_load
        command_line    $USER1$/check_load -w $ARG1$ -c $ARG2$
        }

define command{
        command_name    check_local_procs
        command_line    $USER1$/check_procs -w $ARG1$ -c $ARG2$ -s $ARG3$
        }

define command{
        command_name    check_local_users
        command_line    $USER1$/check_users -w $ARG1$ -c $ARG2$
        }

define command{
        command_name    check_local_swap
        command_line    $USER1$/check_swap -w $ARG1$ -c $ARG2$
        }

define command{
        command_name    check_ftp
        command_line    $USER1$/check_ftp -H $HOSTADDRESS$ $ARG1$
        }

define command{
        command_name    check_http
        command_line    $USER1$/check_http -I $HOSTADDRESS$ $ARG1$
        }

define command{
        command_name    check_ssh
        command_line    $USER1$/check_ssh $ARG1$ $HOSTADDRESS$
        }

define command{
        command_name    check_ping
        command_line    $USER1$/check_ping -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$ -p 5
        }

define command{
        command_name    check_nt
        command_line    $USER1$/check_nt -H $HOSTADDRESS$ -p 12489 -v $ARG1$ $ARG2$
        }

 

d. hosts.cfg 文件

此文件默认不存在,需要手动创建,hosts.cfg 主要用来指定被监控的主机地址以及相关属性信息,根据实验目标配置如下:

define host{
        use                    linux-server          #引用主机 linux-server 的属性信息,linux-server 主机在 templates.cfg 文件中进行了定义。
        host_name              Nagios-Linux          #主机名
        alias                  Nagios-Linux          #主机别名
        address                192.168.70.70        #被监控的主机地址,这个地址可以是 ip,也可以是域名。
        } 


# 定义一个主机组 
define hostgroup{
        hostgroup_name          bsmart-servers        #主机组名称,可以随意指定。
        alias                  bsmart servers        #主机组别名
        members                Nagios-Linux          #主机组成员,其中“Nagios-Linux”就是上面定义的主机。
        }

注意: 在 /usr/local/nagios/etc/objects 下默认有 localhost.cfg 和 windows.cfg 这两个配置文件,localhost.cfg 文件是定义监控主机本身的,windows.cfg 文件是定义 windows 主机的,其中包括了对 host 和相关 services 的定义。所以在本次实验中,将直接在 localhost.cfg 中定义监控主机(Nagios-Server),在 windows.cfg 中定义 windows 主机(Nagios-Windows)。根据自己的需要修改其中的相关配置,详细如下:

localhost.cfg

define host{
        use                    linux-server            ; Name of host template to use
                                                        ; This host definition will inherit all variables that are defined
                                                        ; in (or inherited by) the linux-server host template definition.
        host_name              Nagios-Server
        alias                  Nagios-Server
        address                127.0.0.1
        }
define hostgroup{
        hostgroup_name  linux-servers ; The name of the hostgroup
        alias          Linux Servers ; Long name of the group
        members        Nagios-Server ; Comma separated list of hosts that belong to this group
        }
define service{
        use                            local-service        ; Name of service template to use
        host_name                      Nagios-Server
        service_description            PING
        check_command                  check_ping!100.0,20%!500.0,60%
        }
define service{
        use                            local-service        ; Name of service template to use
        host_name                      Nagios-Server
        service_description            Root Partition
        check_command                  check_local_disk!20%!10%!/
        }
define service{
        use                            local-service        ; Name of service template to use
        host_name                      Nagios-Server
        service_description            Current Users
        check_command                  check_local_users!20!50
        }
define service{
        use                            local-service        ; Name of service template to use
        host_name                      Nagios-Server
        service_description            Total Processes
        check_command                  check_local_procs!250!400!RSZDT
        }
define service{
        use                            local-service        ; Name of service template to use
        host_name                      Nagios-Server
        service_description            Current Load
        check_command                  check_local_load!5.0,4.0,3.0!10.0,6.0,4.0
        }
define service{
        use                            local-service        ; Name of service template to use
        host_name                      Nagios-Server
        service_description            Swap Usage
        check_command                  check_local_swap!20!10
        }
define service{
        use                            local-service        ; Name of service template to use
        host_name                      Nagios-Server
        service_description            SSH
        check_command                  check_ssh
        notifications_enabled          0
        }
define service{
        use                            local-service        ; Name of service template to use
        host_name                      Nagios-Server
        service_description            HTTP
        check_command                  check_http
        notifications_enabled          0
        }

windows.cfg

define host{
        use            windows-server  ; Inherit default values from a template
        host_name      Nagios-Windows  ; The name we’re giving to this host
        alias          My Windows Server      ; A longer name associated with the host
        address        192.168.70.60; IP address of the host
        }
define hostgroup{
        hostgroup_name  windows-servers ; The name of the hostgroup
        alias          Windows Servers ; Long name of the group
        }
define service{
        use                    generic-service
        host_name              Nagios-Windows
        service_description    NSClient++ Version
        check_command          check_nt!CLIENTVERSION
        }
define service{
        use                    generic-service
        host_name              Nagios-Windows
        service_description    Uptime
        check_command          check_nt!UPTIME
        }
define service{
        use                    generic-service
        host_name              Nagios-Windows
        service_description    CPU Load
        check_command          check_nt!CPULOAD!-l 5,80,90
        }
define service{
        use                    generic-service
        host_name              Nagios-Windows
        service_description    Memory Usage
        check_command          check_nt!MEMUSE!-w 80 -c 90
        }
define service{
        use                    generic-service
        host_name              Nagios-Windows
        service_description    C:\ Drive Space
        check_command          check_nt!USEDDISKSPACE!-l c -w 80 -c 90
        }
define service{
        use                    generic-service
        host_name              Nagios-Windows
        service_description    W3SVC
        check_command          check_nt!SERVICESTATE!-d SHOWALL -l W3SVC
        }
define service{
        use                    generic-service
        host_name              Nagios-Windows
        service_description    Explorer
        check_command          check_nt!PROCSTATE!-d SHOWALL -l Explorer.exe
        }

e. services.cfg 文件

此文件默认也不存在,需要手动创建,services.cfg 文件主要用于定义监控的服务和主机资源,例如监控 http 服务、ftp 服务、主机磁盘空间、主机系统负载等等。Nagios-Server 和 Nagios-Windows 相关服务已在相应的配置文件中定义,所以这里只需要定义 Nagios-Linux 相关服务即可,这里只定义一个检测是否存活的服务来验证配置文件的正确性,其他服务的定义将在后面讲到。

define service{
        use                    local-service          #引用 local-service 服务的属性值,local-service 在 templates.cfg 文件中进行了定义。
        host_name              Nagios-Linux          #指定要监控哪个主机上的服务,“Nagios-Server”在 hosts.cfg 文件中进行了定义。
        service_description    check-host-alive      #对监控服务内容的描述,以供维护人员参考。
        check_command          check-host-alive      #指定检查的命令。
        }
 

f. contacts.cfg 文件

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

define contact{
        contact_name                   pzh              #联系人的名称, 这个地方不要有空格
        use                            generic-contact  #引用 generic-contact 的属性信息,其中“generic-contact”在 templates.cfg 文件中进行定义
        alias                          Nagios Admin
        email                           
zihepeng@126.com   

        }

define contactgroup{
        contactgroup_name       admins                              #联系人组的名称, 同样不能空格
        alias                   Nagios Administrators              #联系人组描述
        members                 pzh                          #联系人组成员,其中“pzh”就是上面定义的联系人,如果有多个联系人则以逗号相隔
        }

g. timeperiods.cfg 文件

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

# 下面是定义一个名为 24×7 的时间段,即监控所有时间段 
define timeperiod{
        timeperiod_name 24×7      #时间段的名称, 这个地方不要有空格
        alias          24 Hours A Day, 7 Days A Week 
        sunday          00:00-24:00 
        monday          00:00-24:00 
        tuesday        00:00-24:00 
        wednesday      00:00-24:00 
        thursday        00:00-24:00 
        friday          00:00-24:00 
        saturday        00:00-24:00 
        } 
# 下面是定义一个名为 workhours 的时间段,即工作时间段。
define timeperiod{
        timeperiod_name workhours 
        alias          Normal Work Hours 
        monday          09:00-17:00 
        tuesday        09:00-17:00 
        wednesday      09:00-17:00 
        thursday        09:00-17:00 
        friday          09:00-17:00 
        }

h. cgi.cfg 文件

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

default_user_name=pzh
authorized_for_system_information=nagiosadmin,pzh
authorized_for_configuration_information=nagiosadmin,pzh 
authorized_for_system_commands=pzh
authorized_for_all_services=nagiosadmin,pzh 
authorized_for_all_hosts=nagiosadmin,pzh
authorized_for_all_service_commands=nagiosadmin,pzh
authorized_for_all_host_commands=nagiosadmin,pzh

i. nagios.cfg 文件

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

log_file=/usr/local/nagios/var/nagios.log                  # 定义 nagios 日志文件的路径
cfg_file=/usr/local/nagios/etc/objects/commands.cfg        #“cfg_file”变量用来引用对象配置文件,如果有更多的对象配置文件,在这里依次添加即可。
cfg_file=/usr/local/nagios/etc/objects/contacts.cfg
cfg_file=/usr/local/nagios/etc/objects/hosts.cfg
cfg_file=/usr/local/nagios/etc/objects/services.cfg
cfg_file=/usr/local/nagios/etc/objects/timeperiods.cfg
cfg_file=/usr/local/nagios/etc/objects/templates.cfg
cfg_file=/usr/local/nagios/etc/objects/localhost.cfg      # 本机配置文件
cfg_file=/usr/local/nagios/etc/objects/windows.cfg        # windows 主机配置文件
object_cache_file=/usr/local/nagios/var/objects.cache      # 该变量用于指定一个“所有对象配置文件”的副本文件,或者叫对象缓冲文件
precached_object_file=/usr/local/nagios/var/objects.precache
resource_file=/usr/local/nagios/etc/resource.cfg          # 该变量用于指定 nagios 资源文件的路径,可以在 nagios.cfg 中定义多个资源文件。
status_file=/usr/local/nagios/var/status.dat              # 该变量用于定义一个状态文件,此文件用于保存 nagios 的当前状态、注释和宕机信息等。
status_update_interval=10                                  # 该变量用于定义状态文件(即 status.dat)的更新时间间隔,单位是秒,最小更新间隔是 1 秒。
nagios_user=nagios                                        # 该变量指定了 Nagios 进程使用哪个用户运行。
nagios_group=nagios                                        # 该变量用于指定 Nagios 使用哪个用户组运行。
check_external_commands=1                                  # 该变量用于设置是否允许 nagios 在 web 监控界面运行 cgi 命令;
                                                          # 也就是是否允许 nagios 在 web 界面下执行重启 nagios、停止主机 / 服务检查等操作;
                                                        #“1”为运行,“0”为不允许。
command_check_interval=10s                                # 该变量用于设置 nagios 对外部命令检测的时间间隔,如果指定了一个数字加一个 ”s”(如 10s);
                                                          # 那么外部检测命令的间隔是这个数值以秒为单位的时间间隔;
                                                          # 如果没有用 ”s”,那么外部检测命令的间隔是以这个数值的“时间单位”的时间间隔。
interval_length=60                                        # 该变量指定了 nagios 的时间单位,默认值是 60 秒,也就是 1 分钟 # 即在 nagios 配置中所有的时间单位都是分钟。

6.4 验证 Nagios 配置文件的正确性


Nagios 在验证配置文件方面做的非常到位,只需通过一个命令即可完成:

# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

Linux 下 Nagios+PNP4Nagios 的安装与配置

Nagios 提供的这个验证功能非常有用,在错误信息中通常会打印出错误的配置文件以及文件中的哪一行,这使得 nagios 的配置变得非常容易,报警信息通常是可以忽略的,因为一般那些只是建议性的。

看到上面这些信息就说明没问题了,然后启动 Nagios 服务。

七、Nagios 的启动与停止

7.1 启动 Nagios

a. 通过初始化脚本启动 nagios

# /etc/init.d/nagios start
or
# service nagios start

b. 手工方式启动 nagios

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

# /usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg

7.2 重启 Nagios

当修改了配置文件让其生效时,需要重启 / 重载 Nagios 服务。

a. 通过初始化脚本来重启 nagios

# /etc/init.d/nagios reload
or
# /etc/init.d/nagios restart
or
# service nagios restart

b. 通过 web 监控页重启 nagios

可以通过 web 监控页的 “Process Info” -> “Restart the Nagios process” 来重启 nagios

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

c. 手工方式平滑重启

# kill -HUP

7.3 停止 Nagios

a. 通过初始化脚本关闭 nagios 服务

# /etc/init.d/nagios stop
or
# service nagios stop

b. 通过 web 监控页停止 nagios

可以通过 web 监控页的 “Process Info” -> “Shutdown the Nagios process” 来停止 nagios

Linux 下 Nagios+PNP4Nagios 的安装与配置

c. 手工方式停止 Nagios

# kill

八、查看初步配置情况

8.1 启动完成之后,登录 Nagios Web 监控页 http://192.168.70.82/nagios/ 查看相关信息。

8.2 点击左面的 Current Status -> Hosts 可以看到所定义的三台主机已经全部 UP 了。

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

8.3 点击 Current Status -> Services 查看服务监控情况。

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

看到 Nagios-Linux 和 Nagios-Server 的服务状态已经 OK 了,但是 Nagios-Windows 的服务状态为 CRITICAL,Status Information 提示 Connection refused。因为 Nagios-Windows 上还未安装插件,内部服务还无法查看,所以出现这种情况。将在下面具体讲解。

 

更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2016-09/135534p2.htm

 

九、利用 NRPE 监控远程 Linux 上的“本地信息”

上面已经对远程 Linux 主机是否存活做了监控,而判断远程机器是否存活,我们可以使用 ping 工具对其监测。还有一些远程主机服务,例如 ftp、ssh、http,都是对外开放的服务,即使不用 Nagios,我们也可以试的出来,随便找一台机器看能不能访问这些服务就行了。但是对于像磁盘容量,cpu 负载这样的“本地信息”,Nagios 只能监测自己所在的主机,而对其他的机器则显得有点无能为力。毕竟没得到被控主机的适当权限是不可能得到这些信息的。为了解决这个问题,nagios 有这样一个附加组件 –“NRPE”,用它就可以完成对 Linux 类型主机 ” 本地信息”的监控。

9.1 NRPE 工作原理


Linux 下 Nagios+PNP4Nagios 的安装与配置

NRPE 总共由两部分组成:
•check_nrpe 插件,位于监控主机上
•NRPE daemon,运行在远程的 Linux 主机上 (通常就是被监控机)

按照上图,整个的监控过程如下:

当 Nagios 需要监控某个远程 Linux 主机的服务或者资源情况时:
1.Nagios 会运行 check_nrpe 这个插件,告诉它要检查什么;
2.check_nrpe 插件会连接到远程的 NRPE daemon,所用的方式是 SSL;
3.NRPE daemon 会运行相应的 Nagios 插件来执行检查;
4.NRPE daemon 将检查的结果返回给 check_nrpe 插件,插件将其递交给 nagios 做处理。

注意:NRPE daemon 需要 Nagios 插件安装在远程的 Linux 主机上,否则,daemon 不能做任何的监控。

9.2 在被监控机(Nagios-Linux)上

a. 增加用户 & 设定密码

# useradd nagios

# passwd nagios

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

b. 安装 Nagios 插件

# mkdir /usr/local/nagios

# tar zxvf nagios-plugins-2.0.1.tar.gz
# cd nagios-plugins-2.0.1
# ./configure –prefix=/usr/local/nagios
# make && make install

这一步完成后会在 /usr/local/nagios/ 下生成三个目录 include、libexec 和 share。

Linux 下 Nagios+PNP4Nagios 的安装与配置

修改目录权限

# chown nagios.nagios /usr/local/nagios
# chown -R nagios.nagios /usr/local/nagios/libexec

c. 安装 NRPE

# wgethttp://zh.sourceforge.jp/projects/sfnet_nagios/downloads/nrpe-2.x/nrpe-2.8.1/nrpe-2.8.1.tar.gz

# tar zxvf nrpe-2.8.1.tar.gz
# cd nrpe-2.8.1
# ./configure

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

编译上提示没有 SSL 库,我们只需要安装 openssl-devel 包就可以解决,使用 yum -y install openssl-devel 命令:

 Linux 下 Nagios+PNP4Nagios 的安装与配置

然后重新进行编译:

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

# make all

接下来安装 NPRE 插件,daemon 和示例配置文件。

c.1 安装 check_nrpe 这个插件

# make install-plugin

监控机需要安装 check_nrpe 这个插件,被监控机并不需要,我们在这里安装它只是为了测试目的。

c.2 安装 deamon

# make install-daemon

c.3 安装配置文件

# make install-daemon-config

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

现在再查看 nagios 目录就会发现有 5 个目录了

Linux 下 Nagios+PNP4Nagios 的安装与配置

按照安装文档的说明,是将 NRPE deamon 作为 xinetd 下的一个服务运行的。在这样的情况下 xinetd 就必须要先安装好,不过一般系统已经默认安装了。

d. 安装 xinted 脚本

# make install-xinetd
Linux 下 Nagios+PNP4Nagios 的安装与配置

可以看到创建了这个文件 /etc/xinetd.d/nrpe。

编辑这个脚本:
Linux 下 Nagios+PNP4Nagios 的安装与配置
在 only_from 后增加监控主机的 IP 地址。

编辑 /etc/services 文件,增加 NRPE 服务

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

重启 xinted 服务

# service xinetd restart
查看 NRPE 是否已经启动

Linux 下 Nagios+PNP4Nagios 的安装与配置
可以看到 5666 端口已经在监听了。

e. 测试 NRPE 是否则正常工作

使用上面在被监控机上安装的 check_nrpe 这个插件测试 NRPE 是否工作正常。

# /usr/local/nagios/libexec/check_nrpe -H localhost

会返回当前 NRPE 的版本
Linux 下 Nagios+PNP4Nagios 的安装与配置
也就是在本地用 check_nrpe 连接 nrpe daemon 是正常的。

注:为了后面工作的顺利进行,注意本地防火墙要打开 5666 能让外部的监控机访问。

f. check_nrpe 命令用法

查看 check_nrpe 命令用法

# /usr/local/nagios/libexec/check_nrpe –h

Linux 下 Nagios+PNP4Nagios 的安装与配置
可以看到用法是:

check_nrpe –H 被监控的主机 -c 要执行的监控命令

注意:-c 后面接的监控命令必须是 nrpe.cfg 文件中定义的。也就是 NRPE daemon 只运行 nrpe.cfg 中所定义的命令。

g. 查看 NRPE 的监控命令

# cd /usr/local/nagios/etc

# cat nrpe.cfg |grep -v “^#”|grep -v “^$”

[root@ntp]# cat /usr/local/nagios/etc/nrpe.cfg |grep -v “^#”|grep -v “^$”
log_facility=daemon
pid_file=/var/run/nrpe.pid
server_port=5666
nrpe_user=nagios
nrpe_group=nagios
allowed_hosts=127.0.0.1
 
dont_blame_nrpe=0
debug=0
command_timeout=60
connection_timeout=300
command[check_users]=/usr/local/nagios/libexec/check_users -w 5 -c 10
command[check_load]=/usr/local/nagios/libexec/check_load -w 15,10,5 -c 30,25,20
command[check_sda1]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/sda1
command[check_zombie_procs]=/usr/local/nagios/libexec/check_procs -w 5 -c 10 -s Z
command[check_total_procs]=/usr/local/nagios/libexec/check_procs -w 150 -c 200

红色部分是命令名,也就是 check_nrpe 的 -c 参数可以接的内容,等号“=”后面是实际执行的插件程序(这与 commands.cfg 中定义命令的形式十分相似,只不过是写在了一行)。也就是说 check_users 就是等号后面 /usr/local/nagios/libexec/check_users -w 5 -c 10 的简称。

我们可以很容易知道上面这 5 行定义的命令分别是检测登陆用户数,cpu 负载,sda1 的容量,僵尸进程,总进程数。各条命令具体的含义见插件用法(执行“插件程序名 –h”)。

由于 -c 后面只能接 nrpe.cfg 中定义的命令,也就是说现在我们只能用上面定义的这五条命令。我们可以在本机实验一下。
Linux 下 Nagios+PNP4Nagios 的安装与配置

9.3 在监控主机(Nagios-Server)上

之前已经将 Nagios 运行起来了,现在要做的事情是:

  • 安装 check_nrpe 插件;
  • 在 commands.cfg 中创建 check_nrpe 的命令定义,因为只有在 commands.cfg 中定义过的命令才能在 services.cfg 中使用;
  • 创建对被监控主机的监控项目;

9.3.1 安装 check_nrpe 插件

# tar zxvf nrpe-2.13.tar.gz
# cd nrpe-2.13
# ./configure
# make all
# make install-plugin

只运行这一步就行了,因为只需要 check_nrpe 插件。

在 Nagios-Linux 上我们已经装好了 nrpe,现在我们测试一下监控机使用 check_nrpe 与被监控机运行的 nrpe daemon 之间的通信。

Linux 下 Nagios+PNP4Nagios 的安装与配置
看到已经正确返回了 NRPE 的版本信息,说明一切正常。

9.3.2 在 commands.cfg 中增加对 check_nrpe 的定义

# vi /usr/local/nagios/etc/objects/commands.cfg

在最后面增加如下内容:
原创:Linux 下 Nagios、pnn4nagios 的安装与配置

意义如下:

# ‘check_nrpe’ command definition
define command{
        command_name    check_nrpe        # 定义命令名称为 check_nrpe, 在 services.cfg 中要使用这个名称.
        command_line    $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$      #这是定义实际运行的插件程序. # 这个命令行的书写要完全按照 check_nrpe 这个命令的用法, 不知道用法的就用 check_nrpe –h 查看.
        }

-c 后面带的 $ARG1$ 参数是传给 nrpe daemon 执行的检测命令,之前说过了它必须是 nrpe.cfg 中所定义的那 5 条命令中的其中一条。在 services.cfg 中使用 check_nrpe 的时候要用“!”带上这个参数。

9.3.3 定义对 Nagios-Linux 主机的监控

下面就可以在 services.cfg 中定义对 Nagios-Linux 主机的监控了。

define service{
        use                    local-service
        host_name              Nagios-Linux
        service_description    Current Load
        check_command          check_nrpe!check_load
        }

define service{
        use                    local-service
        host_name              Nagios-Linux
        service_description    Check Disk sda1
        check_command          check_nrpe!check_sda1
        }

define service{
        use                    local-service
        host_name              Nagios-Linux
        service_description    Total Processes
        check_command          check_nrpe!check_total_procs
        }

define service{
        use                    local-service
        host_name              Nagios-Linux
        service_description    Current Users
        check_command          check_nrpe!check_users
        }

define service{
        use                    local-service
        host_name              Nagios-Linux
        service_description    Check Zombie Procs
        check_command          check_nrpe!check_zombie_procs
        }

还有一个任务是要监控 Nagios-Linux 的 swap 使用情况。但是在 nrpe.cfg 中默认没有定义这个监控功能的命令。怎么办?手动在 nrpe.cfg 中添加,也就是自定义 NRPE 命令。

现在我们要监控 swap 分区,如果空闲空间小于 20% 则为警告状态 -> warning;如果小于 10% 则为严重状态 -> critical。我们可以查得需要使用 check_swap 插件,完整的命令行应该是下面这样。

# /usr/local/nagios/libexec/check_swap -w 20% -c 10%

在被监控机(Nagios-Linux)上增加 check_swap 命令的定义

# vi /usr/local/nagios/etc/nrpe.cfg

增加下面这一行

command[check_swap]=/usr/local/nagios/libexec/check_swap -w 20% -c 10%

我们知道 check_swap 现在就可以作为 check_nrpe 的 -c 的参数使用了

修改了配置文件,当然要重启。

如果你是以独立的 daemon 运行的 nrpe,那么需要手动重启;如果你是在 xinetd 下面运行的,则不需要。

由于本实验中 nrpe 是 xinetd 下运行的,所以不需要重启服务。

在监控机(Nagios-Server)上增加这个 check_swap 监控项目

define service{
        use                    local-service
        host_name              Nagios-Linux
        service_description    Check Swap
        check_command          check_nrpe!check_swap
        }

同理,Nagios-Linux 上我还开启了 http 服务,需要监控一下,按照上面的做法,在被监控机(Nagios-Linux)上增加 check_http 命令的定义

# vi /usr/local/nagios/etc/nrpe.cfg

增加下面这一行

command[check_http]=/usr/local/nagios/libexec/check_http -I 127.0.0.1

在监控机(Nagios-Server)上增加 check_http 监控项目

define service{
        use                    local-service
        host_name              Nagios-Linux
        service_description    HTTP
        check_command          check_nrpe!check_http
        }

所有的配置文件已经修改好了,现在重启 Nagios。

# service nagios restart

9.3.4 查看配置情况

登录 Nagios Web 监控页 http://192.168.70.82/nagios/ 查看相关信息。

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

可以看到,对于 Nagios-Server 和 Nagios-Linux 上的相关服务的监控已经成功了,其中 Nagios-Linux 上的 HTTP 服务没起来,是因为我把 HTTP 服务停止了,还有 Nagios-Windows 上的服务还没有定义,下面讲到。

十、利用 NSClient++ 监控远程 Windows 上的“本地信息”

在 Nagios 的 libexec 下有 check_nt 这个插件,它就是用来检查 windows 机器的服务的。其功能类似于 check_nrpe。不过还需要搭配另外一个软件 NSClient++,它则类似于 NRPE。

NSClient++ 的原理如下图:

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

可以看到 NSClient 与 nrpe 最大的区别就是:
•被监控机上安装有 nrpe,并且还有插件,最终的监控是由这些插件来进行的。当监控主机将监控请求发给 nrpe 后,nrpe 调用插件来完成监控。
•NSClient++ 则不同,被监控机上只安装 NSClient,没有任何的插件。当监控主机将监控请求发给 NSClient++ 后,NSClient 直接完成监控,所有的监控是由 NSClient 完成的。

这也说明了 NSClient++ 的一个很大的问题:不灵活、没有可扩展性。它只能完成自己本身包含的监控操作,不能由一些插件来扩展。好在 NSClient++ 已经做的不错了,基本上可以完全满足我们的监控需求。

10.1 安装 NSClient++

从 http://www.nsclient.org/nscp/downloads 下载 NSCP-0.4.1.105-x64.msi

下载完后双击运行:

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

然后点击 NEXT,然后一直到配置菜单栏,输入允许服务器的 IP 地址,设置客户端密码,启用所有模块:

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

安装完后,在运行里面输入 services.msc 打开“服务”,查看服务是否启动:

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

双击打开,点“登录”标签,在“允许服务与桌面交互”前打勾。

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

在 cmd 里面执行 netstat –an 可以看到已经开始监听 tcp 的 12489 端口了。
这样外部就可以访问了吗?

错!

防火墙也要打开 tcp 的 12489 端口,否则 nagios 检查此服务的时候会报错。

这样被监控机的配置就搞定了,它就等待 nagios 发出某个监控请求,然后它执行请求将监控的结果发回到 nagios 监控主机上。

之前已经在监控主机(Nagios-Server)上对 Windows 主机的监控做了配置,但是 commands.cfg 中默认没有设置密码项,所以要修改一下,增加 ”-s 123456″,如下:

# ‘check_nt’ command definition
define command{
        command_name    check_nt
        command_line    $USER1$/check_nt -H $HOSTADDRESS$ -p 12489 -s 123456 -v $ARG1$ $ARG2$
        }

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

重启服务,现在打开 Nagios Web 监控页便可查看到相关信息了。

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

可以看到 W3SVC 服务没有起来,实际上 W3SVC 服务是在 IIS 上的,所以你只要在客户机上把 IIS 安装上就可以解决了,这里就不做演示。
 

最后我们看看 Nagios Web 整体监控页查看:

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

十一、Nagios 邮件报警的配置

11.1 安装 sendmail 组件

首先要确保 sendmail 相关组件的完整安装,我们可以使用如下的命令来完成 sendmail 的安装:

# yum install -y sendmail*

然后重新启动 sendmail 服务:

# service sendmail restart

然后发送测试邮件,验证 sendmail 的可用性:

# echo “Test” | mail zihepeng@126.com

系统如果默认安装了 mail 命令,且 25 端口是启用的,可以不安装 sendmail.

如果 Nagios 内置邮箱账号发不出去,可以使用自己的邮箱账号发送,编辑文件 /etc/mail.rc 文件,在后面加入:

set from=zihepeng@126.com smtp=smtp.126.com smtp-auth-user=zihepeng@126.com smtp-auth-password=****** smtp-auth=login

11.2 邮件报警的配置

在上面我们已经简单配置过了 /usr/local/nagios/etc/objects/contacts.cfg 文件,Nagios 会将报警邮件发送到配置文件里的 E -mail 地址。

11.3 Nagios 通知

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

十二:Nagios 安装性能图插件 PNP4Nagios
PNP4Nagios 是一个用于显示 Nagios 性能图表的插件,基于 RRDTool 日志分析,并以 Kohana(一个 PHP 开发框架)呈现在 Web 端,可以以 Action Url 的形式集成到 Nagios 中。

12.1.nagios 性能分析图表的作用
    Nagios 对服务或主机监控的是一个瞬时状态,有时候系统管理员如果需要了解主机在一段时间内的性能以及服务的响应状态,并且形成图表时,就需要通过查看日志数据来分析,但是这种方式不但繁琐,而且抽象,不过幸运的是,PNP 可以帮助我们来完成这个工作。

12.2.PNP 的概念与安装环境
    PNP 是一个小巧的开源软件包,它基于 PHP 和 PERL,PNP 可以利用 rrdtool 工具将 Nagios 采集的数据绘制成相关的图表,然后显示主机或者服务在一段时间内的运行状况。
 PNP 官方网站为:http://www.pnp4nagios.org
 如果要安装 PNP,首先需要安装如下环境:
 1:整合后的 apache 何 PHP 环境,需支持 GD\zlib\jpeg(已安装)
 2:安装 rrdtool 工具
 3:安装 perl(已安装)

12.3. 安装 rrdtool 工具

RRDtool 是一个图表生成工具,可以从 http://www.mrtg.org/rrdtool/ 获得信息。
这里下载的版本是 rrdtool-1.4.8.tar.gz,安装过程如下:

# mkdir /usr/local/rrdtool
# tar zxvf rrdtool-1.4.8.tar.gz 
# cd rrdtool-1.4.8
# ./configure –perfix=/usr/local/rrdtool 

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

编译报错提示少了 fix 库文件,我们需要安装 pango* 包即可,执行 yum -y install pango*,然后再编译:

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

# make
# make install

12.4 安装 PNP,这里下载的版本是 pnp4nagios-0.6.21.tar.gz,安装过程如下:
#tar -xvzf pnp4nagios-0.6.21.tar.gz
#cd pnp4nagios-0.6.21
#./configure –with-nagios-user=nagios –with-nagios-group-nagios –with-rrdtool=/usr/local/rrdtool/bin/rrdtool

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

编译提示少了 perl 的 HiRes 模块,我们运行 yum -y install perl-Time-HiRes 命令安装,然后再编译:

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

#make all
#make install
#make install-webconf
#make install-config
#make install-init
Linux 下 Nagios+PNP4Nagios 的安装与配置

12.4.1. 创建配置文件
# cd /usr/local/pnp4nagios/etc
# cp misccommands.cfg-sample  misccommands.cfg
# cp nagios.cfg-sample  nagios.cfg
# cp rra.cfg-sample rra.cfg

Linux 下 Nagios+PNP4Nagios 的安装与配置

#  cd pages
# cp web_traffic.cfg-sample web_traffic.cfg
# cd ../check_commands
# cp check_all_local_disks.cfg-sample  check_all_local_disks.cfg
# cp check_nrpe.cfg-sample  check_nrpe.cfg
# cp check_nwstat.cfg-sample  check_nwstat.cfg

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

12.4.2 重启下 NPCD 服务,NPCD 是 PNP 服务来的,所以修改 pnp 配置文件后,就启动下服务让配置文件生效:

#/etc/init.c/npcd restart

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

12.4.3. 修改 nagios 的配置文件. 打开 performance_data

# cd /usr/local/nagios/etc
# vi nagios.cfg
# 打开注释项:
process_performance_data=1
host_perfdata_command=process-host-perfdata
service_perfdata_command=process-service-perfdata

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

12.4.4. 修改 commands.cfg
# cd /usr/local/nagios/etc/objects
# vi commands.cfg
## 添加
# ‘process-host-perfdata’ command definition
define command{
        command_name    process-host-perfdata
        command_line    /usr/local/pnp4nagios/libexec/process_perfdata.pl
        }
# ‘process-service-perfdata’ command definition
define command{
        command_name    process-service-perfdata
        command_line    /usr/local/pnp4nagios/libexec/process_perfdata.pl
        }

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

12.4.5. 添加 PDF 模版(旧版本的小太阳),镶嵌在 nagios 页面上。

# vi templates.cfg
## 在最后添加
define host {
        name      hosts-pnp
        register  0
        action_url /pnp4nagios/index.php/graph?host=$HOSTNAME$
       
}
define service {
        name      services-pnp
        register  0
        action_url /pnp4nagios/index.php/graph?host=$HOSTNAME$&srv=$SERVICEDESC$     

}

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

12.4.6. 修改 hosts.cfg,引用 hosts-pnp(其它监控主机配置文件依次引用即可):

Linux 下 Nagios+PNP4Nagios 的安装与配置

12.4.7. 修改和 services.cfg,引用 services.pnp(其它监控主机配置文件依次引用即可):
Linux 下 Nagios+PNP4Nagios 的安装与配置

12.4.8 重启 nagios 服务:

service nagios resstart

12.5 配置 pnp4nagios 虚拟目录,:

# vi /usr/local/apache2/conf/httpd.conf

在文档末尾添加:

Alias /pnp4nagios “/usr/local/pnp4nagios/share”

    AuthType Basic
    Options None
    AllowOverride None
    Order allow,deny
    Allow from all
    AuthName “nagios Access”
    AuthUserFile /usr/local/nagios/etc/htpasswd
    Require valid-user

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

  重启 apache 服务。

13. 我们打开 http://192.168.70.82/nagios 查看效果图:

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

然后,PDF 图标出来了。我们随便点个 PDF 小图标,可以查看详细:

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

打开网页,提示报错,实际上网页已经告诉我们该怎么弄了,这个事因为 install.php 文件导致的,我们可以删除它,或重命名就可以解决:

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

最后,我们再次打开网页;

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

      至此,nagios 搭建完毕。

Nagios 的详细介绍 :请点这里
Nagios 的下载地址 :请点这里

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-09/135534.htm

一、Nagios 简介

Nagios 是一款开源的电脑系统和网络监视工具,能有效监控 Windows、Linux 和 Unix 的主机状态,交换机路由器等网络设置,打印机等。在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知。

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 后,它会周期性的自动调用插件去检测服务器状态,同时 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 显示出来,以供管理员及时发现故障。

四种监控状态

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

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

Nagios 安装,是指基本平台,也就是 Nagios 软件包的安装。它是监控体系的框架,也是所有监控的基础。

打开 Nagios 官方的文档,会发现 Nagios 基本上没有什么依赖包,只要求系统是 Linux 或者其他 Nagios 支持的系统。不过如果你没有安装 apache(http 服务),那么你就没有那么直观的界面来查看监控信息了,所以 apache 姑且算是一个前提条件。关于 apache 的安装,网上有很多,照着安装就是了。安装之后要检查一下是否可以正常工作。

知道 Nagios 是如何通过插件来管理服务器对象后,现在开始研究它是如何管理远端服务器对象的。Nagios 系统提供了一个插件 NRPE。Nagios 通过周期性的运行它来获得远端服务器的各种状态信息。它们之间的关系如下图所示:

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

Nagios 通过 NRPE 来远端管理服务

1. Nagios 执行安装在它里面的 check_nrpe 插件,并告诉 check_nrpe 去检测哪些服务。

2. 通过 SSL,check_nrpe 连接远端机子上的 NRPE daemon

3. NRPE 运行本地的各种插件去检测本地的服务和状态 (check_disk,..etc)

4. 最后,NRPE 把检测的结果传给主机端的 check_nrpe,check_nrpe 再把结果送到 Nagios 状态队列中。

5. Nagios 依次读取队列中的信息,再把结果显示出来。

三、实验环境

Host name OS IP Software
 Nagios-Server CentOS release 6.5(Final) 192.168.70.82 Apache、php、nagios、nagios-plugins
 Nagios-Linux  CentOS release 6.5(Final)192.168.70.83nagios-plugins、nrpe
Nagios-WindowsWindows 7 x64 192.168.70.60  NSClient++

Server 安装了 nagios 软件,对监控的数据做处理,并且提供 web 界面查看和管理。当然也可以对本机自身的信息进行监控。

Client 安装了 NRPE 等客户端,根据监控机的请求执行监控,然后将结果回传给监控机。

防火墙已关闭 /iptables: Firewall is not running.

SELINUX=disabled

四、实验目标

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

五、Nagios 服务端安装

5.1 基础支持套件:gcc glibc glibc-common gd gd-devel xinetd openssl-devel

# rpm -q gcc glibc glibc-common gd gd-devel xinetd openssl-devel

如果系统中没有这些套件,使用 yum 安装

#  yum -y install gcc gd gd-devel xinetd openssl-devel

5.2 创建 nagios 用户和用户组
# useradd  nagios
# mkdir /usr/local/nagios
# chown -R nagios.nagios /usr/local/nagios

查看 nagios 目录的权限

# ll -d /usr/local/nagios/

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

5.3 编译安装 Nagios

# wget http://sourceforge.net/projects/nagios/files/nagios-3.x/nagios-3.5.0/nagios-3.5.0.tar.gz/download?use_mirror=cznic

# tar xzvf nagios-3.5.0.tar.gz

# cd nagios

# ./configure –prefix=/usr/local/nagios

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

#make all

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

#make install

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

#make install-init

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

#make install-commandmode

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

# make install-config

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

# chkconfig –add nagios

# chkconfig –level 35 nagios on

# chkconfig –list nagios

Linux 下 Nagios+PNP4Nagios 的安装与配置

 

5.4 验证程序是否被正确安装

切换目录到安装路径(这里是 /usr/local/nagios),看是否存在 etc、bin、sbin、share、var 这五个目录,如果存在则可以表明程序被正确的安装到系统了。Nagios 各个目录用途说明如下:

bin

 Nagios 可执行程序所在目录

etc

Nagios 配置文件所在目录

sbin

 Nagios CGI 文件所在目录,也就是执行外部命令所需文件所在的目录

 share

 Nagios 网页文件所在目录

 libexec

 Nagios 外部插件所在目录

 var

 Nagios 日志文件、lock 等文件所在的目录

 var/archives

 Nagios 日志自动归档目录

 var/rw

 用来存放外部命令文件的目录

5.5 安装 Nagios 插件

#wget http://nagios-plugins.org/download/nagios-plugins-2.0.1.tar.gz

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

# tar xzvf nagios-plugins-2.0.1.tar.gz

# cd nagios-plugins-2.0.1

# ./configure –prefix=/usr/local/nagios

Linux 下 Nagios+PNP4Nagios 的安装与配置

# make && make install

Linux 下 Nagios+PNP4Nagios 的安装与配置

 

5.6 安装与配置 Apache 和 Php

Apache 和 Php 不是安装 nagios 所必须的,但是 nagios 提供了 web 监控界面,通过 web 监控界面可以清晰的看到被监控主机、资源的运行状态,因此,安装一个 web 服务是很必要的。
需要注意的是,nagios 在 nagios3.1.x 版本以后,配置 web 监控界面时需要 php 的支持。这里我们下载的 nagios 版本为 nagios-3.5.0,因此在编译安装完成 apache 后,还需要编译 php 模块,这里选取的 php 版本为 php5.4.10。安装 apache 之前,先卸载 CentOS 自带的 apache:

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

a. 安装 Apache

# mkdir /usr/local/apache2

# wget http://archive.apache.org/dist/httpd/httpd-2.2.23.tar.gz

# tar zxvf httpd-2.2.23.tar.gz

# cd httpd-2.2.23

# ./configure –prefix=/usr/local/apache2

# make && make install
 

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

b. 安装 Php

# mkdir /usr/local/php

# wget http://cn2.php.net/distributions/php-5.4.10.tar.gz

# tar zxvf php-5.4.10.tar.gz

# cd php-5.4.10

# ./configure –prefix=/usr/local/php –with-apxs2=/usr/local/apache2/bin/apxs

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

编译提示错误,只要安装 libxml2 和 libxml2-devel 包就可以了:

Linux 下 Nagios+PNP4Nagios 的安装与配置

然后从新编译:

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

# make && make install

Linux 下 Nagios+PNP4Nagios 的安装与配置

然后将 php.ini 拷贝到 lib 目录下:

Linux 下 Nagios+PNP4Nagios 的安装与配置

c. 配置 apache
找到 apache 的配置文件 /usr/local/apache2/conf/httpd.conf

找到:

User daemon
Group daemon

修改为

User nagios
Group nagios

然后找到
DirectoryIndex index.html

修改为 

DirectoryIndex index.html index.php

接着增加如下内容:

AddType application/x-httpd-php .php

为了安全起见,一般情况下要让 nagios 的 web 监控页面必须经过授权才能访问,这需要增加验证配置,即在 httpd.conf 文件最后添加如下信息:

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

   

检测一下配置文件是否出错:

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

根据上面内容,提示 domain name 错误,可以忽略不管,也可以直接找到:

#ServerName www.example.com:80
改成:
ServerName localhost:80

重新检测配置文件:

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

d. 创建 apache 目录验证文件

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

# /usr/local/apache2/bin/htpasswd -c /usr/local/nagios/etc/htpasswd pzh

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

 e. 启动 apache 服务

# /usr/local/apache2/bin/apachectl start

到这里 nagios 的安装也就基本完成了,你可以通过 web 来访问了。

Linux 下 Nagios+PNP4Nagios 的安装与配置

Linux 下 Nagios+PNP4Nagios 的安装与配置

 

六、配置 Nagios

Nagios 主要用于监控一台或者多台本地主机及远程的各种信息,包括本机资源及对外的服务等。默认的 Nagios 配置没有任何监控内容,仅是一些模板文件。若要让 Nagios 提供服务,就必须修改配置文件,增加要监控的主机和服务,下面将详细介绍。

6.1 默认配置文件介绍

Nagios 安装完毕后,默认的配置文件在 /usr/local/nagios/etc 目录下,我们查看下 Nagios 目录下的文件。

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

每个文件或目录含义如下表所示:

文件名或目录名 用途
cgi.cfg 控制 CGI 访问的配置文件
nagios.cfgNagios 主配置文件
resource.cfg 变量定义文件,又称为资源文件,在些文件中定义变量,以便由其他配置文件引用,如 $USER1$
objectsobjects 是一个目录,在此目录下有很多配置文件模板,用于定义 Nagios 对象
objects/commands.cfg 命令定义配置文件,其中定义的命令可以被其他配置文件引用
objects/contacts.cfg 定义联系人和联系人组的配置文件
objects/localhost.cfg 定义监控本地主机的配置文件
objects/printer.cfg 定义监控打印机的一个配置文件模板,默认没有启用此文件
objects/switch.cfg 定义监控路由器的一个配置文件模板,默认没有启用此文件
objects/templates.cfg 定义主机和服务的一个模板配置文件,可以在其他配置文件中引用
objects/timeperiods.cfg 定义 Nagios 监控时间段的配置文件
objects/windows.cfg 监控 Windows 主机的一个配置文件模板,默认没有启用此文件

————————————– 分割线 ————————————–

在 Ubuntu 下配置 Mrtg 监控 Nginx 和服务器系统资源 http://www.linuxidc.com/Linux/2013-08/88417.htm

使用 snmp+Mrtg 监控 Linux 系统 http://www.linuxidc.com/Linux/2012-11/73561.htm

Mrtg 服务器搭建(监控网络流量)http://www.linuxidc.com/Linux/2012-07/64315.htm

网络监控器 Nagios 全攻略 http://www.linuxidc.com/Linux/2013-07/87067.htm

Nagios 搭建与配置详解 http://www.linuxidc.com/Linux/2013-05/84848.htm

Nginx 环境下构建 Nagios 监控平台 http://www.linuxidc.com/Linux/2011-07/38112.htm

在 RHEL5.3 上配置基本的 Nagios 系统 (使用 Nagios-3.1.2) http://www.linuxidc.com/Linux/2011-07/38129.htm

CentOS 5.5+Nginx+Nagios 监控端和被控端安装配置指南 http://www.linuxidc.com/Linux/2011-09/44018.htm

Ubuntu 13.10 Server 安装 Nagios Core 网络监控运用 http://www.linuxidc.com/Linux/2013-11/93047.htm

————————————– 分割线 ————————————–

 

6.2 配置文件之间的关系

在 nagios 的配置过程中涉及到的几个定义有:主机、主机组,服务、服务组,联系人、联系人组,监控时间,监控命令等,从这些定义可以看出,nagios 各个配置文件之间是互为关联,彼此引用的。

成功配置出一台 nagios 监控系统,必须要弄清楚每个配置文件之间依赖与被依赖的关系,最重要的有四点:

第一:定义监控哪些主机、主机组、服务和服务组;
第二:定义这个监控要用什么命令实现;
第三:定义监控的时间段;
第四:定义主机或服务出现问题时要通知的联系人和联系人组。

6.3 配置 Nagios

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

  • 创建 hosts.cfg 文件来定义主机和主机组
  • 创建 services.cfg 文件来定义服务
  • 用默认的 contacts.cfg 文件来定义联系人和联系人组
  • 用默认的 commands.cfg 文件来定义命令
  • 用默认的 timeperiods.cfg 来定义监控时间段
  • 用默认的 templates.cfg 文件作为资源引用文件

a. templates.cfg 文件

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

下面详细介绍下 templates.cfg 文件中每个参数的含义:

define contact{
        name                            generic-contact    ; 联系人名称

        service_notification_period    24×7              ; 当服务出现异常时,发送通知的时间段,这个时间段 ”24×7″ 在 timeperiods.cfg 文件中定义

        host_notification_period        24×7              ; 当主机出现异常时,发送通知的时间段,这个时间段 ”24×7″ 在 timeperiods.cfg 文件中定义

        service_notification_options    w,u,c,r            ; 这个定义的是“通知可以被发出的情况”。w 即 warn,表示警告状态,u 即 unknown,表示不明状态,c 即 criticle,表示紧急状态,r 即 recover,表示恢复状态 ; 也就是在服务出现警告状态、未知状态、紧急状态和重新恢复状态时都发送通知给使用者。

        host_notification_options      d,u,r                  ; 定义主机在什么状态下需要发送通知给使用者,d 即 down,表示宕机状态;u 即 unreachable,表示不可到达状态,r 即 recovery,表示重新恢复状态。

        service_notification_commands  notify-service-by-email ; 服务故障时,发送通知的方式,可以是邮件和短信,这里发送的方式是邮件; 其中“notify-service-by-email”在 commands.cfg 文件中定义。

        host_notification_commands      notify-host-by-email    ; 主机故障时,发送通知的方式,可以是邮件和短信,这里发送的方式是邮件; 其中“notify-host-by-email”在 commands.cfg 文件中定义。

        register                        0                    ; DONT REGISTER THIS DEFINITION – ITS NOT A REAL CONTACT, JUST A TEMPLATE!
        }

define host{
        name                            generic-host    ; 主机名称,这里的主机名,并不是直接对应到真正机器的主机名 ; 乃是对应到在主机配置文件里所设定的主机名。
        notifications_enabled          1              ; Host notifications are enabled
        event_handler_enabled          1              ; Host event handler is enabled
        flap_detection_enabled          1              ; Flap detection is enabled
        failure_prediction_enabled      1              ; Failure prediction is enabled
        process_perf_data              1              ; 其值可以为 0 或 1,其作用为是否启用 Nagios 的数据输出功能; 如果将此项赋值为 1,那么 Nagios 就会将收集的数据写入某个文件中,以备提取。
        retain_status_information      1              ; Retain status information across program restarts
        retain_nonstatus_information    1              ; Retain non-status information across program restarts
        notification_period            24×7            ; 指定“发送通知”的时间段,也就是可以在什么时候发送通知给使用者。
        register                        0              ; DONT REGISTER THIS DEFINITION – ITS NOT A REAL HOST, JUST A TEMPLATE!
        }

define host{
        name                            linux-server    ; 主机名称
        use                            generic-host    ; use 表示引用,也就是将主机 generic-host 的所有属性引用到 linux-server 中来; 在 nagios 配置中,很多情况下会用到引用。
        check_period                    24×7            ; 这里的 check_period 告诉 nagios 检查主机的时间段
        check_interval                  5              ; nagios 对主机的检查时间间隔,这里是 5 分钟。
        retry_interval                  1              ; 重试检查时间间隔,单位是分钟。
        max_check_attempts              10              ; nagios 对主机的最大检查次数,也就是 nagios 在检查发现某主机异常时,并不马上判断为异常状况  ; 而是多试几次,因为有可能只是一时网络太拥挤,或是一些其他原因,让主机受到了一点影响; 这里的 10 就是最多试 10 次的意思。
        check_command                  check-host-alive ; 指定检查主机状态的命令,其中“check-host-alive”在 commands.cfg 文件中定义。
        notification_period            24×7            ; 主机故障时,发送通知的时间范围,其中“workhours”在 timeperiods.cfg 中进行了定义; 下面会陆续讲到。
        notification_interval          10              ; 在主机出现异常后,故障一直没有解决,nagios 再次对使用者发出通知的时间。单位是分钟; 如果你觉得,所有的事件只需要一次通知就够了,可以把这里的选项设为 0
        notification_options            d,u,r          ; 定义主机在什么状态下可以发送通知给使用者,d 即 down,表示宕机状态 ; u 即 unreachable,表示不可到达状态; r 即 recovery,表示重新恢复状态。
        contact_groups                  admins            ; 指定联系人组,这个“admins”在 contacts.cfg 文件中定义。
        register                        0              ; DONT REGISTER THIS DEFINITION – ITS NOT A REAL HOST, JUST A TEMPLATE!
        }

define host{
        name                    windows-server  ; The name of this host template
        use                    generic-host    ; Inherit default values from the generic-host template
        check_period            24×7            ; By default, Windows servers are monitored round the clock
        check_interval          5              ; Actively check the server every 5 minutes
        retry_interval          1              ; Schedule host check retries at 1 minute intervals
        max_check_attempts      10              ; Check each server 10 times (max)
        check_command          check-host-alive        ; Default command to check if servers are “alive”
        notification_period    24×7            ; Send notification out at any time – day or night
        notification_interval  10              ; Resend notifications every 30 minutes
        notification_options    d,r            ; Only send notifications for specific host states
        contact_groups          ts              ; Notifications get sent to the admins by default
        hostgroups              windows-servers ; Host groups that Windows servers should be a member of
        register                0              ; DONT REGISTER THIS – ITS JUST A TEMPLATE
        }

define service{
        name                            generic-service        ; 定义一个服务名称
        active_checks_enabled          1                      ; Active service checks are enabled
        passive_checks_enabled          1                      ; Passive service checks are enabled/accepted
        parallelize_check              1                      ; Active service checks should be parallelized;
                                                                ; (disabling this can lead to major performance problems)
        obsess_over_service            1                      ; We should obsess over this service (if necessary)
        check_freshness                0                      ; Default is to NOT check service ‘freshness’
        notifications_enabled          1                      ; Service notifications are enabled
        event_handler_enabled          1                      ; Service event handler is enabled
        flap_detection_enabled          1                      ; Flap detection is enabled
        failure_prediction_enabled      1                      ; Failure prediction is enabled
        process_perf_data              1                      ; Process performance data
        retain_status_information      1                      ; Retain status information across program restarts
        retain_nonstatus_information    1                      ; Retain non-status information across program restarts
        is_volatile                    0                      ; The service is not volatile
        check_period                    24×7            ; 这里的 check_period 告诉 nagios 检查服务的时间段。
        max_check_attempts              3                ; nagios 对服务的最大检查次数。
        normal_check_interval          5                ; 此选项是用来设置服务检查时间间隔,也就是说,nagios 这一次检查和下一次检查之间所隔的时间 ; 这里是 5 分钟。
        retry_check_interval            2                ; 重试检查时间间隔,单位是分钟。
        contact_groups                  ts          ; 指定联系人组
        notification_options            w,u,c,r          ; 这个定义的是“通知可以被发出的情况”。w 即 warn,表示警告状态 ; u 即 unknown,表示不明 ; c 即 criticle,表示紧急状态,r 即 recover,表示恢复状态; 也就是在服务出现警告状态、未知状态、紧急状态和重新恢复后都发送通知给使用者。
        notification_interval          10              ; Re-notify about service problems every hour
        notification_period            24×7            ; 指定“发送通知”的时间段,也就是可以在什么时候发送通知给使用者。
        register                        0                ; DONT REGISTER THIS DEFINITION – ITS NOT A REAL SERVICE, JUST A TEMPLATE!
        }

define service{
        name                            local-service          ; The name of this service template
        use                            generic-service        ; Inherit default values from the generic-service definition
        max_check_attempts              4            ; Re-check the service up to 4 times in order to determine its final (hard) state
        normal_check_interval          5            ; Check the service every 5 minutes under normal conditions
        retry_check_interval            1            ; Re-check the service every minute until a hard state can be determined
        register                        0            ; DONT REGISTER THIS DEFINITION – ITS NOT A REAL SERVICE, JUST A TEMPLATE!
        }

b. resource.cfg 文件

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

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

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

c. commands.cfg 文件

此文件默认是存在的,无需修改即可使用,当然如果有新的命令需要加入时,在此文件进行添加即可。

 

#notify-host-by-email 命令的定义
define command{
        command_name    notify-host-by-email            #命令名称,即定义了一个主机异常时发送邮件的命令。
        command_line    /usr/bin/printf “%b” “***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n” | /bin/mail -s “** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **” $CONTACTEMAIL$                                    #命令具体的执行方式。
        }

#notify-service-by-email 命令的定义
define command{
        command_name    notify-service-by-email          #命令名称,即定义了一个服务异常时发送邮件的命令
        command_line    /usr/bin/printf “%b” “***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n” | /bin/mail -s “** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **” $CONTACTEMAIL$
        }

#check-host-alive 命令的定义
define command{
        command_name    check-host-alive                #命令名称,用来检测主机状态。
        command_line    $USER1$/check_ping -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 5           
                        # 这里的变量 $USER1$ 在 resource.cfg 文件中进行定义,即 $USER1$=/usr/local/nagios/libexec;
                        # 那么 check_ping 的完整路径为 /usr/local/nagios/libexec/check_ping;
                        #“-w 3000.0,80%”中“-w”说明后面的一对值对应的是“WARNING”状态,“80%”是其临界值。
                        #“-c 5000.0,100%”中“-c”说明后面的一对值对应的是“CRITICAL”,“100%”是其临界值。
                        #“-p 1”说明每次探测发送一个包。
        }

define command{
        command_name    check_local_disk
        command_line    $USER1$/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$            #$ARG1$ 是指在调用这个命令的时候,命令后面的第一个参数。
        }

define command{
        command_name    check_local_load
        command_line    $USER1$/check_load -w $ARG1$ -c $ARG2$
        }

define command{
        command_name    check_local_procs
        command_line    $USER1$/check_procs -w $ARG1$ -c $ARG2$ -s $ARG3$
        }

define command{
        command_name    check_local_users
        command_line    $USER1$/check_users -w $ARG1$ -c $ARG2$
        }

define command{
        command_name    check_local_swap
        command_line    $USER1$/check_swap -w $ARG1$ -c $ARG2$
        }

define command{
        command_name    check_ftp
        command_line    $USER1$/check_ftp -H $HOSTADDRESS$ $ARG1$
        }

define command{
        command_name    check_http
        command_line    $USER1$/check_http -I $HOSTADDRESS$ $ARG1$
        }

define command{
        command_name    check_ssh
        command_line    $USER1$/check_ssh $ARG1$ $HOSTADDRESS$
        }

define command{
        command_name    check_ping
        command_line    $USER1$/check_ping -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$ -p 5
        }

define command{
        command_name    check_nt
        command_line    $USER1$/check_nt -H $HOSTADDRESS$ -p 12489 -v $ARG1$ $ARG2$
        }

 

d. hosts.cfg 文件

此文件默认不存在,需要手动创建,hosts.cfg 主要用来指定被监控的主机地址以及相关属性信息,根据实验目标配置如下:

define host{
        use                    linux-server          #引用主机 linux-server 的属性信息,linux-server 主机在 templates.cfg 文件中进行了定义。
        host_name              Nagios-Linux          #主机名
        alias                  Nagios-Linux          #主机别名
        address                192.168.70.70        #被监控的主机地址,这个地址可以是 ip,也可以是域名。
        } 


# 定义一个主机组 
define hostgroup{
        hostgroup_name          bsmart-servers        #主机组名称,可以随意指定。
        alias                  bsmart servers        #主机组别名
        members                Nagios-Linux          #主机组成员,其中“Nagios-Linux”就是上面定义的主机。
        }

注意: 在 /usr/local/nagios/etc/objects 下默认有 localhost.cfg 和 windows.cfg 这两个配置文件,localhost.cfg 文件是定义监控主机本身的,windows.cfg 文件是定义 windows 主机的,其中包括了对 host 和相关 services 的定义。所以在本次实验中,将直接在 localhost.cfg 中定义监控主机(Nagios-Server),在 windows.cfg 中定义 windows 主机(Nagios-Windows)。根据自己的需要修改其中的相关配置,详细如下:

localhost.cfg

define host{
        use                    linux-server            ; Name of host template to use
                                                        ; This host definition will inherit all variables that are defined
                                                        ; in (or inherited by) the linux-server host template definition.
        host_name              Nagios-Server
        alias                  Nagios-Server
        address                127.0.0.1
        }
define hostgroup{
        hostgroup_name  linux-servers ; The name of the hostgroup
        alias          Linux Servers ; Long name of the group
        members        Nagios-Server ; Comma separated list of hosts that belong to this group
        }
define service{
        use                            local-service        ; Name of service template to use
        host_name                      Nagios-Server
        service_description            PING
        check_command                  check_ping!100.0,20%!500.0,60%
        }
define service{
        use                            local-service        ; Name of service template to use
        host_name                      Nagios-Server
        service_description            Root Partition
        check_command                  check_local_disk!20%!10%!/
        }
define service{
        use                            local-service        ; Name of service template to use
        host_name                      Nagios-Server
        service_description            Current Users
        check_command                  check_local_users!20!50
        }
define service{
        use                            local-service        ; Name of service template to use
        host_name                      Nagios-Server
        service_description            Total Processes
        check_command                  check_local_procs!250!400!RSZDT
        }
define service{
        use                            local-service        ; Name of service template to use
        host_name                      Nagios-Server
        service_description            Current Load
        check_command                  check_local_load!5.0,4.0,3.0!10.0,6.0,4.0
        }
define service{
        use                            local-service        ; Name of service template to use
        host_name                      Nagios-Server
        service_description            Swap Usage
        check_command                  check_local_swap!20!10
        }
define service{
        use                            local-service        ; Name of service template to use
        host_name                      Nagios-Server
        service_description            SSH
        check_command                  check_ssh
        notifications_enabled          0
        }
define service{
        use                            local-service        ; Name of service template to use
        host_name                      Nagios-Server
        service_description            HTTP
        check_command                  check_http
        notifications_enabled          0
        }

windows.cfg

define host{
        use            windows-server  ; Inherit default values from a template
        host_name      Nagios-Windows  ; The name we’re giving to this host
        alias          My Windows Server      ; A longer name associated with the host
        address        192.168.70.60; IP address of the host
        }
define hostgroup{
        hostgroup_name  windows-servers ; The name of the hostgroup
        alias          Windows Servers ; Long name of the group
        }
define service{
        use                    generic-service
        host_name              Nagios-Windows
        service_description    NSClient++ Version
        check_command          check_nt!CLIENTVERSION
        }
define service{
        use                    generic-service
        host_name              Nagios-Windows
        service_description    Uptime
        check_command          check_nt!UPTIME
        }
define service{
        use                    generic-service
        host_name              Nagios-Windows
        service_description    CPU Load
        check_command          check_nt!CPULOAD!-l 5,80,90
        }
define service{
        use                    generic-service
        host_name              Nagios-Windows
        service_description    Memory Usage
        check_command          check_nt!MEMUSE!-w 80 -c 90
        }
define service{
        use                    generic-service
        host_name              Nagios-Windows
        service_description    C:\ Drive Space
        check_command          check_nt!USEDDISKSPACE!-l c -w 80 -c 90
        }
define service{
        use                    generic-service
        host_name              Nagios-Windows
        service_description    W3SVC
        check_command          check_nt!SERVICESTATE!-d SHOWALL -l W3SVC
        }
define service{
        use                    generic-service
        host_name              Nagios-Windows
        service_description    Explorer
        check_command          check_nt!PROCSTATE!-d SHOWALL -l Explorer.exe
        }

e. services.cfg 文件

此文件默认也不存在,需要手动创建,services.cfg 文件主要用于定义监控的服务和主机资源,例如监控 http 服务、ftp 服务、主机磁盘空间、主机系统负载等等。Nagios-Server 和 Nagios-Windows 相关服务已在相应的配置文件中定义,所以这里只需要定义 Nagios-Linux 相关服务即可,这里只定义一个检测是否存活的服务来验证配置文件的正确性,其他服务的定义将在后面讲到。

define service{
        use                    local-service          #引用 local-service 服务的属性值,local-service 在 templates.cfg 文件中进行了定义。
        host_name              Nagios-Linux          #指定要监控哪个主机上的服务,“Nagios-Server”在 hosts.cfg 文件中进行了定义。
        service_description    check-host-alive      #对监控服务内容的描述,以供维护人员参考。
        check_command          check-host-alive      #指定检查的命令。
        }
 

f. contacts.cfg 文件

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

define contact{
        contact_name                   pzh              #联系人的名称, 这个地方不要有空格
        use                            generic-contact  #引用 generic-contact 的属性信息,其中“generic-contact”在 templates.cfg 文件中进行定义
        alias                          Nagios Admin
        email                           
zihepeng@126.com   

        }

define contactgroup{
        contactgroup_name       admins                              #联系人组的名称, 同样不能空格
        alias                   Nagios Administrators              #联系人组描述
        members                 pzh                          #联系人组成员,其中“pzh”就是上面定义的联系人,如果有多个联系人则以逗号相隔
        }

g. timeperiods.cfg 文件

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

# 下面是定义一个名为 24×7 的时间段,即监控所有时间段 
define timeperiod{
        timeperiod_name 24×7      #时间段的名称, 这个地方不要有空格
        alias          24 Hours A Day, 7 Days A Week 
        sunday          00:00-24:00 
        monday          00:00-24:00 
        tuesday        00:00-24:00 
        wednesday      00:00-24:00 
        thursday        00:00-24:00 
        friday          00:00-24:00 
        saturday        00:00-24:00 
        } 
# 下面是定义一个名为 workhours 的时间段,即工作时间段。
define timeperiod{
        timeperiod_name workhours 
        alias          Normal Work Hours 
        monday          09:00-17:00 
        tuesday        09:00-17:00 
        wednesday      09:00-17:00 
        thursday        09:00-17:00 
        friday          09:00-17:00 
        }

h. cgi.cfg 文件

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

default_user_name=pzh
authorized_for_system_information=nagiosadmin,pzh
authorized_for_configuration_information=nagiosadmin,pzh 
authorized_for_system_commands=pzh
authorized_for_all_services=nagiosadmin,pzh 
authorized_for_all_hosts=nagiosadmin,pzh
authorized_for_all_service_commands=nagiosadmin,pzh
authorized_for_all_host_commands=nagiosadmin,pzh

i. nagios.cfg 文件

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

log_file=/usr/local/nagios/var/nagios.log                  # 定义 nagios 日志文件的路径
cfg_file=/usr/local/nagios/etc/objects/commands.cfg        #“cfg_file”变量用来引用对象配置文件,如果有更多的对象配置文件,在这里依次添加即可。
cfg_file=/usr/local/nagios/etc/objects/contacts.cfg
cfg_file=/usr/local/nagios/etc/objects/hosts.cfg
cfg_file=/usr/local/nagios/etc/objects/services.cfg
cfg_file=/usr/local/nagios/etc/objects/timeperiods.cfg
cfg_file=/usr/local/nagios/etc/objects/templates.cfg
cfg_file=/usr/local/nagios/etc/objects/localhost.cfg      # 本机配置文件
cfg_file=/usr/local/nagios/etc/objects/windows.cfg        # windows 主机配置文件
object_cache_file=/usr/local/nagios/var/objects.cache      # 该变量用于指定一个“所有对象配置文件”的副本文件,或者叫对象缓冲文件
precached_object_file=/usr/local/nagios/var/objects.precache
resource_file=/usr/local/nagios/etc/resource.cfg          # 该变量用于指定 nagios 资源文件的路径,可以在 nagios.cfg 中定义多个资源文件。
status_file=/usr/local/nagios/var/status.dat              # 该变量用于定义一个状态文件,此文件用于保存 nagios 的当前状态、注释和宕机信息等。
status_update_interval=10                                  # 该变量用于定义状态文件(即 status.dat)的更新时间间隔,单位是秒,最小更新间隔是 1 秒。
nagios_user=nagios                                        # 该变量指定了 Nagios 进程使用哪个用户运行。
nagios_group=nagios                                        # 该变量用于指定 Nagios 使用哪个用户组运行。
check_external_commands=1                                  # 该变量用于设置是否允许 nagios 在 web 监控界面运行 cgi 命令;
                                                          # 也就是是否允许 nagios 在 web 界面下执行重启 nagios、停止主机 / 服务检查等操作;
                                                        #“1”为运行,“0”为不允许。
command_check_interval=10s                                # 该变量用于设置 nagios 对外部命令检测的时间间隔,如果指定了一个数字加一个 ”s”(如 10s);
                                                          # 那么外部检测命令的间隔是这个数值以秒为单位的时间间隔;
                                                          # 如果没有用 ”s”,那么外部检测命令的间隔是以这个数值的“时间单位”的时间间隔。
interval_length=60                                        # 该变量指定了 nagios 的时间单位,默认值是 60 秒,也就是 1 分钟 # 即在 nagios 配置中所有的时间单位都是分钟。

6.4 验证 Nagios 配置文件的正确性


Nagios 在验证配置文件方面做的非常到位,只需通过一个命令即可完成:

# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

Linux 下 Nagios+PNP4Nagios 的安装与配置

Nagios 提供的这个验证功能非常有用,在错误信息中通常会打印出错误的配置文件以及文件中的哪一行,这使得 nagios 的配置变得非常容易,报警信息通常是可以忽略的,因为一般那些只是建议性的。

看到上面这些信息就说明没问题了,然后启动 Nagios 服务。

七、Nagios 的启动与停止

7.1 启动 Nagios

a. 通过初始化脚本启动 nagios

# /etc/init.d/nagios start
or
# service nagios start

b. 手工方式启动 nagios

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

# /usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg

7.2 重启 Nagios

当修改了配置文件让其生效时,需要重启 / 重载 Nagios 服务。

a. 通过初始化脚本来重启 nagios

# /etc/init.d/nagios reload
or
# /etc/init.d/nagios restart
or
# service nagios restart

b. 通过 web 监控页重启 nagios

可以通过 web 监控页的 “Process Info” -> “Restart the Nagios process” 来重启 nagios

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

c. 手工方式平滑重启

# kill -HUP

7.3 停止 Nagios

a. 通过初始化脚本关闭 nagios 服务

# /etc/init.d/nagios stop
or
# service nagios stop

b. 通过 web 监控页停止 nagios

可以通过 web 监控页的 “Process Info” -> “Shutdown the Nagios process” 来停止 nagios

Linux 下 Nagios+PNP4Nagios 的安装与配置

c. 手工方式停止 Nagios

# kill

八、查看初步配置情况

8.1 启动完成之后,登录 Nagios Web 监控页 http://192.168.70.82/nagios/ 查看相关信息。

8.2 点击左面的 Current Status -> Hosts 可以看到所定义的三台主机已经全部 UP 了。

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

8.3 点击 Current Status -> Services 查看服务监控情况。

原创:Linux 下 Nagios、pnn4nagios 的安装与配置

看到 Nagios-Linux 和 Nagios-Server 的服务状态已经 OK 了,但是 Nagios-Windows 的服务状态为 CRITICAL,Status Information 提示 Connection refused。因为 Nagios-Windows 上还未安装插件,内部服务还无法查看,所以出现这种情况。将在下面具体讲解。

 

更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2016-09/135534p2.htm

 

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计62651字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中