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

    2018-04-16 15:25:15

    nagios简介

     

    Nagios是一款开源的电脑系统和网络监视工具,能有效监控Windows、Linux和Unix的主机状态,交换机路由器等网络设置,打印机等。在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知。
      Nagios原名为NetSaint,由Ethan Galstad开发并维护至今。NAGIOS是一个缩写形式: "Nagios Ain't Gonna Insist On Sainthood" Sainthood 翻译为圣徒,而"Agios"是"saint"的希腊表示方法。Nagios被开发在Linux下使用,但在Unix下也工作得非常好。

    主要功能:

    1.网络服务监控(SMTP、POP3、HTTP、NNTP、ICMP、SNMP、FTP、SSH)
    2.主机资源监控(CPU load、disk usage、system logs),也包括Windows主机(使用NSClient++ plugin)可以指定自己编写的Plugin通过网络收集数据来监控任何情况(温度、警告……)可以通过配置Nagios远程执行插件远程执行脚本
    3.远程监控支持SSH或SSL加通道方式进行监控简单的plugin设计允许用户很容易的开发自己需要的检查服务,支持很多开发语言(shell scripts、C++、Perl、ruby、Python、PHP、C#等)包含很多图形化数据Plugins(Nagiosgraph、Nagiosgrapher、PNP4Nagios等)
    4.可并行服务检查能够定义网络主机的层次,允许逐级检查,就是从父主机开始向下检查
    当服务或主机出现问题时发出通告,可通过email, pager, sms 或任意用户自定义的plugin进行通知
    5、能够自定义事件处理机制重新激活出问题的服务或主机
    • 自动日志循环
    • 支持冗余监控
    • 包括Web界面可以查看当前网络状态,通知,问题历史,日志文件等
    Nagios工作原理
      Nagios的功能是监控服务和主机,但自身并没有该功能,所有的监控、检测功能都是通过插件来完成。
      Nagios周期性调用插件检测服务器状态,并维持一个队列,所有插件返回状态信息都进入队列,Nagios每次从队首开始读取信息,并把状态通过web显示。
    Nagios提供了许多插件,利用这些插件可以监控服务状态。安装完成后,在nagios主目录下/libexec放有nagios自带所有插件,如check_disk检查磁盘空间插件,check_load检查CPU负载等等。每一个插件可运行./check_xxx –h 查看其使用方法和功能
    工作原理图如下:

    Linux笔记网络监控之nagios安装与配置

    Nagios安装与配置

     

    一.nagios相关软件安装

    环境准备
    安装基础编译环境软件
    yum install php gcc glibc glibc-common unzip gd gd-devel –y

    解决perl编译问题
    echo "export LC_ALL=C" >> /etc/profile

    解决时间同步问题

    crontab -e
    /10 * /bin/sh /usr/sbin/ntpdate.sh >/dev/null 2>&1
    [root@centos5 nagios-plugins-2.1.2]# cat /usr/sbin/ntpdate.sh
    #!/bin/bash
    #date update
    ntpdate s1a.time.edu.cn

    1.创建nagios用户及相关的组

    [root@nagios-server ~]#
    useradd -m nagios
    passwd nagios
    groupadd nagcmd
    usermod -a -G nagcmd nagios
    usermod -a -G nagcmd apache

    2.Nagios服务端安装

    下载nagios服务端软件及插件
    [root@nagios-server ~]#
    wget https://assets.nagios.com/downloads/nagioscore/releases/nagios-4.2.1.tar.gz
    wget https://nagios-plugins.org/download/nagios-plugins-2.1.2.tar.gz

    3. 源码编译安装nagios以及相关插件

    [root@nagios-server ~]#
    tar zxf nagios-4.2.1.tar.gz
    cd nagios-4.2.1
    ./configure --with-command-group=nagcmd

    没有提示任何错误出现以下画面说明配置成功

    Linux笔记网络监控之nagios安装与配置

    接下来安装提示进行编译
    [root@nagios-server ~]#
    make all

    编译安装并初始化配置文件
    [root@nagios-server ~]#

    make install
    make install-init
    make install-config
    make install-webconf
    make install-commandmode

    安装并编译nagios插件
    [root@nagios-server ~]#
    tar -zxvf nagios-plugins-2.1.2.tar.gz
    cd nagios-plugins-2.1.2
    ./configure --with-nagios-user=nagios --with-nagios-group=nagios
    make
    make install

    4、配置邮件联系人信息

    配置文件在目录 /usr/local/nagios/etc 下,通过这些基础配置信息可以直接启动 Nagios,现在唯一需要更改的是联系人信息,可以编辑 /usr/local/nagios/etc/objects/contacts.cfg ,将联系人邮件地址换成你自己的。
    Linux笔记网络监控之nagios安装与配置

    若系统中需通过安装sedmail来发送邮件
    [root@nagios-server ~]#
    yum install sendmail sendmail-cf

    5.为nagios创建登录web界面的密码

    [root@nagios-server ~]#
    htpasswd -c /usr/local/nagios/etc/htpasswd.users admin

    6. 编译安装nagios插件

    [root@nagios-server ~]#

    tar zxf nagios-plugins-2.1.2.tar.gz
    cd nagios-plugins-2.1.2
    ./configure --with-nagios-user=nagios --with-nagios-group=nagios
    make
    make install

    7. 设置nagios服务开机自启并启动ngios

    设置开机自启
    [root@nagios-server nagios]# systemctl enable nagios
    [root@nagios-server]# chkconfig --list |grep nagios
    nagios 0:off 1:off 2:on 3:on 4:on 5:on 6:off

    启动nagios服务

    [root@nagios-server]# systemctl start nagios

    检查是否启动成功
    [root@nagios-server nagios]# systemctl start nagios
    [root@nagios-server nagios]# ps -ef |grep nagios
    nagios 24997 1 0 17:46 ? 00:00:02 /usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg
    nagios 25003 24997 0 17:46 ? 00:00:01 /usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg
    nagios 25036 24997 0 17:46 ? 00:00:00 [nagios] <defunct>
    nagios 25037 24997 0 17:46 ? 00:00:00 [nagios] <defunct>
    nagios 25038 24997 0 17:46 ? 00:00:00 [nagios] <defunct>
    nagios 25039 24997 0 17:46 ? 00:00:00 [nagios] <defunct>
    nagios 25094 24997 0 17:54 ? 00:00:00 /usr/local/nagios/bin/nagios --worker /usr/local/nagios/var/rw/nagios.qh
    nagios 25095 24997 0 17:54 ? 00:00:00 /usr/local/nagios/bin/nagios --worker /usr/local/nagios/var/rw/nagios.qh
    nagios 25096 24997 0 17:54 ? 00:00:00 /usr/local/nagios/bin/nagios --worker /usr/local/nagios/var/rw/nagios.qh
    nagios 25097 24997 0 17:54 ? 00:00:00 /usr/local/nagios/bin/nagios --worker /usr/local/nagios/var/rw/nagios.qh
    root 25521 25118 0 19:21 pts/0 00:00:00 grep --color=auto nagios

    存在nagios进程说明已经启动成功了

    检查nagios主配置文件语法是否正确br/>[root@nagios-server]#
    /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

    我们只需关注以下两项参数即可,Total Errors 为0就说明语法正确。
    Total Warnings: 0
    Total Errors: 0

    接下来在浏览器输入 http://服务器ip地址/nagios 登陆nagios,用户名和密码为第五步用htpasswd设置的, 出现以下画面说明您已经安装成功了

    Linux笔记网络监控之nagios安装与配置

    二.验证nagios服务端的监控功能,如实现监控服务器对被监控服务器磁盘负载情况的监控。

    拓扑如下
    Linux笔记网络监控之nagios安装与配置

    环境准备

    1.下载安装nrpe

    [root@nagios-server]#
    wget https://jaist.dl.sourceforge.net/project/nagios/nrpe-2.x/nrpe-2.15/nrpe-2.15.tar.gz
    tar zxf nrpe-2.15.tar.gz
    cd nrpe-2.15
    ./configure
    make all
    make install-plugin
    make install-daemon

    我在安装nrpe遇到以下错误

    Linux笔记网络监控之nagios安装与配置

    安装openssl-devel库即可解决
    [root@centos6 nrpe-2.15]# yum install openssl-devel

    到此为止,nagios-server服务端的实验环境就准备好了

    2.在nagios-client以同样的方式安装nigios-plugins插件和nrpe即可,详细安装步骤参考上文。

    3. server-client端配置

    1)加入可以监控当前client的nagios-server端的ip地址如下
    allow_hosts=192.168.10.136
    可用vi编辑nrpe的配置文件/usr/local/nagios/etc/nrpe.cfg修改大约在79行
    我这里用sed命令修改
    [root@nagios-client ~]# sed -i 's/allowed_hosts=127.0.0.1/allowed_hosts=192.168.10.136/g' /usr/local/nagios/etc/nrpe.cfg
    检查是否修改成功

    Linux笔记网络监控之nagios安装与配置

    2)/usr/local/nagios/etc/nrpe.cfg文件结尾添加要监控的插件
    Linux笔记网络监控之nagios安装与配置
    画圈部分为默认监控的插件,如果需要监控其他内容,可添加并安装相关的插件,本实验监控的是磁盘负载check_load,已包含在默认监控的内容里面了

    4) 启动nrpe

    [root@nagios-client ~]# /usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d

    设置开机自启
    echo “/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg –d” >> /etc/rc.local

    检查服务是否启动成功

    [root@nagios-client ~]# netstat -lnt |grep 5666
    tcp 0 0 0.0.0.0:5666 0.0.0.0: LISTEN 
    tcp6 0 0 :::5666 :::
     LISTEN

    [root@nagios-client ~]# lsof -i :5666
    COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
    nrpe 46042 nagios 4u IPv4 55448 0t0 TCP :5666 (LISTEN)
    nrpe 46042 nagios 5u IPv6 55449 0t0 TCP 
    :5666 (LISTEN)

    nrpe端口和进程都存在说明nrpe启动成功。

    提示:重启nrpe 可以先用killall杀掉nrpe进程再启动即可

    4. Nagios-server端配置。

    1)创建host.cfg主机文件添加被监控的主机
    这里使用lohosthost.cfg作为模板取前51行作为host.cfg的模板
    [root@nagios-server ~]# 
    head -51 /usr/local/nagios/etc/objects/localhost.cfg > /usr/local/nagios/etc/objects/hosts.cfg

    用vi编辑hosts.cfg改为以下内容
    Linux笔记网络监控之nagios安装与配置
    授权
    [root@nagios-server ~]# chwon -R nagios.nagios /usr/local/nagios/etc/objects/hosts.cfg

    2)创建services.cfg监控服务文件添加要监控的服务
    [root@nagios-server ~]# 
    touch /usr/local/nagios/etc/objects/services.cfg 
    chwon -R nagios.nagios /usr/local/nagios/etc/objects/hosts.cfg

    编辑 /usr/local/nagios/etc/objects/services.cfg文件输入如下内容

    [root@nagios-server objects]# vi /usr/local/nagios/etc/objects/services.cfg 
    define service {
    use generic-service ;使用templates.cfg模板的监控参数
    host_name nagios-client ;被监控服务端的主机名
    service_description check load
    check_command check_nrpe!check_load ;要监控的服务命令
    }

    注意:默认使用templates.cfg模板监控的参数,若不需要,可自行定义

    3)在commands.cfg 中加入check_nrp插件配置
    编辑/usr/local/nagios/etc/objects/commands.cfg 在文件结尾添加以下内容

    define command{
    command_name check_nrpe
    command_line $USER1$check_nrpe -H $HOSTADDRESS$ -c $ARG1$

    }

    4) 检查nagios主配置文件并重启

    [root@nagios-server ~]# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

    Total Warnings: 0
    Total Errors: 0

    重启

    [root@nagios-server ~]# /etc/init.d/nagios reload
    Reloading nagios configuration (via systemctl): [ OK ]

    5) 客户端测试是否有监控的主机及服务
    打开浏览器出现了以下画面并没有成功监控到主机以及相关的服务
    Linux笔记网络监控之nagios安装与配置
    细读原来是权限出了问题,我们之前配置登录名admin没有足够的权限来访问cgi

    解决方法:
    把cgi.cfg的nagiosadmin全部替换成admin(我们之前设置的登录名)

    [root@nagios-server ~]# sed -i 's/nagiosadmin/admin/g' /usr/local/nagios/etc/cgi.cfg

    检查语法并重启nagios
    [root@nagios-server ~]# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

    Total Warnings: 0
    Total Errors: 0

    重启

    [root@nagios-server ~]# /etc/init.d/nagios reload
    Reloading nagios configuration (via systemctl): [ OK ]

    打开浏览器访问
    可以看到被监控的主机的相关信息

    Linux笔记网络监控之nagios安装与配置

    但是查看监控的服务时出现了以下异常

    Linux笔记网络监控之nagios安装与配置

    4.排错

    1).查看nagios的错误日志

    [root@nagios-server ~]# tail -100 /usr/local/nagios/var/nagios.log 
    [1523721600] LOG ROTATION: DAILY
    [1523721600] LOG VERSION: 2.0
    [1523721600] CURRENT HOST STATE: nagios-client;UP;HARD;1;PING OK - Packet loss = 0%, RTA = 1.16 ms
    [1523721600] CURRENT SERVICE STATE: nagios-client;check load;CRITICAL;HARD;3;(Return code of 255 is out of bounds)
    [1523721614] Warning: Return code of 255 for check of service 'check load' on host 'nagios-client' was out of bounds.
    [1523721945] Caught SIGHUP, restarting...
    日志大概说不能用check_load不能返回结果,看一下是不是权限问题

    检查客户端nrpe配置文件是否允许服务器地址进行访问

    Linux笔记网络监控之nagios安装与配置
    发现是服务端的地址并没有什么问题

    2).在服务用check_load脚本手动检查一下结果
    [root@nagios-server ~]# /usr/local/nagios/libexec/check_nrpe -H 192.168.10.135 -c check_load
    connect to address 192.168.10.135 port 5666: No route to host

    提示没有主机的路由,查看路由表
    [root@nagios-server ~]# route -n
    Kernel IP routing table
    Destination Gateway Genmask Flags Metric Ref Use Iface
    0.0.0.0 192.168.10.2 0.0.0.0 UG 0 0 0 eno16777728
    169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eno16777728
    192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eno16777728

    这就奇怪了,明明是有默认路由的,互相ping也通

    3).检查防火墙和SELinux
    [root@nagios-client ~]# systemctl status firewall.service
    Unit firewall.service could not be found.

    [root@nagios-client ~]# systemctl status setenfore.service
    Unit setenfore.service could not be found.

    [root@nagios-client ~]# systemctl status iptables

    • iptables.service - IPv4 firewall with iptables
      Loaded: loaded (/usr/lib/systemd/system/iptables.service; enabled; vendor preset: disabled)
      Active: active (exited) since Sun 2018-04-15 01:26:52 CST; 9s ago
      Process: 75135 ExecStop=/usr/libexec/iptables/iptables.init stop (code=exited, status=0/SUCCESS)
      Process: 75653 ExecStart=/usr/libexec/iptables/iptables.init start (code=exited, status=0/SUCCESS)
      Main PID: 75653 (code=exited, status=0/SUCCESS)

    Apr 15 01:26:52 nagios-client systemd[1]: Starting IPv4 firewall with iptables...
    Apr 15 01:26:52 nagios-client iptables.init[75653]: iptables: Applying firewall rules: [ 确定 ]
    Apr 15 01:26:52 nagios-client systemd[1]: Started IPv4 firewall with iptables.

    最后发现是防火墙iptables没关,会不会是防火墙的问题?先把它关了试试

    [root@nagios-client ~]# systemctl stop iptables
    [root@nagios-client ~]# systemctl status iptables

    • iptables.service - IPv4 firewall with iptables
      Loaded: loaded (/usr/lib/systemd/system/iptables.service; enabled; vendor preset: disabled)
      Active: inactive (dead) since Sun 2018-04-15 01:30:07 CST; 12s ago
      Process: 75764 ExecStop=/usr/libexec/iptables/iptables.init stop (code=exited, status=0/SUCCESS)
      Process: 75653 ExecStart=/usr/libexec/iptables/iptables.init start (code=exited, status=0/SUCCESS)
      Main PID: 75653 (code=exited, status=0/SUCCESS)

    Apr 15 01:26:52 nagios-client systemd[1]: Starting IPv4 firewall with iptables...
    Apr 15 01:26:52 nagios-client iptables.init[75653]: iptables: Applying firewall rules: [ 确定 ]
    Apr 15 01:26:52 nagios-client systemd[1]: Started IPv4 firewall with iptables.
    Apr 15 01:30:06 nagios-client systemd[1]: Stopping IPv4 firewall with iptables...
    Apr 15 01:30:06 nagios-client iptables.init[75764]: iptables: Setting chains to policy ACCEPT: filter [ 确定 ]
    Apr 15 01:30:06 nagios-client iptables.init[75764]: iptables: Flushing firewall rules: [ 确定 ]
    Apr 15 01:30:07 nagios-client iptables.init[75764]: iptables: Unloading modules: [ 确定 ]
    Apr 15 01:30:07 nagios-client systemd[1]: Stopped IPv4 firewall with iptables.

    4.在服务端再次用命令检测一下
    [root@nagios-server ~]# /usr/local/nagios/libexec/check_nrpe -H 192.168.10.135 -c check_load
    OK - load average: 0.97, 0.91, 0.88|load1=0.970;15.000;30.000;0; load5=0.910;10.000;25.000;0; load15=0.880;5.000;20.000;0;

    可以看到结果了,果然是防火墙的问题,配置容易,排错难,遇到问题是好事,多点查阅相关的文档,多角度去考虑问题,会让你成长地更快!

    我们打开浏览器再次查看,Status是OK,这恭喜你配置完成了

    Linux笔记网络监控之nagios安装与配置

    其实,很多其他的服务也可以通过此种方式来监控,以上我列举的只是其中一种服务而已,我就不一一举例了。

    学习小提示:

    学习需要总结,不然时间长了很快忘记。做笔记很重要,人脑的记忆是有限的,不可能记住全部的知识,这就需要我们用硬盘来帮我们记住具体的知识细节,我们只需记住概要即可,以后忘了再翻翻笔记,你会发现以前的知识又重新回到了脑海中。

     

                                                                               转自墨尔本的

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

    一、Nagios简介

    Nagios logo

      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显示出来,以供管理员及时发现故障。

    四种监控状态

    2

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

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

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

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

    1

    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.3 (Final) 192.168.1.108 Apache、Php、Nagios、nagios-plugins
    Nagios-Linux CentOS release 5.8 (Final) 192.168.1.111 nagios-plugins、nrpe
    Nagios-Windows Windows XP 192.168.1.113  NSClient++

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

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

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

    SELINUX=disabled

    四、实验目标

    五、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

    8

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

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

    5.2 创建nagios用户和用户组

    # useradd -s /sbin/nologin nagios
    # mkdir /usr/local/nagios
    # chown -R nagios.nagios /usr/local/nagios

    6

    查看nagios 目录的权限

    # ll -d /usr/local/nagios/

    7

    5.3 安装nagios 英文版(推荐中文版 在下面)

    # wget https://assets.nagios.com/downloads/nagioscore/releases/nagios-4.3.1.tar.gz

    # tar zxvf nagios-4.3.1.tar.gz

    # cd nagios

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

    9

    10

    # make all

    11

    12

    # make install

    13

    # make install-init

    14

    # make install-commandmode

    15

    # make install-config

    16

    # chkconfig --add nagios

    # chkconfig --level 35 nagios on

    # chkconfig --list nagios

    17

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

    切换目录到安装路径(这里是/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.4 安装nagios 中文版:

       # wget https://jaist.dl.sourceforge.net/project/nagios-cn/sourcecode/zh_CN%203.2.3/nagios-cn-3.2.3.tar.bz2

     or

       #wgethttps://nchc.dl.sourceforge.net/project/nagios-cn/sourcecode/zh_CN%203.2.3/nagios-cn-3.2.3.tar.bz2

    增加组加入组

      #/usr/sbin/groupadd nagcmd
      #/usr/sbin/usermod -G nagcmd nagios 

    编译安装

         # yum install bzip2
      # tar jxvf nagios-cn-3.2.3.tar.bz2
      # cd nagios-cn-3.2.3 

       #./configure --prefix=/usr/local/nagios --with-nagios-user=nagios --with-nagios-group=nagios --with-command-group=nagcmd   

       # make all
       # make install
       # make install-init
       # make install-config
       # make install-commandmode
       # make install-webconf
       # chkconfig -a nagios
       # cd ..

    检查配置
      /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg


    5.5 安装Nagios 插件

    先安装zip unzip ,在 make all里需要用到

    # yum install zip 

    # yum install unzip

    # wget https://nagios-plugins.org/download/nagios-plugins-2.1.4.tar.gz 

    # tar zxvf nagios-plugins-2.1.4.tar.gz  

    # cd nagios-plugins-2.1.4

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

    # make && make install

    18

    19

    5.6 安装与配置Apache和Php

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


    先安装 apr && apr-util

    #wget http://mirrors.hust.edu.cn/apache/apr/apr-1.5.2.tar.gz 

    # tar zxvf apr-1.5.2.tar.gz

    # cd apr-1.5.2

    #mkdir /usr/local/apr

    #./configure --prefix=/usr/local/apr

    #make

    #make  install

    #wget http://mirrors.hust.edu.cn/apache/apr/apr-util-1.5.4.tar.gz

    # tar zxvf apr-util-1.5.4.tar.gz

    # cd apr-util-1.5.4

    #mkdir /usr/local/apr-util

    #./configure  --prefix=/usr/local/apr-util  --with-apr=/usr/local/apr

    #make

    #make install


    a. 安装Apache

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

    # tar zxvf httpd-2.4.9.tar.gz

    # cd httpd-2.4.9

    ./configure --prefix=/usr/local/apache2 --enable-rewrite --enable-so --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util

    # make && make install

    22

    若出现错误:

    则在编译时入加 --with-included-apr 即可解决。

    b. 安装Php


    安装libxml2和libxml2-devel包

    yum install libxml2

    yum install libxml2-devel -y

     

    安装完之后查找xml2-config文件是否存在

    [root@XKWB3403 php-5.3.8]# find / -name "xml2-config"
    /usr/bin/xml2-config 

    # wget http://cn2.php.net/get/php-7.1.3.tar.gz/from/this/mirror

    http://hk1.php.net/get/php-7.1.3.tar.gz/from/this/mirror

    # tar zxvf php-7.1.3.tar.gz

    # cd php-7.1.3

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

    23

    # make && make install

    24

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

    User daemon 
    Group daemon 

    修改为 

    User nagios 
    Group nagios 

    然后找到 

    <IfModule dir_module> 
      DirectoryIndex index.html 
    </IfModule> 

    修改为 

    <IfModule dir_module> 
      DirectoryIndex index.html index.php 
    </IfModule> 

    接着增加如下内容: 

    AddType application/x-httpd-php .php 

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

    复制代码
    
    
    #setting for nagios 
    ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin" 
    <Directory "/usr/local/nagios/sbin"> 
         AuthType Basic 
         Options ExecCGI 
         AllowOverride None 
         Order allow,deny 
         Allow from all 
         AuthName "Nagios Access" 
         #用于此目录访问身份验证的文件
         AuthUserFile /usr/local/nagios/etc/htpasswd              
         Require valid-user 
    </Directory> 
    Alias /nagios "/usr/local/nagios/share" 
    <Directory "/usr/local/nagios/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 
    </Directory> 
    
    
    复制代码

    #LoadModule cgid_module modules/mod_cgid.so
    #LoadModule actions_module modules/mod_actions.so

    #ServerName  localhost:80

    将上面3行的#去掉,重启apache就OK

    开放80(管理台 )、5666(nrpe用)端口

    #vim /etc/sysconfig/iptables 

    增加内容:

    -A INPUT -m state --state NEW -m tcp -p tcp --dport 80  -j ACCEPT

    -A INPUT -m state --state NEW -m tcp -p tcp --dport 80  -j ACCEPT

    #systemctl restart iptables.service  

    #systemctl enable iptables.service 

    d. 创建apache目录验证文件 

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

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

    e. 修改 vim /usr/local/nagios/etc/cgi.cfg

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



    这样就在/usr/local/nagios/etc 目录下创建了一个htpasswd 验证文件,当通过http://192.168.1.108/nagios/ 访问时就需要输入用户名和密码了。

    e. 查看认证文件的内容

    # cat /usr/local/nagios/etc/htpasswd

    f. 启动apache 及 nagios 服务

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

    # service nagios start

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


    六、配置Nagios

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

    6.1 默认配置文件介绍

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

    29

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

    文件名或目录名 用途
    cgi.cfg 控制CGI访问的配置文件
    nagios.cfg Nagios 主配置文件
    resource.cfg 变量定义文件,又称为资源文件,在些文件中定义变量,以便由其他配置文件引用,如$USER1$
    objects objects 是一个目录,在此目录下有很多配置文件模板,用于定义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 主机的一个配置文件模板,默认没有启用此文件

    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     24x7               ; 当服务出现异常时,发送通知的时间段,这个时间段"24x7"在timeperiods.cfg文件中定义
            host_notification_period        24x7               ; 当主机出现异常时,发送通知的时间段,这个时间段"24x7"在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 24x7 ; 指定“发送通知”的时间段,也就是可以在什么时候发送通知给使用者。 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 24x7 ; 这里的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 24x7 ; 主机故障时,发送通知的时间范围,其中“workhours”在timeperiods.cfg中进行了定义;
    ; 下面会陆续讲到。
    notification_interval 10 ; 在主机出现异常后,故障一直没有解决,nagios再次对使用者发出通知的时间。单位是分钟;
    ; 如果你觉得,所有的事件只需要一次通知就够了,可以把这里的选项设为0
    notification_options d,u,r ; 定义主机在什么状态下可以发送通知给使用者,d即down,表示宕机状态;
    ; u即unreachable,表示不可到达状态;
    ; r即recovery,表示重新恢复状态。
    contact_groups ts ; 指定联系人组,这个“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 24x7 ; 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 24x7 ; 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 24x7 ; 这里的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 24x7 ; 指定“发送通知”的时间段,也就是可以在什么时候发送通知给使用者。 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.1.111         #被监控的主机地址,这个地址可以是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.1.113   ; 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                    David             #联系人的名称,这个地方不要有空格
            use                             generic-contact   #引用generic-contact的属性信息,其中“generic-contact”在templates.cfg文件中进行定义
            alias                           Nagios Admin
            email                           david.tang@bsmart.cn
            }
    define contactgroup{
            contactgroup_name       ts                              #联系人组的名称,同样不能空格
            alias                   Technical Support               #联系人组描述
            members                 David                           #联系人组成员,其中“david”就是上面定义的联系人,如果有多个联系人则以逗号相隔
            }
    复制代码

    g. timeperiods.cfg文件

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

    复制代码
    #下面是定义一个名为24x7的时间段,即监控所有时间段  
    define timeperiod{  
            timeperiod_name 24x7       #时间段的名称,这个地方不要有空格
            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=david
    authorized_for_system_information=nagiosadmin,david  
    authorized_for_configuration_information=nagiosadmin,david  
    authorized_for_system_commands=david
    authorized_for_all_services=nagiosadmin,david  
    authorized_for_all_hosts=nagiosadmin,david
    authorized_for_all_service_commands=nagiosadmin,david  
    authorized_for_all_host_commands=nagiosadmin,david 
    复制代码

    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
     
    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

    c. 手工方式平滑重启

    # kill -HUP <nagios_pid>

    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

    c. 手工方式停止Nagios

    # kill <nagios_pid>

    八、查看初步配置情况

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

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

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

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

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

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

    9.1 NRPE 工作原理

    nrpe

    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

    b. 安装Nagios 插件

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

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

     

    修改目录权限

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

    c. 安装NRPE

    # wget http://prdownloads.sourceforge.net/sourceforge/nagios/nrpe-2.13.tar.gz
    # tar zxvf nrpe-2.13.tar.gz
    # cd nrpe-2.13
    # ./configure

    # 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

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

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

    d. 安装xinted 脚本

    # make install-xinetd

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

    编辑这个脚本:

    在only_from 后增加监控主机的IP地址。

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

    重启xinted 服务

    # service xinetd restart

    查看NRPE 是否已经启动

    可以看到5666端口已经在监听了。

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

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

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

    会返回当前NRPE的版本

    也就是在本地用check_nrpe连接nrpe daemon是正常的。

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

    f. check_nrpe 命令用法

    查看check_nrpe 命令用法

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

    可以看到用法是:

    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@Nagiso-Linux etc]# cat 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 
    [root@Nagiso-Linux etc]# 
    复制代码

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

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

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

    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之间的通信。

    看到已经正确返回了NRPE的版本信息,说明一切正常。

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

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

    在最后面增加如下内容:

    意义如下:

    复制代码
    # '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.1.108/nagios/ 查看相关信息。

    可以看到,对于Nagios-Server 和Nagios-Linux 上的相关服务的监控已经成功了,还有Nagios-Windows 上的服务还没有定义,下面讲到。



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

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

    NSClient++的原理如下图

    可以看到NSClient与nrpe最大的区别就是:

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

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

    10.1 安装NSClient++

    从http://www.nsclient.org/nscp/downloads 下载NSClient++-0.2.7.zip

    解压到C盘根目录。

    打开cmd 切换到c:\NSClient++-0.2.7

    执行nsclient++ /install 进行安装

    执行nsclient++ SysTray (注意大小写),这一步是安装系统托盘,时间稍微有点长。

    在运行里面输入services.msc 打开“服务

     

    看到下图就说明NSClient服务已经安装上了

     

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

    编辑c:\NSClient++-0.2.7下的NSC.ini文件。

    将 [modules]部分的所有模块前面的注释都去掉,除了CheckWMI.dll 和 RemoteConfiguration.dll 这两个。

    在[Settings]部分设置'password'选项来设置密码,作用是在nagios连接过来时要求提供密码。这一步是可选的,我这里设置为'123456'。

    将[Settings]部分'allowed_hosts'选项的注释去掉,并且加上运行nagios的监控主机的IP。各IP之间以逗号相隔。这个地方是支持子网的,如果写成192.168.1.0/24则表示该子网内的所有机器都可以访问。如果这个地方是空白则表示所有的主机都可以连接上来。

    注意是[Settings]部分的,因为[NSClient]部分也有这个选项。

    必须保证[NSClient]的'port'选项并没有被注释,并且它的值是'12489',这是NSClient的默认监听端口。

    在cmd 中执行nsclient++ /start启动服务,注意所在目录是c:\NSClient++-0.2.7

    这时在桌面右下角的系统托盘处会出现一个黄色的M字样的图标

    查看服务

    已经正常启动了。

    注意服务默认设的是“自动”,也就是说是开机自动启动的。

    在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$
            }

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

    可以看到有错误:NSClient - ERROR: PDH Collection thread not running.

    Google 一下,是由于操作系统语言的问题,好像NSClient 默认支持的语言并不多,具体可以百度一下。

    查看NSClient的日志C:\NSClient++-0.2.7\nsclient.log,信息如下:

    2013-02-02 22:05:30: error:.\PDHCollector.cpp:98: You need to manually configure performance counters!

    需要手动配置performance counters。

    打开C:\NSClient++-0.2.7\counters.defs文件,复制文件里面"English US"那部分内容,粘贴到counters.defs 文件的最后,修改Description = "Chinese"。

    修改完之后,在mmc中重启NSClient 服务。

    然后查看日志,内容如下:

    在正常执行了。

    打开Nagios Web监控页查看。

    执行成功,但是W3SVC服务为Unknown 状态。查资料,需要开启Windows 的IIS服务。

    打开“控制面板”进行安装。

    安装完毕后,再到Nagios Web监控页查看,全部监控正常。

     

    十一、Nagios邮件报警的配置

    11.1 安装sendmail 组件

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

    # yum install -y sendmail*

    然后重新启动sendmail服务:

    # service sendmail restart

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

    # echo "Hello World" | mail david.tang@bsmart.cn

    11.2 邮件报警的配置

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

    11.3 Nagios 通知

    PROBLEM

    RECOVERY

    Linux下Nagios安装配置完毕。 

     

    参考资料

    • Nagios官方网站:http://www.nagios.org/
    • yahoon的小屋 《nagios全攻略》:http://yahoon.blog.51cto.com/
    • 技术成就梦想 《运维监控利器Nagios》:http://ixdba.blog.51cto.com/

    安装中文版:

    https://jaist.dl.sourceforge.net/project/nagios-cn/sourcecode/zh_CN%203.2.3/nagios-cn-3.2.3.tar.bz2

    增加组加入组

      /usr/sbin/groupadd nagcmd
      /usr/sbin/usermod -G nagcmd nagios
    编译安装
        tar jxvf nagios-cn-3.2.3.tar.bz2
        cd nagios-cn-3.2.3
        ./configure --with-command-group=nagcmd
        make all
        make install
        make install-init
        make install-config
        make install-commandmode
        make install-webconf
        chkconfig -a nagios
        cd ..

    检查配置
      /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

    展开全文
  • nagios详解

    千次阅读 2015-08-30 15:46:33
    Nagios是一款开源的电脑系统和网络监视工具,能有效监控Windows、Linux和Unix的主机状态,在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知;本文介绍...

    nagios详解

    • 方式:原创

    目录  
    1   NAGIOS介绍    
        1.1 NAGIOS的简介   
        1.2 NAGIOS的工作原理 
    2   NAGIOS搭建    
        2.1 基础安装    
        2.2 NAGIOS安装    
        2.3 APACHE配置    
        2.4 带安全认证的配置    
        2.5 NAGIOS汉化    
    3   NAGIOS配置    
        3.1 配置简介    
        3.2 定义检查时间段 
        3.3 定义联系人   
        3.4 定义宏及命令  
        3.5 定义HOST及HOST组    
        3.6 定义服务及服务组    
        3.7 综合  
    4   远程监控    
        4.1 使用NRPE做NAGIOS主动监控   
        4.1.1   NRPE安装  
        4.1.2   NRPE使用  
        4.2 使用NSCA做NAGIOS被动监控   
        4.2.1   NSCA安装  
        4.2.2   NSCA使用  
        4.3 NSCP使用  
    5   NAGIOS插件扩展  
    6   报警方式扩展支持    
    7   数据存储    
        7.1 文件存储    
        7.2 Ndoutils    
        7.2.1   Ndoutils安装  
        7.2.2   Ndoutils表说明 
    8   管理NAGIOS的配置文件   
    9   图表  
    

    1 Nagios介绍

    1.1 nagios的简介

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

    主要特点

    Nagios 是采用分布-集中的管理模式。在Nagios服务器上安装Nagios 主程序和插件程序,在被监控主机上安装Nagios 代理程序。通过Nagios 主程序和Nagios 代理程序之间的通讯,监视对象的状态。

    • 1) 能够监控网络服务和主机资源(SMTP、POP3、HTTP、FTP、SSH 、CPU load、disk usage、system logs)
    • 2) 允许用户开发简单的自己需要的检查服务,支持很多开发语言(shell scripts、C++、Perl、ruby、Python、PHP、C#等),可以指定自己编写的Plugin通过网络收集数据来监控任何情况(温度、警告……)
    • 3) 可以通过配置Nagios远程执行插件远程执行脚本,事先定义事件处理程序, 当对象出现问题时,自动调用对应的处理程序;
    • 4) 可并行服务检查
    • 5) 可以支持并实现对主机的冗余监控
    • 6) 自动日志循环
    • 7) 包括Web界面可以查看当前网络状态,通知,问题历史,日志文件等

    1.2 nagios的工作原理

    Nagios的功能是监控服务和主机,但是他自身并不包括这部分功能,所有的监控、检测功能都是通过各种插件来完成的。

    1) 启动Nagios后,它会周期性的自动调用插件去检测服务器状态,同时Nagios会维持一个队列, Nagios 执行安装在它里面的check_nrpe 插件,并告诉check_nrpe 去检测哪些服务;

    2) 通过SSL,check_ nrpe 连接远端机子上的NRPE daemon;

    3) NRPE 运行本地的各种插件去检测本地的服务和状态( check_disk,check_load 等) ,利用这些插件可以方便的监控很多服务状态,check_disk是检查磁盘空间的插件,check_load是检查CPU负载的,等等。每一个插件可以通过运行./check_xxx –h 来查看其使用方法和功能;

    4) 最后,NRPE 把检测的结果传给主机端的check_nrpe,check_nrpe 再把结果送到Nagios 状态队列中,所有插件返回来的状态信息都进入队列;
    5) Nagios每次都从队首开始读取信息,并进行处理后,把状态结果通过web显示出来。
     
    Nagios可以识别4种状态返回信息,即 0(OK)表示状态正常/绿色、1(WARNING)表示出现警告/黄色、2(CRITICAL)表示出现非常严重的错误/红色、3(UNKNOWN)表示未知错误/深黄色。Nagios根据插件返回来的值,来判断监控对象的状态,并通过web显示出来,以供管理员及时发现故障。

    2 Nagios搭建

    2.1 基础安装

    Nagios用C/C++完成.在安装的时候需要编译.Nagios提供了一个Web的管理页面.页面部分用PHP实现.同时Nagios的很多脚本都是由CGI实现.所以WEB服务器也必须支持CGI.以便于在远程执行相关的命令.

    rpm -q gcc glibc glibc-common gd gd-devel xinetd openssl-devel libxml2 libxml2-devel
    
    gcc-4.1.2-54.el5
    glibc-2.5-107.el5_9.5
    glibc-common-2.5-107.el5_9.5
    gd-2.0.33-9.4.el5_4.2
    package gd-devel is not installed
    package xinetd is not installed
    openssl-devel-0.9.8e-26.el5_9.1
    

    安装前需要先检查基本环境是否满足,如果发现有没有安装的依赖包.则需要单独的进行安装.安装使用yum即可

    yum install xinetd gd-devel libxml2 libxml2-devel
    

    安装好基本的运行环境后.就可以开始搭建Web环境.这里的Web容器选用Apache.执行下面代码,完成Apache以及PHP的安装.两段脚本都在/usr/local下执行

    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
    
    
    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
    make && make install
    

    安装Mysql[用于持久化存储,可视化配置等功能]. 安装Mysql的时候先确认下是否已经安装了..如果没有则运行yum安装.
    rpm -q mysql mysql-devel mysql-server
    yum install mysql mysql-devel mysql-server

    安装好以后需要简单的配置下Mysql.确认old_passwords=0的值是不是0.如果不是,则修改为0

    [root@localhost mysql]# vim /etc/my.cnf 
    [mysqld]
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    user=mysql
    # Default to using old password format for compatibility with mysql 3.x
    # clients (those using the mysqlclient10 compatibility package).
    old_passwords=0
    # Disabling symbolic-links is recommended to prevent assorted security risks;
    # to do so, uncomment this line:
    # symbolic-links=0
    [mysqld_safe]
    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid
    

    重启mysql服务即可
    service mysqld restart

    2.2 Nagios安装

    在完成Nagios的基本环境安装后,即可开始编译安装Nagios.执行目录依然是/usr/local.Nagios在启动的时候会使用一个叫Nagios的账号.所以第一步我们需要创建这个账号并且赋给他必要的执行权限.
    添加用户

    useradd -s /sbin/nologin nagios
    mkdir /usr/local/nagios
    chown -R nagios.nagios /usr/local/nagios
    

    安装Nagios

    wget http://hivelocity.dl.sourceforge.net/project/nagios/nagios-4.x/nagios-4.0.0/nagios-4.0.0.tar.gz
    tar zxvf  nagios-4.0.0.tar.gz
    cd nagios
    ./configure --prefix=/usr/local/nagios
    make all
    make install
    make install-init
    make install-config
    make install-commandmode
    

    make install说明:

    第一步执行make install安装主要的程序、CGI及HTML文件
    第二步执行make install-init的步骤,它的作用是把nagios做成一个运行脚本,使nagios随系统开机启动
    第三步执行 make install-config 把配置文件的例子复制到nagios的安装目录。
    第四步执行 make install-commandmode 给外部命令访问nagios配置文件的权限。

    检查是否安装成功

    安装完后 查看一下在/usr/local/nagios下是否存在etc、bin、 sbin、 share、 var这五个目录,如果存在则可以表明程序被正确的安装到系统了。这5个目录的作用是:

    Bin     Nagios执行程序所在目录,这个目录只有一个文件nagios
    Etc     Nagios配置文件位置,初始安装完后,只有几个*.cfg-sample文件
    Sbin    Nagios Cgi文件所在目录,也就是执行外部命令所需文件所在的目录
    Share   Nagios网页文件所在的目录
    Var     Nagios日志文件、spid 等文件所在的目录
    

    2.3 Apache配置

    Nagios在刚创建的时候不具备任何的插件.Nagios的各项的监控主要是依靠插件完成.所以我们在启动Nagios之前. 需要先安装Nagios的插件.在/usr/local下

    wget https://www.nagios-plugins.org/download/nagios-plugins-1.5.tar.gz
    tar zxvf  nagios-plugins-1.5.tar.gz
    cd nagios-plugins-1.5
    ./configure --prefix=/usr/local/nagios
    make && make install
    

    插件安装完成后可以去/usr/local/nagios/libexec路径下确认插件是不是已经安装完毕

    插件安装完成后开始配置Apache服务器.以便可以使用浏览器来访问Nagios.

    Apache配置主要集中在httpd.conf文件内.通常需要配置的参数包括使用的用户组.扩展PHP功能,以及制定Nagios的目录等.具体的操作如下.

    vi /usr/local/apache2/conf/httpd.conf
    
    找到
        User daemon 
        Group daemon 
    修改为 
        User nagios 
        Group nagios
    
    
    然后找到 
        <IfModule dir_module> 
          DirectoryIndex index.html 
        </IfModule> 
    修改为 
        <IfModule dir_module> 
          DirectoryIndex index.html index.php 
        </IfModule>
    

    接着增加如下内容:

    AddType application/x-httpd-php .php 
    
    ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin"
    <Directory "/usr/local/nagios/sbin">
         Allow from all
    </Directory>
    
    Alias /nagios "/usr/local/nagios/share"
    <Directory "/usr/local/nagios/share">
         Allow from all
    </Directory>
    

    至此.nagios的安装已经基本完成.我们可以启动Nagios来确认下.

    /usr/local/apache2/bin/apachectl start
    
    访问http://<IP>/nagios
    

    这时只是启动了Nagios的Web容器.而Nagios本身实际上是没有启动的.启动Nagios需要执行.Service Nagios start

    nagiosrun.png

    安装可能问题

    nagios web界面提示
    It appears as though you do not have permission to view information for any of the services you requested…
    打开cgi.cfg配置文件,里面有个参数:
    use_authentication=1
    为了保障系统的安全性,nagios设置了这个参数,默认为1,改为0即可。

    2.4 带安全认证的配置

    在上个配置方案中.我们将use_authentication修改为0.这样任何人都可以访问nagios服务器.为了安全性考虑.在这种模式下.nagios不允许用户远程对nagios进行操作.如修改服务的某项状态,重启nagios服务器等.这时.我们就不得不开启use_authentication选项.具体的做法如下.

    在apache的配置文件中.对于web地址的访问控制的写法如下

    vi /usr/local/apache2/conf/httpd.conf
    
    #setting for nagios 
    ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin" 
    <Directory "/usr/local/nagios/sbin"> 
         AuthType Basic 
         Options ExecCGI 
         AllowOverride None 
         Order allow,deny 
         Allow from all 
         AuthName "Nagios Access" 
         AuthUserFile /usr/local/nagios/etc/htpasswd             //用于此目录访问身份验证的文件 
         Require valid-user 
    </Directory> 
    Alias /nagios "/usr/local/nagios/share" 
    <Directory "/usr/local/nagios/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 
    </Directory>
    

    设置好apache之后需要生成密钥.

     /usr/local/apache2/bin/htpasswd -c /usr/local/nagios/etc/htpasswd <你的账号>
    //输入密码
    //确认密码
    

    最后在cgi.cfg配置文件中.给你的账号分配权限.

    authorized_for_system_information=nagiosadmin, <你的账号>
    authorized_for_configuration_information=nagiosadmin, <你的账号>
    authorized_for_system_commands= <你的账号>
    authorized_for_all_services=nagiosadmin, <你的账号>
    authorized_for_all_hosts=nagiosadmin, <你的账号>
    authorized_for_all_service_commands=nagiosadmin, <你的账号>
    authorized_for_all_host_commands=nagiosadmin, <你的账号>
    

    这时重启apache服务器.再次登录nagios的时候就需要输入账号密码了,而同时,也可以使用web页面来管理nagios服务

    2.5 Nagios汉化

    Nagios软件功能强大,而且在开源的世界里有很好口碑,但它有一个不足:对中文的支持不好,不管是界面菜单还是里面安装操作提示,没有多少可以提供中文支持,这意味着使用者必须熟悉英文。国内有Nagios的爱好者为了解决这一问题.为Nagios提供了中文版.安装Nagios中文版的过程如下:

    注意:汉化后命令将不能使用,如重启服务,修改监控的参数等.为了解决这个问题.可以在安装汉化前备份/usr/local/nagios/sbin/cmd.cgi文件.并在汉化结束后用备份的文件覆盖汉化后的文件即可.

    wget http://softlayer-dal.dl.sourceforge.net/project/nagios-cn/sourcecode/zh_CN%203.2.3/nagios-cn-3.2.3.tar.bz2
    bzip2 -d nagios-cn-3.2.3.tar.bz2
    tar xvf nagios-cn-3.2.3.tar
    cd nagios-cn-3.2.3
    ./configure --prefix=/usr/local/nagios
    make all
    make install
    

    由于汉化是由国内的爱好者提供.所以Nagios的汉化只支持3.2.3版本.在Nagios4.0安装好后再安装汉化插件.有些参数是不能被识别的.在编者安装的测试机器上.分别为nagios.cfg的第307,1022,1306行.在执行安装时.可以先尝试启动Nagios.这时如果配置文件不当.Nagios会提示错误信息.依据错误信息修改配置文件即可

    最后Nagios汉化后的结果如下:

    cnagiosrun.png

    3 Nagios配置

    3.1 配置简介

    Nagios 安装完毕后,默认的配置文件在/usr/local/nagios/etc目录下。Nagios所有的管理都可以通过配置文件来进行设置.默认的配置文件如下.
    在配置文件修改完成后.可以使用/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/ nagios.cfg来验证配置文件是否正确.如果配置有误.该工具会准确的提示错误的文件及行号.

    配置文件 说明

    cgi.cfg 控制 CGI 访问的配置文件
    nagios.cfg  Nagios 主配置文件
    resource.cfg    变量定义文件,又称为资源文件,在此文件中定义变量,以便由其他配置文件引用,如$USER1$
    objects objects 是一个目录,在此目录下有很多配置文件模板,用于定义 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 主机的一个配置文件模板,默认没有启用此文件
    备注: Nagios 在配置方面非常灵活,默认的配置文件并不是必需的。可以使用这些默认的配置文件,也可以创建自己的配置文件,然后在主配置文件 nagios.cfg 中引用即可。
    

    3.2 定义检查时间段

    定义检查时间段,检查时间段被用于指定Nagios的监控主机或者是Nagios的监控服务在什么情况下工作.通常他的目录在objects/ timeperiods.cfg

    define timeperiod{
        timeperiod_name     24x7                            #名称
        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
    }
    

    3.3 定义联系人

    联系人,联系人组 用来定义通知时的接受人.这里可以定义接受方式.联系人一般的定义文件为obejcts/contacts.cfg

    define contact{
        contact_name    联系人的名称
        alias   联系人别名
        contactgroups   联系人的组名称//这里不是加入组 而是引用组
        host_notifications_enabled  [0/1]是否发送主机通知
        service_notifications_enabled   [0/1]是否发送服务通知
        host_notification_period    主机通知时间段
        service_notification_period 服务通知时间段
        host_notification_options   [d,u,r,n]定义哪些状态下可以发送
        service_notification_options    [w,u,c,r,n] 定义哪些状态下可以发送
        host_notification_commands  需要通知时的发送命令
        service_notification_commands   需要通知时的发送命令
        email   定义收件人的邮件地址$CONTACTEMAIL$
        pager   寻呼机?
        addressx    定义通讯地址,手机等$CONTACTADDRESSx$
        retain_status_information   [0/1]是否允许状态信息保留
        retain_nonstatus_information    [0/1]是否允许非状态信息保留
        }
    
    
    
    define contactgroup{
        contactgroup_name   组名
        alias   组别名
        members 将联系人加入该组
        contactgroup_members    将分组加入该组
        }
    

    3.4 定义宏及命令

    宏包括系统定义的以及自己定义的.系统宏包括HOSTADDRESS,ARGn等.其中系统定义的宏可以在这里找到.命令的通常文件是objects/ commands.cfg.
    如果想使用自己定义的宏.如USER1.则可以编辑resource.cfg文件.以的形式来定义自己所需要的宏

    定义命令

    定义命令.定义命令用于指定 主机/服务监控, 主机/服务通知 主机/服务时间处理句柄等.在Nagios中.可以使用宏.

    define command{
        command_name        命令名称
        command_line        命令行.这里指定执行命令的完整路径及参数.可以使用宏,
    }
    

    3.5 定义Host及Host组

    Host以及host组主要用来描述需要监控的物理主机,工作站,设备等.详细的配置参数如下.host的一般定义文件为 objects/hosts.cfg

    define host{
        host_name   主机名, $HOSTNAME$使用的是这个字段
        alias   别名$HOSTALIAS$使用了这个字段
        display_name    显示名称
        address IP地址
        hostgroups  Host所在的主机组 以逗号分割
        check_command   指定检查主机的命令
        max_check_attempts  对主机最大的检查次数.如果不想检查主机是否存活check_command留空. max_check_attempts这个值最少是1用于表示检查到几次异常报警
        check_interval  检查时间间隔.单位是分钟
        retry_interval  重试次数.发现异常后多久重试一次,触发到重试上限后发送异常报警 单位是分钟
        active_checks_enabled   [0/1] 是否启用主动监控
        passive_checks_enabled  [0/1] 是否启动被动监控
        check_period    定义需要检查的时间段.需要在时间段文档中定义
        event_handler   自定义事件处理程序.(主机UP/Down是生效)
        event_handler_enabled   [0/1]是否启动事件处理程序
        process_perf_data   [0/1] 设定启用进程性能数据记录
        retain_status_information   [0/1] 设定启用状态信息保存功能。当Nagios重新启动的时候不会是空数据,而是先显示上次离线时最后保留的状态数据。
        retain_nonstatus_information    [0/1] 设定启用非状态信息保存功能。当Nagios重新启动的时候不会是空数据,而是先显示上次离线时最后保留的非状态数据。
        contacts    通知人
        contact_groups  通知组
        notification_interval   主机在故障后 再次发送通知的间隔时间
        first_notification_delay    主机故障后 第一次发送时间的延迟
        notification_period 主机故障时发送通知的时间范围
        notification_options    [d,u,r] d代表down奔溃;u代表不可达 r代表recover恢复
        notifications_enabled   [0/1]  是否发送通知
        register    0 表示是一个模板
    
        use generic-host    #use 表示引用
        }   
    
    define hostgroup{
        hostgroup_name  Host组名
        alias   组别名
        members 填写已经声明的host 将host引入该组,以逗号分隔
        hostgroup_members   填写已经声明的组 引入子组
        notes   说明 用于界面显示
    }
    

    3.6 定义服务及服务组

    服务表示需要主机上运行的服务有哪些.这里的服务可以用来表示像POP,HTTP等协议.可以用来表示ping,连接数等系统参数.也可以表示在主机上运行的任务.是一个很宽泛的概念.服务一般所在文件为objects/services.cfg

    define service{
        host_name   主机名,这里指定的是host的名字 多个host之前用,隔开
        hostgroup_name  组名.监控主机组上的所有服务.通常host_name和group只指定一个
        service_description 服务的描述信息
        display_name    服务的显示名称
        parents 服务依赖 很少使用到
        servicegroups   指定多个服务组 使多个服务组使用相同配置
        check_command   用于检查这个服务的命令
        max_check_attempts  重试次数
        check_interval  检查间隔
        retry_interval  重试间隔
        active_checks_enabled   主动监控
        passive_checks_enabled  被动监控
        check_period    监控的时间范围
        event_handler   自定义事件处理
        event_handler_enabled   启用事件处理
        process_perf_data   [0/1] 记录性能参数
        retain_status_information   [0/1] 设定启用状态信息保存功能。当Nagios重新启动的时候不会是空数据,而是先显示上次离线时最后保留的状态数据。
        retain_nonstatus_information    [0/1] 设定启用非状态信息保存功能。当Nagios重新启动的时候不会是空数据,而是先显示上次离线时最后保留的非状态数据。
        notification_interval   主机在故障后 再次发送通知的间隔时间
        first_notification_delay    通知延迟
        notification_period 主机故障时发送通知的时间范围
        notification_options    [w,u,c,r,] w代表warning告警 u代表unknown未知 c代表critical严重 r代表recover恢复 d代表down奔溃
        notifications_enabled   [0/1] 是否通知
        contacts    联系人
        contact_groups  联系人组
        }
    
    
    define servicegroup{
        servicegroup_name   服务组名称
        alias   服务组名称
        members 将服务加到服务组内
        servicegroup_members    将服务组加到服务组内,子组
        notes   说明 用于界面展示
        }
    

    服务组将已经定义的主机和主机的服务放到一起.主要是用于生成报表.比如运行某一服务的所有机器一周内的情况等.
    Members的写法是 主机,服务,主机2,服务2这种
    服务没有名称,以描述信息来查找

    3.7 综合

    上面讲述了Nagios的主要的配置参数.以及其所在的配置文件.由于Nagios的配置参数繁多.所以Nagios还支持templates.cfg.配置模板.配置模板内的所有的对象可以被继承.继承使用use字段.如 use locate_host 继承后如果在重新定义模板内存在的值,nagios会以自己定义的值为准.

    加载自己的配置文件.nagios可以加载自己的配置文件.做法是在nagios.cfg内使用形如cfg_file=/usr/local/nagios/etc/objects/commands.cfg的格式来加载自己的配置文件.

    在配置文件修改完成后.可以使用
    /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
    来验证配置文件是否正确

    4 远程监控

    nrpe.png

    如图所示.Nagios是可以支持分布式监控的.器分布式监控主要依赖于四个组件.
    NSCA是Nagios的被动监控插件
    NRPE是Nagios的主动插件.这两个插件组合在一起,实现了Nagios的分布式监控
    NSClient++是Nagios的Window平台的插件.该插件功能不可扩展
    NDOUtils是Nagios将数据持久化到Mysql等数据库中的工具
    SNMP是网络协议.可以用于监听路由,交换机等网络设备是否正常

    4.1 使用NRPE做Nagios主动监控

    4.1.1 NRPE安装

    checknrpe.png

    NRPE做Nagios的主动监控流程大体上如上图所示.Nagios会依据设置定期的调用check_nrpe插件.check_nrpe则通过网络(未验证是不是ssl)来调用NRPE.远程机器上的NRPE获取到请求后.调用本地插件来获取需要监控的信息.最后监控信息再通过NRPE返回到Nagios上并显示.

    NRPE的安装和使用要分为监控机和被监控机2方面来进行.

    在被监控机上安装NRPE的插件

    检查安装需要的依赖包

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

    使用yum来安装好所有缺少的包,如

    yum install xinetd gd-devel libxml2 libxml2-devel
    

    增加nagios插件运行时需要的账号及必要权限

    useradd -s /sbin/nologin nagios
    mkdir /usr/local/nagios
    chown -R nagios.nagios /usr/local/nagios
    

    下载并安装插件

    wget https://www.nagios-plugins.org/download/nagios-plugins-1.5.tar.gz
    tar zxvf  nagios-plugins-1.5.tar.gz
    cd nagios-plugins-1.5
    ./configure --prefix=/usr/local/nagios
    make && make install
    

    修改目录权限并复制插件

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

    下载NRPE并安装.在/usr/locate下

    wget http://prdownloads.sourceforge.net/sourceforge/nagios/nrpe-2.13.tar.gz
    tar zxvf nrpe-2.13.tar.gz
    cd nrpe-2.13
    ./configure
    make all
    

    安装NRPE的守护进程,配置文件以及xinetd服务等. Xinetd是运行NRPE守护进程必要的组件.

    make install-daemon
    make install-daemon-config
    make install-xinetd
    

    在nrpe刚刚安装好后.默认不运行任何外部的主机访问.这时候需要修改/etc/xinetd.d/nrpe文件, 在only_form上添加允许监控的主机.如

    only_from       = 127.0.0.1 192.168.39.250
    

    修改/etc/services文件.为Nrpe添加一个端口.如

    nrpe            5666/tcp                        #NRPE
    

    测试NRPE是否安装完成.

    service xinetd restart
    [root@localhost etc]# /usr/local/nagios/libexec/check_nrpe -H 127.0.0.1
    NRPE v2.13
    

    这里能返回端口号则表示NRPE服务可以正常的使用了

    在监控端

    在监控端安装NRPE很简单.这里假设Nagios已经安装完毕.我们只需要扩展NRPE即可.扩展NRPE执行以下命令即可

    wget http://prdownloads.sourceforge.net/sourceforge/nagios/nrpe-2.13.tar.gz
    tar zxvf nrpe-2.13.tar.gz
    cd nrpe-2.13
    ./configure
    make all
    make install-plugin
    

    同样.我们可以来验证是否可以访问远程的nrpe服务

    [root@localhost nrpe-2.13]# /usr/local/nagios/libexec/check_nrpe -H 192.168.39.251
    NRPE v2.13
    

    4.1.2 NRPE使用

    由nrpe的关系图可以看到,NRPE实际上是使用check_nrpe来远程调用NRPE,然后再由NRPE调用本地的插件.所以使用NRPE也分为2步.一部分是在监控机配置.用于加载定义NRPE要监测的服务.另一部分是在被监控机配置.主要定义监控的命令.具体操作如下

    配置监控主机

    在监控主机上的配置与前文配置明细相符.

    定义NRPE插件所在的远程机器(Host组).

    [root@localhost bin]# vi /usr/local/nagios/etc/objects/hosts.cfg 
    
    define host{
            use                    linux-server
            host_name               SolrServer
            alias                   192.168.39.251
            address                 192.168.39.251
     }
    #定义一个主机组
    define hostgroup{
            hostgroup_name          bsmart-servers
            alias                    bsmart servers
            members                SolrServer
     }
    

    定义NRPE插件需要使用的命令

    vi /usr/local/nagios/etc/objects/commands.cfg
    define command{
            command_name        check_nrpe
            command_line        $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
    }
    

    定义NRPE插件所需要监控的服务

    [root@localhost bin]# vi /usr/local/nagios/etc/objects/services.cfg 
    
    define service{
            use                     local-service
            host_name               SolrServer
            service_description     checkSolr
            check_command           check_nrpe!check_solr
    }
    

    重启nagios以加载配置

    /etc/init.d/nagios restart
    

    配置被监控主机

    在被监控主机上配置需要监控的命令

    [root@localhost etc]# vi /usr/local/nagios/etc/nrpe.cfg
    追加..
    command[check_solr]=java -jar /usr/local/nagios/myPlugin/check_solr.jar -W solr -p 8080
    

    command 括号内的check_solr即check_nrpe插件!后面的值

    重启xinetd服务以加载配置
    service xinetd restart

    可以看到

    checksolr.png

    4.2 使用NSCA做Nagios被动监控

    4.2.1 NSCA安装

    checknsca.png

    NSCA做Nagios的被动监控流程大体上如上图所示.可以说和NRPE的执行流程刚好相反.Nagios依赖于NSCA接受被监控机器主动传来消息.调用顺序为插件主动的监控服务.得到监控状态后使用send_nsca模块将插件状态返回给NSCA.Nagios再读取NSCA生成的外部文件获得被监控服务状态.

    NSCA的安装也分为2步.其监听服务器在Nagios机器上.而发送脚本则安装在被监控机器上

    监控主机

    在Nagios已经安装完成后.使用如下命令下载并安装NSCA

    wget http://nchc.dl.sourceforge.net/sourceforge/nagios/nsca-2.7.2.tar.gz
    tar zxvf nsca-2.7.2.tar.gz
    cd nsca-2.7.2
    ./configure
    make all
    cp src/nsca /usr/local/nagios/bin/
    cp src/ send_nsca /usr/local/nagios/bin/
    cp sample-config/nsca.cfg /usr/local/nagios/etc/
    cp sample-config/send_nsca.cfg /usr/local/nagios/etc/
    cp sample-config/nsca.xinetd /etc/xinetd.d/nsca
    chomd 777 /usr/local/nagios/etc/
    

    修改/etc/services文件.为NSCA添加一个端口.如

    nsca            5667/tcp                        #NRPE
    

    也要修改only_from增加需要允许访问的地址

    启动service xinetd start

    被监控主机

    被监控主机上安装NSCA很简单.只需要执行这段脚本即可.无需安装其他的服务

    wget http://nchc.dl.sourceforge.net/sourceforge/nagios/nsca-2.7.2.tar.gz
    tar zxvf nsca-2.7.2.tar.gz
    cd nsca-2.7.2
    ./configure
    make all
    cp src/nsca /usr/local/nagios/bin/
    cp src/ send_nsca /usr/local/nagios/bin/
    cp sample-config/nsca.cfg /usr/local/nagios/etc/
    cp sample-config/send_nsca.cfg /usr/local/nagios/etc/
    cp sample-config/nsca.xinetd /etc/xinetd.d/nsca
    chomd 777 /usr/local/nagios/etc/
    

    4.2.2 NSCA使用

    NSCA的使用主要是编辑监控机器上的配置文件,用来定义需要监控的各项参数.

    监控主机

    定义监控所需要的命令

    define command{
            command_name        check_dummy
            command_line        /usr/local/nagios/libexec/check_dummy $ARG1$
    }
    

    定义监控所需要的服务

    [root@localhost ~]# vi /usr/local/nagios/etc/objects/services.cfg 
    define service{
            use                     local-service
            host_name               SolrServer
            service_description     checkSolr
            check_command           check_dummy!0
            active_checks_enabled   0
            passive_checks_enabled  1
    }
    

    active_checks_enabled 0 关闭主动监控
    passive_checks_enabled 1 打开被动监控

    这里使用了之前定义的Host.则不再额外定义Host.
    重启服务以加载配置

    service xinetd restart
    service nagios restart
    
    客户机

    客户机上可以直接测试.测试的方式就是使用send_nsca发送一个数据包即可.如果是插件内使用nsca.则可以使用类似的方式调用shell.

    printf "SolrServer\tcheckSolr\t2\tJustTest\n" | /usr/local/nsca-2.7.2/src/send_nsca -H 192.168.39.250 -c /usr/local/nagios/etc/send_nsca.cfg
    

    发送包解释
    SolrServer host服务器名称,要和service host_name设置的一样
    checkSolr 服务描述 要和service service_description一样
    2 表示检测后的运行状态
    JustTest 状态值的描述信息

    格式一定要严格按照上述编写.否则nagios无法获取service的状态

    /usr/local/nsca-2.7.2/src/send_nsca 是发送脚本所在的位置
    -H                              是nagios的主机地址
    -c                              是脚本所在地址
    

    Nasc的日志在/var/log/messages内

    4.3 NSCP使用

    checknscp.png

    NSCP是由NSClient++发展而来的.NSClient++在3.9版本以后称为NSCP.NSCP主要的功能是做window平台下的监控.与NRPE和NSCA方式不同.在windows下的NSCP并不提供扩展功能.即只能监控NSCP所包含的服务.目前NSCP所包含的服务有CPU,内存,硬盘空间,进程等

    NSCP的安装过程如下:

    下载地址: http://nsclient.org/nscp/downloads ,直接下载下来的是msi包 。同windows下其他软件的安装一样,直接下一步下一步就好了。

    在NSCP安装完毕后.在服务内可以看到
    nscpservice.png

    这里选择启动NACP即可.

    NACP在被监控机器上配置完成后需要配置Nagios服务器上的服务.与之前的nrpe的过程类似,在监控主机上做的就3件事情
    1.安装监控windows的插件(已经默认安装了,check_nt)
    2.定义命令
    3.定义要监控的项目

    定义命令

    vi /usr/local/nagios/etc/commands.cfg
    增加下面的内容
    define command{
            command_name    check_nt
            command_line      $USER1$/check_nt -H $HOSTADDRESS$ -p 12489  -v $ARG1$ $ARG2$
    }
    

    增加监控项目,NSCP可以配置的服务如下(除了check_command 其他和配置服务监控一样):

    1)监控windows服务器运行的时间
    check_command           check_nt!UPTIME
    2)监控Windows服务器的CPU负载,如果5分钟超过80%则是warning,如果5分钟超过90%则是critical
    check_command           check_nt!CPULOAD!-l 5,80,90
    3)监控Windows服务器的内存使用情况,如果超过了80%则是warning,如果超过90%则是critical.
    check_command           check_nt!MEMUSE!-w 80 -c 90
    4)监控Windows服务器C:\盘的使用情况,如果超过80%已经使用则是warning,超过90%则是critical
    check_command           check_nt!USEDDISKSPACE!-l c -w 80 -c 90
    注:-l后面接的参数用来指定盘符
    5)监控Windows服务器D:\盘的使用情况,如果超过80%已经使用则是warning,超过90%则是critical
    check_command           check_nt!USEDDISKSPACE!-l d -w 80 -c 90
    6)监控Windows服务器的W3SVC服务的状态,如果服务停止了,则是critical
    check_command           check_nt!SERVICESTATE!-d SHOWALL -l W3SVC
    7)监控Windows服务器的Explorer.exe进程的状态,如果进程停止了,则是critical
    check_command           check_nt!PROCSTATE!-d SHOWALL -l Explorer.exe
    

    5 Nagios插件扩展

    正如前文所述一样,Nagios本身并不提供具体的监控功能.其所有的监控指标都是通过插件来扩展.如果Nagios的现有插件不满足我们自己的监控需求的情况下 ,我们可以自己编写插件来扩展Nagios.Nagios扩展插件的方式很简单.只需要遵守Nagios的插件协议即可

    插件的协议

    Nagios的插件是基于定时调用的.系统在按时的调用插件后.会检查插件的返回状态值以及打印的文本信息.插件的状态值标志插件检查的系统服务的状态.而打印的文本信息可以是对当前状态的描述.Nagio的状态值如下

    插件返回值   服务状态    主机状态
    0   正常(OK)  运行(UP)
    1   告警(WARNING) 运行(UP)但是出现问题
    2   紧急(CRITICAL)    宕机(DOWN)
    3   未知(UNKNOWN) 不可达(UNREACHABLE)
    

    注:由于Nagios的插件式基于定时调用的.所以很显然,Nagios的插件是和语言无关的.只要Nagios或者NRPE的运行环境上有执行该插件的语言环境即可.

    Nagios插件除了返回这几个值以外.还可以支持返回性能数据.插件返回的性能数据是由主机与服务检测时插件检测结果带出来的外部数据。特定插件的数据,象丢包率、磁盘空闲空间、处理器负荷、当前登录的用户数等,是在执行时由插件自已来测量出来的任何一种类型数据。特定插件数据是可选项并非每个插件都有。

    如果希望插件返回性能数据.则在打印的结果中添加|符号,如check_ping中

    PING ok - Packet loss = 0%, RTA = 0.80 ms | percent_packet_loss=0, rta=0.80
    

    Nagios的守护程序并不直接处理插件的性能数据,因而它并不关心在性能数据里有什么东西。对性能数据并没有什么限制与格式约束,但是,如果要用外部构件来处理性能数据(如PerfParse),外部构件需要插件以固定格式来输出性能数据。这要审视将要使用的外部构件里相关文档。

    插件的形式
    由于Nagios的插件于语言无关,只和返回值有关.所以Nagios的插件主要有2种形式.

    1) 本地监听 如读取磁盘磁盘信息.本地的日志分析等.插件在按照一定的逻辑检查完本地的服务是否正常后,按照协议返回插件的返回值即可

    2) 网络监听 插件可以利用网络来检测远程的服务.可以用来监测一些有网络协议的服务.如Solr,Zookeeper等

    注:由于Nagios只有这2种形式.所以.如果我们要监测自己的业务是否正常.就需要打印日志或者是提供监控的网络服务.

    插件的加载
    按照一定的规则将插件编写完成后.就需要将插件加载到Nagios内.插件的加载分为2类.一种是加载本地插件.另一种是远程调用被监控机器上的插件.这两种方式都属于主动调用.Nagios除了支持主动调用以外,还支持被动调用.即插件决定什么时候执行,并在执行后将结果通过NASC传回Nagios

    注:如果是编写网络插件.则只要在监控主机上加载即可.不需要配置NRPE
    注:Nagios在Win下的插件不可扩展.NASC用Shell编写,所以Win下也不能执行.如果需要监控Win下的服务.可以使用Nagios自带的不可扩展的插件或者是实现类似NASC的脚本.直接将消息发送给Nagiso

    plugin.png

    NagiosServer 是Nagios.他可以加载本地的插件NetPlugins,NERP-Plugin以及其他
    NetPlugins是用于网络监听的插件.他可以利用网络协议来获取远程机器上服务的运行状态
    NERP-Plugin是Nagios实现远程监控的一个工具.他可以用来执行远程服务器上的插件来获取信息.如远程主机上的硬盘使用情况等.

    NASC是Nagios实现被动监控的一个工具.NASC只负责传输插件的最终运行结果.插件如何调用需要自己控制.

    如果是加载本地插件.则分为以下几步

    1 定义插件的命令(编辑commands.cfg)
    2 定义要监控的服务(编辑localhost.cfg)
    

    如果是加载NERP.则一般需要如下几步(假设NERP的环境已经配置好).

    1   定义插件的命令(编辑commands.cfg)
    2   定义要的主机及主机组 (编辑hosts.cfg)
    3   定义要监控的服务(编辑services.cfg )
    4   修改nagios.cfg文件以加载hosts和services文件
    5   在需要监控的机器上.修改nrpe.cfg文件,添加插件的命令.
    

    NASC配置方式和NERP类似,在下面介绍实例的时候再细说

    经过以上配置.插件应该就可以正常的工作了.

    插件编写和配置示例

    为了演示Nagios插件的编写和配置的示例.这里用python和java来开发一个相同的插件.插件用来监控Solr的服务是否正常.python版本工作在nagios的服务器上.而java版本工作在安装了NERP的被监控机器上.

    Python部分的代码如下:

    #!/usr/bin/env python
    
    
    import urllib, json, sys
    from optparse import OptionParser
    
    def listcores():
        status_cmd  = baseurl + core_admin_url + urllib.urlencode({'action':'status','wt':'json'})
        cores       = []
    
        res         = urllib.urlopen(status_cmd)
        data        = json.loads(res.read())
    
        core_data   = data['status']
    
        for core_name in core_data:
            cores.append(core_name)
    
        return cores
    
    def solrping(core):
        ping_cmd = baseurl + core + '/admin/ping?' + urllib.urlencode({'wt':'json'})
    
        res = urllib.urlopen(ping_cmd)
        data = json.loads(res.read())
    
        status = data.get('status')
    
        return status
    
    def main():
        global baseurl, core_admin_url, threshold_warn, threshold_crit
    
        cmd_parser = OptionParser(version="%prog 0.1")
        cmd_parser.add_option("-p", "--port", type="string", action="store", dest="solr_server_port", help="SOLR Server port")
        cmd_parser.add_option("-W", "--webapp", type="string", action="store", dest="solr_server_webapp", help="SOLR Server webapp path")
    
        (cmd_options, cmd_args) = cmd_parser.parse_args()
    
        if not (cmd_options.solr_server_port and cmd_options.solr_server_webapp):
            cmd_parser.print_help()
            return(3)
    
        solr_server         = "127.0.0.1"
        solr_server_port    = cmd_options.solr_server_port
        solr_server_webapp  = cmd_options.solr_server_webapp
    
        core_admin_url      = 'admin/cores?'
        baseurl             = 'http://' + solr_server + ':' + solr_server_port + '/' +  solr_server_webapp + '/'
    
        pingerrors          = []
    
        try:
            cores = listcores()
        except IOError as (errno, strerror):
            print "CRITICAL: {0} - {1}".format(errno,strerror)
            return(2)
        except (ValueError, TypeError):
            print "CRITICAL: probably couldn't format JSON data, check SOLR is ok"
            return(3)
        except:
            print "CRITICAL: Unknown error" 
            return(3)
    
        # XXX: This is ugly...
        try:
            for core in cores:
                if solrping(core) != 'OK':
                    pingerrors.append(core)
        except IOError as (errno, strerror):
            print "CRITICAL: {0} {1} ".format(errno, strerror)
            return(2)
        except KeyError as strerror:
            if 'slave' in strerror: 
                print "CRITCAL: This doesn't seem to be a slave, are you sure you meant to call -r?"
                return(2)
            else:
                print "CRITICAL: unknown error (error string: {0})".format(strerror)
                print strerror
                return(3)
    
        if pingerrors:
            print "CRITICAL: error pinging core(s) - ",
            print ", ".join(pingerrors)
            return(2)
        else:
            print "OK: no issues"
            return(0)
    
    if __name__ == '__main__':
        sys.exit(main())
    

    可以看到,插件接受参数-W (Solr的工作目录) –p(Solr工作端口),然后以拼接URL的方式访问Solr服务器,Solr服务器返回JSON格式的数据.解析并确定Solr服务的状态.插件可以接收IP地址用于监控远程服务.但是这里为了演示NERP的插件加载以及JAVA版本的插件使用.默认就是监听本地的Solr服务的状态.

    插件编写好的以后需要先测试是否可用.上传插件到目录(/usr/local/nagios/plugins),可以任意指定.在正常开启Solr服务后.

    [root@localhost plugins]# python check_solr.py -W solr -p 8080
    OK: no issues
    

    OK 插件可以正常工作.配置加载插件.

    [root@localhost bin]# vi /usr/local/nagios/etc/objects/commands.cfg
    
    追加..
    
    define command{
    command_name    check_solr
     command_line    python /usr/local/nagios/plugins/check_solr.py -W $ARG1$ -p $ARG2$
    }
    
    [root@localhost bin]# vi /usr/local/nagios/etc/objects/localhost.cfg  
    追加…
    
    define service{
            use                             local-service
            host_name                       localhost
            service_description                     CheckSolr
            check_period                        24x7
            check_command                       check_solr!solr!8080
            notifications_enabled                   0
    }
    

    验证插件的正确性

    [root@localhost bin]# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
    …
    Things look okay - No serious problems were detected during the pre-flight check
    

    重启服务

    [root@localhost bin]# /etc/init.d/nagios restart   
    

    在页面上应该可以看到插件已经生效

    在NRPE下扩展自己的插件

    使用nrpe来测试插件.首先是编写Java版本的插件

    package com.iflytek.nagiosPlus;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.util.ArrayList;
    import java.util.Iterator;
    
    import org.apache.commons.cli.CommandLine;
    import org.apache.commons.cli.CommandLineParser;
    import org.apache.commons.cli.HelpFormatter;
    import org.apache.commons.cli.Options;
    import org.apache.commons.cli.ParseException;
    import org.apache.commons.cli.PosixParser;
    
    import com.fasterxml.jackson.core.JsonParseException;
    import com.fasterxml.jackson.databind.JsonMappingException;
    import com.fasterxml.jackson.databind.JsonNode;
    import com.fasterxml.jackson.databind.ObjectMapper;
    
    public class SolrCheck {
    
        /**
         * 简单的下载方法
         * */
        public String getUrl(String urlStr){
            try{
                URL url = new URL(urlStr);
                HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
                httpConn.connect();
                InputStream cin = httpConn.getInputStream();
                BufferedReader reader = new BufferedReader(new InputStreamReader(cin,
                        "UTF-8"));
                StringBuffer sb = new StringBuffer();
                String rl = null;
                while ((rl = reader.readLine()) != null) {
                    sb.append(rl).append(System.getProperty("line.separator"));
                }
                return sb.toString();
            }catch(Exception e){
                return null;
            }
        }
    
        private String formatstr = "java solr_check -p [port] -W [slor webapp]";
    
        /**
         * 处理命令行的参数
         * */
        private CommandLine parseOptions(String[] args) {
            Options opt = new Options();
            opt.addOption("p", true, "solr_server_port");
            opt.addOption("W", true, "solr_server_webapp");
            HelpFormatter formatter = new HelpFormatter();
            CommandLineParser parser = new PosixParser();
            CommandLine cl = null;
            try {
                // 处理Options和参数
                cl = parser.parse(opt, args);
            } catch (ParseException e) {
                formatter.printHelp(formatstr, new Options()); // 如果发生异常,则打印出帮助信息
                System.exit(3);
            }
    
            if (!cl.hasOption("p") || !cl.hasOption("W")) {
                formatter.printHelp(formatstr, new Options()); // 如果发生异常,则打印出帮助信息
                System.exit(3);
            }
            return cl;
        }
    
        /**
         * 依据URL获取到集合,并且返回所有的集合的名称
         * */
        private ArrayList<String> listcores(String baseurl) {
            String status_cmd = baseurl + "admin/cores?action=status&wt=json";
            String src = getUrl(status_cmd);
            if (src == null || src.equals(""))
                return null;
    
            ObjectMapper mapper = new ObjectMapper();
            ArrayList<String> result = new ArrayList<String>();
            try {
                JsonNode rootNode = mapper.readValue(src, JsonNode.class);
                JsonNode jsonArr = rootNode.get("status");
                Iterator<JsonNode> it = jsonArr.iterator();
                while (it.hasNext()) {
                    JsonNode cur = it.next();
                    result.add(cur.get("name").textValue());
                }
            } catch (JsonParseException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (JsonMappingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
            return result;
        }
    
        /**
         * 获取到collection的ping值是否正常
         * */
        private String solrping(String baseurl, String core) {
    
            String ping_cmd = baseurl + core + "/admin/ping?wt=json";
            String src = getUrl(ping_cmd);
    
            if (src == null || src.equals(""))
                return null;
    
            ObjectMapper mapper = new ObjectMapper();
            try {
                JsonNode rootNode = mapper.readValue(src, JsonNode.class);
                JsonNode jsonArr = rootNode.get("status");
                return jsonArr.textValue();
            } catch (JsonParseException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (JsonMappingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
            return null;
        }
    
        public static void main(String[] args) {
            SolrCheck solrCheck = new SolrCheck();
            CommandLine cl = solrCheck.parseOptions(args);
            String ip = "127.0.0.1";
            String port = cl.getOptionValue("p");
            String webapp = cl.getOptionValue("W");
    
            String baseurl = "http://" + ip + ":" + port + "/" + webapp + "/";
            ArrayList<String> cores = solrCheck.listcores(baseurl);
    
            if(cores==null){
                System.err.println("CRITICAL: probably couldn't format JSON data, check SOLR is ok");
                System.exit(3);
            }
    
            ArrayList<String> errCores = new ArrayList<String>();
            String resultErr = "CRITICAL: error pinging core(s) - ";
            for (String core : cores) {
                if (!solrCheck.solrping(baseurl, core).equals("OK")) {
                    errCores.add(core);
                    resultErr += core + ",";
                }
            }
    
            if (errCores.size() == 0) {
                System.err.println("OK: no issues");
                System.exit(0);
            } else {
                System.err.println(resultErr);
                System.exit(3);
            }
    
        }
    }
    

    Java程序和Python不同.需要先打包才能在在别的机器上运行.打包的时候可能需要很多依赖包.为了方便打包.使用Eclipse的插件FatJar来进行打包.

    下载fatjar
    http://superb-dca2.dl.sourceforge.net/project/fjep/fatjar/fatjar_0_0_31/net.sf.fjep.fatjar_0.0.31.zip
    

    解压后放到eclipse的plugin目录下即可.

    打包后将check_solr.jar上传到服务器(监控机).在被监控的机器上开启Slor后.
    验证插件的有效性

    [root@localhost myPlugin]# java -jar check_solr.jar -W solr -p 8080
    OK: no issues
    
    在主机上
    配置加载NRPE插件.如果NRPE已经配置过了 则可跳过
    
    [root@localhost bin]# vi /usr/local/nagios/etc/objects/commands.cfg
    
    追加..
    
    define command{
            command_name    check_nrpe
            command_line    $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
    }
    
    
    配置host以及host .如果配置过 则可以跳过
    [root@localhost bin]# vi /usr/local/nagios/etc/objects/hosts.cfg 
    
    define host{
            use                     linux-server
            host_name               SolrServer
            alias                   192.168.39.251
            address                 192.168.39.251
            }
    #定义一个主机组
    define hostgroup{
            hostgroup_name          bsmart-servers
            alias                   bsmart servers
            members                 SolrServer
            }
    
    配置需要监控的服务
    [root@localhost bin]# vi /usr/local/nagios/etc/objects/services.cfg 
    
    define service{
            use                     local-service
            host_name               SolrServer
            service_description           checkSolr
            check_command           check_nrpe!check_solr
    }
    
    
    在需要监控的机器上修改配置文件
    
    [root@localhost etc]# vi /usr/local/nagios/etc/nrpe.cfg
    追加..
    command[check_solr]=java -jar /usr/local/nagios/myPlugin/check_solr.jar -W solr -p 8080
    
    
    
    重启服务(主机)
    [root@localhost bin]# /etc/init.d/nagios restart   
    
    
    重启服务(监控机)
    [root@localhost bin]# service xinetd restart
    
    
    访问nagios可以看到.
    

    6 报警方式扩展支持

    在理解报警方式实际上也是一种命令以后就比较简单了.实际上对报警方式的扩展就是使用配置一个新的command.cfg,并在contacts.cfg里引用即可.至于报警程序.可以自己编写.也可以使用第三方的插件.

    扩展飞信报警

    wget http://www.rarlab.com/rar/rarlinux-3.8.0.tar.gz  
    tar zxvf rarlinux-3.8.0.tar.gz   
    cd rar  
    make install  
    
    wget http://www.it-adv.net/fetion/linuxso_20101113.rar  
    unrar x linuxso_20101113.rar  
    cp lib*so* /usr/lib  
    echo "/usr/lib" >> /etc/ld.so.conf  
    ldconfig  
    
    chmod 777 fetion   
    chown nagios:nagios fetion  
    ./fetion --mobile=18756975268 --pwd=XXXXXX --to=<phone> --msg-utf8=test
    

    这里第一次登陆需要要输入验证码.在linux下只用输入一次即可
    如果手机可以正常的收到短信.则表明飞信安装成功

    编辑command.cfg 扩展飞信的发送命令

    define command {  
        command_name    notify-host-by-fei  
        command_line    /usr/local/fetion --mobile=<phone> --pwd=<ps> --to=$CONTACTPAGER$ --msg-utf8="Host $HOSTSTATE$ alert for $HOSTNAME$! on '$LONGDATETIME$'" 
    }  
    
    define command {  
        command_name         notify-service-by-fei  
        command_line         /usr/local/fetion --mobile=<phone> --pwd=<ps> --to=$CONTACTPAGER$ --msg-utf8="$HOSTADDRESS$ $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ on $LONGDATETIME$" 
    }  
    

    在contacts.cfg里配置
    service_notification_commands notify-service-by-email,notify-service-by-fei
    host_notification_commands notify-host-by-email,notify-host-by-fei
    pager 18756975268

    这样,在主机和系统服务产生异常的时候,即可收到短信和邮件

    7 数据存储

    7.1 文件存储

    文件存储是nagios自带的一个功能.一般用来存储性能数据

    在Nagios里可以有两大类性能数据:

    1.  检测过程的性能数据
    2.  插件返回的性能数据
    

    检测过程的性能数据是与主机检测和服务检测相关的系统内部数据。这些数据包括象服务检测延时(就是检测实际检测的时刻与其计划时间之间的推后时间)和主机检测与服务检测执行所花费的时间。这类性能数据对全部可执行的检测都适用。HOSTEXECUTIONTIMESERVICEEXECUTIONTIME宏定义可用于度量主机或服务检测所运行的时间,HOSTLATENCYSERVICELATENCY宏定义可用于度量主机和服务检测的执行延时。

    插件返回的性能数据是由主机与服务检测时插件检测结果带出来的外部数据。特定插件的数据,象丢包率、磁盘空闲空间、处理器负荷、当前登录的用户数等,是在执行时由插件自已来测量出来的任何一种类型数据。特定插件数据是可选项并非每个插件都有。(如果有)特定插件数据将包含在HOSTPERFDATASERVICEPERFDATA宏定义里。更多有关如何在Nagios里返回性能数据蕴涵在HOSTPERFDATASERVICEPERFDATA宏里面。
    .打开监控

    process_performance_data=1
    host_perfdata_file=/usr/local/nagios/var/host-perfdata
    service_perfdata_file=/usr/local/nagios/var/service-perfdata
    host_perfdata_file_template=[HOSTPERFDATA]\t$TIMET$\t$HOSTNAME$\t$HOSTEXECUTIONTIME$\t$HOSTOUTPUT$\t$HOSTPERFDATA$
    service_perfdata_file_template=[SERVICEPERFDATA]\t$TIMET$\t$HOSTNAME$\t$SERVICEDESC$\t$SERVICEEXECUTIONTIME$\t$SERVICELATENCY$\t$SERVICEOUTPUT$\t$SERVICEPERFDATA$
    
    // process_performance_data是否启动性能数据收集
    // host_perfdata_file文件位置
    // service_perfdata_file 文件位置
    // host_perfdata_file_template 写文件时的格式化数据
    // service_perfdata_file_template写文件时的格式化数据
    
    //现在对于如何定时清空日志还不清楚
    

    7.2 Ndoutils

    7.2.1 Ndoutils安装

    NDOUtils是一个可以把全部状态信息保存到数据库里的外部构件。另外Nagios的库实例都可以把它们监控的信息保存到统一的中心数据库并集中报告。它将为一个Nagios新的基于PHP的WEB接口程序提供数据源服务。NDOUtils主要支持Mysql数据库

    NDOUtils在安装前需要一些mysql的基础的服务,使用命令检查相关依赖的安装情况,如果没有安装则使用yum安装

    rpm -q perl-DBD-MySQL
    yum install perl-DBD-MySQL 
    
    1. 创建数据库及用户,赋给给用户权限.
    mysql -u root -p 
    mysql>create database nagios; 
    mysql> grant all privileges on nagios.* TO nagios@localhost identified by 'nagios'; 
    mysql>flush privileges;  
    
    2. 安装ndoutils
    wget http://ncu.dl.sourceforge.net/project/nagios/ndoutils-1.x/ndoutils-1.4b9/ndoutils-1.4b9.tar.gz
    tar -xvf ndoutils-1.4b9.tar.gz 
    cd ndoutils-1.4b9 
    ./configure --prefix=/usr/local/nagios/ --enable-mysql --disable-pgsql --with-ndo2db-user=nagios --with-ndo2db-group=nagios 
    make 
    
    3. 初始化数据库
    cd db 
    ./installdb -u root -p 您数据库的密码 -d nagios
    
    4. 确认表已经被初始化成功
    mysql -u root -p 
    mysql>use nagios; 
    mysql>show tables;  
    mysql>quit
    
    5. 复制各项配置文件
    cd ndoutils-1.4b9 
    cp ./src/ndomod-3x.o /usr/local/nagios/bin/ndomod.o 
    cp ./src/ndo2db-3x /usr/local/nagios/bin/ndo2db 
    cp ./config/ndo2db.cfg /usr/local/nagios/etc/ndo2db.cfg 
    cp ./config/ndomod.cfg /usr/local/nagios/etc/ndomod.cfg
    
    6. 调整配置文件
    vim /usr/local/nagios/etc/ndo2db.cfg  
    #修改ndo的主配置文件 
    db_name=nagios 
    #指定数据库为nagios 
    db_user=nagios 
    db_pass=nagios 
    #设置以nagios用户登入mysql的账号密码 
    vi /usr/local/nagios/etc/nagios.cfg 
    #修改nagios主配置文件 
    broker_module=/usr/local/nagios/bin/ndomod.o config_file=/usr/local/nagios/etc/ndomod.cfg 
    #在末行添加
    
    7. 启动服务
    cp ./daemon-init /etc/init.d/ndo2db 
    chmod +x /etc/init.d/ndo2db 
    chkconfig --add ndo2db  
    chkconfig ndo2db on
    #添加启动脚本 
    service nagios restart 
    service ndo2db start 
    #重启服务 
    /usr/local/nagios/bin/ndo2db -c /usr/local/nagios/etc/ndo2db.cfg
    
    Tail –f /usr/local/nagios/var/nagios.log  即可看到  
    

    注意: NDOUtils有一个小的BUG.在建立好的数据库中.表nagios\_configfilevariables的默认组合唯一键是instance_id, configfile_id, varname.如果有多个cfg文件则无法写入该表.修改为instance_id, configfile_id, varname,varvalue组合唯一

    7.2.2 Ndoutils表说明

    1. nagios_objects

    ndo里最重要的对象表,里面有nagios所有的对象.在ndo的库里都有一个唯一的标志,就是object_id.而这个id就是在这张表里定义的.表里有两个名字列,name1,name2.这在ndo里面也是很重要的一个标识,这个是我们认为判断这个对象的唯一的标识.对于大部分对象来说,name2都是空的,比如host,name1是host的名字,name2为NULL;对于service,name1是这个service所属的host的名字,name2是service的名字。

    字段名称 示意
    object\_id Object的ID,在其他的各个表中都有引用
    name1 Host名称,命令名称等
    name2 监控服务的描述
    is\_active 是否启用

    host部分

    2. nagios_hosts

    ndo里存储host对象信息的表.表内有nagios内的host信息.但是同样的信息在nagios_hoststatus内也有一份相同的记录.而且nagios_hoststatus内还存在host的当前的状态.但是对于nagios_hoststatus来说.需要的查询字段为host_object_id.而这个字段和host_id的对应关系只存在于该表中.ndo中有模板表.也就是说这个host表以及下面的nagios_hoststatus表中都是存放已经解析后的配置参数

    字段名称 示意
    host\_id host在表中的唯一标识
    host\_object\_id host在object表中的唯一标识
    notification\_interval 通知间隔时间

    3. nagios_hostgroups

    ndo里存储hostgroup对象信息的表,保存了一个唯一的对应关系hostgroup_id到hostgroup_object_id的对应关系.在nagios_hostgroup_members表时.需要先从改变中去到hostgroup_object_id才能确定组内的成员关系

    字段名称 示意
    hostgroup\_id 本表的唯一标示
    hostgroup\_object\_id host组在object表中的ID
    alias 组名称

    4. nagios_hostgroup_members

    nagios_hostgroup_members是存储host和hostgroup关系的表

    字段名称 示意
    hostgroup\_id nagios\_hostgroups表的唯一标示
    host\_object\_id host在object表中的ID

    5. nagios_hoststatus

    nagios_hoststatus是一张相当重要的表.表内存储了hots的当前的状态码.性能参数以及host的详细的配置.

    字段名称 示意
    host\_object\_id host在object表中的ID
    output 插件返回的正常的显示数据
    perfdata 插件返回的性能数据
    current\_state 插件返回的状态值
    current\_check\_attempt 当前的重试次数
    max\_check\_attempts 最大的重试次数
    last\_check 最后一次检查时间
    next\_check 下一次检查时间
    last\_notification 最后一次通知时间
    next\_notification 下一次通知时间
    notifications\_enabled host在object表中的ID
    passive\_checks\_enabled 是否开启被动检查
    active\_checks\_enabled 是否开启主动检查
    event\_handler\_enabled 是否开启事件处理
    process\_performance\_data 是否开启性能处理
    event\_handler 事件处理的句柄ID
    check\_command 命令的ID
    normal\_check\_interval 正常检查的间隔时间
    retry\_check\_interval 在发生错误时重启的间隔
    execution\_time 插件的执行时间

    6. nagios_hostchecks

    nagios_hostcheck保存了nagios的所有的检查记录.pnp4nagios的记录就是就是从这张表内获取.表中会保存一个星期的结果.

    字段名称 示意
    host\_object\_id host在object表中的唯一标识
    current\_check\_attempt 当前的检查次数
    max\_check\_attempts 最大的检查次数
    start\_time 插件执行开始时间
    end\_time 插件执行结束时间
    command\_line 检查的命令,此处的命令是完整的命令路径并携带参数
    execution\_time 插件的执行时间
    return\_code 插件返回的状态值
    output 插件返回的正常的显示数据
    perfdata 插件返回的性能数据

    Service部分

    7. nagios_services

    ndo里存储service对象信息的表,在得知主机的object_id,然后查询这个主机上的service相关信息的时候需要用到,因为ndo里只有这张
    表存储了host_object_id和service_object_id的对应.其他的字段于host和host_status的关系类似.在services中其他字段在services_status表中也有体现.

    这里只列出于host对应关系的列

    字段名称 示意
    host\_object\_id host在object表中的唯一标识
    service\_object\_id service表中的唯一标示
    notification\_interval 通知间隔时间

    8. nagios_servicestatus

    ndo里存储service当前状态信息的表

    字段名称 示意
    service\_object\_id services在object表中的ID
    output 插件返回的正常的显示数据
    perfdata 插件返回的性能数据
    current\_state 插件返回的状态值
    current\_check\_attempt 当前的重试次数
    max\_check\_attempts 最大的重试次数
    last\_check 最后一次检查时间
    next\_check 下一次检查时间
    last\_notification 最后一次通知时间
    next\_notification 下一次通知时间
    notifications\_enabled host在object表中的ID
    passive\_checks\_enabled 是否开启被动检查
    active\_checks\_enabled 是否开启主动检查
    event\_handler\_enabled 是否开启事件处理
    process\_performance\_data 是否开启性能处理
    event\_handler 事件处理的句柄ID
    check\_command 命令的ID
    normal\_check\_interval 正常检查的间隔时间
    retry\_check\_interval 在发生错误时重启的间隔
    execution\_time 插件的执行时间

    9. nagios_servicechecks

    nagios_servicechecks保存了nagios的所有services的检查记录.pnp4nagios的记录就是就是从这张表内获取.表中会保存一个星期的结果.

    字段名称 示意
    service\_object\_id service在object表中的唯一标识
    current\_check\_attempt 当前的检查次数
    max\_check\_attempts 最大的检查次数
    start\_time 插件执行开始时间
    end\_time 插件执行结束时间
    command\_line 检查的命令,此处的命令是完整的命令路径并携带参数
    execution\_time 插件的执行时间
    return\_code 插件返回的状态值
    output 插件返回的正常的显示数据
    perfdata 插件返回的性能数据

    Contacts部分

    在ndo中 取不到联系人的发送消息的方式.在contact_notificationcommands表中.command最后对应到object中的值没有任何意义

    10. nagios_contacts

    ndo里存储contacts对象信息的表,contacts对象信息包括联系人的名称,邮件地址,手机号码等.

    字段名称 示意
    contact\_object\_id contact在object表中的唯一标识
    alias 名称
    email\_address 邮件地址
    pager\_address 一般这里可以定义为手机号码
    host\_timeperiod\_object\_id Host通知发送的时间范围
    notify\_host\_recovery Host在recovery是否发送请求
    notify\_host\_down Host在宕机时是否发送请求
    notify\_host\_unreachable Host在不可达时是否发送请求
    notify\_host\_flapping Host在抖动时是否发送请求
    notify\_host\_downtime Host在计划关机时是否发送请求
    service\_timeperiod\_object\_id service通知发送的时间范围
    notify\_service\_recovery service在recovery是否发送请求
    notify\_service\_down service在宕机时是否发送请求
    notify\_service\_unreachable service在不可达时是否发送请求
    notify\_service\_flapping service在抖动时是否发送请求
    notify\_service\_downtime service在计划关机时是否发送请求

    11. nagios_contactgroups

    ndo里存储contacts组对象信息的表,contacts组经常用于表示将消息发送给谁.

    字段名称 示意
    nagios\_contactgroups 本表的唯一标示
    contactgroup\_object\_id contacts组在object表中的ID
    alias 组名称

    12. nagios_contactgroup_members

    nagios_contactgroup_members是存储contact和contactgroup关系的表

    字段名称 示意
    contactgroup\_id nagios\_contactgroups表的唯一标示
    contact\_object\_id contact在object表中的ID

    13. nagios_host_contacts

    nagios_host_contacts是存储host和contacts关系的表

    字段名称 示意
    host\_id host表的唯一标示
    contact\_object\_id contact在object表中的ID

    14. nagios_host_contactgroups

    nagios_host_contactgroups是存储host和contactgroups关系的表.这张表比nagios_host_contacts更为常用.

    字段名称 示意
    host\_id host表的唯一标示
    contactgroup\_object\_id contactgroup在object表中的ID

    15. nagios_service_contacts

    nagios_service_contacts是存储service和contacts关系的表

    字段名称 示意
    service\_id service表的唯一标示
    contact\_object\_id contact在object表中的ID

    16. nagios_service_contactgroups

    nagios_service_contactgroups是存储service和contactgroups关系的表.通常service的通知人的管理也都在这张表中

    字段名称 示意
    service\_id service表的唯一标示
    contactgroup\_object\_id contactgroup在object表中的ID

    命令

    17. nagios_commands

    ndo里存储commands对象信息的表,commands对象主要是定义了命令的脚本以及脚本参数.

    字段名称 示意
    commands commands表的唯一ID
    object\_id commands表在object表中的唯一ID
    command\_line 命令及参数的定义

    日志记录

    17. nagios_conninfo

    连接信息,表中记录了客户端连接到ndo的mysql的信息.如果ndo的客户端连接到mysql.表中将存在记录.这张表更像是一个debug的表.

    字段名称 示意
    agent\_name 客户端名称
    agent\_version 客户端版本
    connect\_time 连接时间
    disconnect\_time 断开连接的时间

    17. nagios_contactnotifications

    表中记录了发送联系的历史记录.表中没有详细的联系信息,需要从别的地方查询到.

    字段名称 示意
    contact\_object\_id 联系人的ID
    contactnotification\_id 表中的唯一ID

    18. nagios_contactnotificationmethods

    表中记录了发送联系的历史记录.

    字段名称 示意
    contactnotification\_id nagios\_contactnotifications中的ID
    start\_time 命令开始执行的时间,可以看为发送时间
    command\_object\_id 发送的命令的ID,在object表中

    19. nagios_eventhandlers

    表中记录host以及services的事件句柄的触发.

    字段名称 示意
    object\_id 那个对象触发了eventhandle
    start\_time 脚本开始执行时间
    end\_time 脚本结束执行时间
    command\_line 脚本的命令及参数
    execution\_time 脚本执行时间
    output 脚本返回字符串

    20. nagios_externalcommands

    外部命令的执行记录外部命令包括外部发起的重启,强制修改检查时间等.

    字段名称 示意
    entry\_time 外部命令的执行时间
    command\_name 外部命令的名称
    command\_args 参数

    21. nagios_logentries

    ndo用来记录nagios的输出日志的表.

    字段名称 示意
    entry\_time 日志的生成时间
    logentry\_data 日志的内容

    22. nagios_notifications

    用来记录host及service产生的日志.这些日志可能并没有被发送出去.

    字段名称 示意
    notification\_type 消息的类型
    object\_id 日志的产生对象
    start\_time 日志的发送时间
    output 日志的内容
    contacts\_notified 日志有没有发给联系人

    23. nagios_statehistory

    nagios host和service的状态记录.

    字段名称 示意
    state\_time 状态发生改变的时间
    state 当前状态
    object\_id 状态对应对象的ID
    current\_check\_attempt 当前检查次数
    max\_check\_attempts 最大检查次数
    output 插件输出

    24. nagios_systemcommands

    nagios记录系统的表运行记录的表.系统命令包括process_perfdata.pl,发生feixin等.

    字段名称 示意
    state\_time 相当于执行的开始时间
    command\_line 执行的命令行
    return\_code 返回状态码
    output 插件输出

    25. nagios_systemcommands

    nagios记录系统的表运行记录的表.系统命令包括process_perfdata.pl,发生feixin等.

    字段名称 示意
    state\_time 相当于执行的开始时间
    command\_line 执行的命令行
    return\_code 返回状态码
    output 插件输出

    8 管理Nagios的配置文件

    Nagios的配置文件比较多.而且之前的关系也比较复杂.可以搭建一个界面工具来专门的管理Nagios的配置文件.常见的nagios的管理工具有nagiosql,nconf等.由于nagiosql有中文版,所以这里介绍nagiosql的安装.

    NagiosQL实际上是将Nagios的配置文件导入到自己的数据库中.并会在用户配置的目录下重新生成这些文件.当用于在界面上修改后.则刷新这些配置到硬盘.而同时修改Nagios的配置文件的默认指向为NagiosQL.而达到管理的功能.由于NagiosQL允许配置Nagios的命令所在的文件夹.故而在权限允许的情况下.可以远程执行Nagios的命令以达到检查配置文件.以及重启Nagios服务的效果.

    1.重新编译PHP.这里需要php对mysql以及gettext支持.所以我们必须要扩展php插件.扩展php插件可以使用动态扩展和从新编译两种.这里使用的是重新编译.

    ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2/bin/apxs --with-config-file-path=/usr/local/php/etc/ --with-mysql --with-gettext
    make && make install
    

    2.下载nagiosQL. http://www.nagiosql.org/files/category/2-download-release.html并安装

    tar zxvf nagiosql_311.tar.gz 
    cd nagiosql
    
    chown -R nagios:nagios /usr/local/nagios/nagiosql
    chmod -R 777 /usr/local/nagios/nagiosql/config
    #赋值权限
    
    mkdir etc/hosts
    mkdir etc/services
    mkdir etc/backup/services
    mkdir -p etc/backup/services
    mkdir -p etc/backup/hosts
    chown -R nagios:nagios etc
    #创建后面需要的目录
    
    cd /usr/local/nagios/nagiosql/install
    touch ./ENABLE_INSTALLER
    #启动安装
    
    #修改apache的目录.指向nagiosQL的目录
    Alias /nagiosQL "/usr/local/nagios/nagiosql"
    <Directory "/usr/local/nagios/nagiosql">
        # SSLRequireSSL
        Options None
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>
    

    重启apache并访问http:///nagiosQL即开始安装,
    在安装过程中最重要的一步为下图所示

    nagiosQL.png

    这一步设置无误后即可开始进入系统.

    注意:在安装的最后.web页面会提示你删除安装目录以继续.这时只需要把nagiosql下的install目录重新命名即可.

    开始配置nagiosQL.点击 [管理]>[域]>[ localhost]>[修改].进入如下页面.配置参数按提示填写真实目录.并在配置完成后点击[工具]>[导入数据]>[选择文件]来将数据导入到nagiosQL.在导入完成后.即可在nagiosQL中查看,修改这些配置信息.

    注意:
    1.在修改配置信息后.需要点击页面下方的[写入所有配置文件].
    2.nagiosQL在配置域信息的时候并不会删除空格.所以在写文件名的时候需要自行检查字符串两边的空格.否则可能无法正常的执行命令..
    3.在生成了所有的配置文件以后.修改Nagios配置指向新的配置以生效.

    nagiosQLC.png

    9 图表

    通常来说,nagios的报警机制只提供了瞬时信息.即检查插件的时候,被检查的主机或者是服务是否正常.由于nagios是针对瞬时数据的.所以其本身的报表也就是只支持瞬时数据的显示.但是我们除了关注瞬时数据以外.往往还关心其他的数据.如其内存占用率的曲线是什么样的.CPU使用的曲线是什么样的.这类数据在nagios中被称之为性能数据.上文中我们已经介绍了如何使用工具将性能数据保存下来.但是nagios在保存之后却不会做其他的事情.如果我们需要解释这些性能数据并且绘制成直观的图表.我们就需要借助pnp4nagios.

    简单来说pnp4nagios是基于RRD轮循(环状)数据库中所提供的综合信息,以可视化图形的方式呈现给用户的一款nagios插件.如果需要使用RRD轮训.则需要安装rrdtool.

    1.安装rrdtool:

    在 /etc/yum.repos.d/下面新建dag.repo文件在文件中输入源地址:
    [root@hmg2 yum.repos.d]# cat dag.repo
    [dag]
    name=Dag RPM Repository for Red Hat Enterprise Linux
    baseurl=http://apt.sw.be/redhat/el$releasever/en/$basearch/dag
    gpgcheck=1
    gpgkey=http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
    enabled=1
    
    yum -y install rrdtool
    

    2.下载安装pnp4nagios

    wget http://sourceforge.net/projects/pnp4nagios/files/PNP-0.6/pnp4nagios-0.6.19.tar.gz/download
    tar zxvf   pnp4nagios-0.6.19.tar.gz 
    cd pnp4nagios-0.6.19
    ./configure --prefix=/usr/local/pnp4nagios   --with-nagios-user=nagios 
    
    make all
    make fullinstall
    #安装pnp4nagios
    
    mv share/install.php share/install.php.bak
    ln -s /usr/local/pnp4nagios/ /usr/local/apache2/htdocs/pnp4nagios   
    #建立软连接用于页面访问
    

    3.重命名配置文件

    cd /usr/local/pnp4nagios/etc
    mv misccommands.cfg-sample  misccommands.cfg
    mv nagios.cfg-sample  nagios.cfg
    mv rra.cfg-sample rra.cfg
    
    cd pages
    mv web_traffic.cfg-sample web_traffic.cfg
    
    cd ../check_commands
    mv check_all_local_disks.cfg-sample  check_all_local_disks.cfg
    mv check_nrpe.cfg-sample  check_nrpe.cfg
    mv check_nwstat.cfg-sample  check_nwstat.cfg
    

    4.修改 nagios 的配置文件.使用外部命令来处理收集到的性能数据

    打开performance_data
    cd /usr/local/nagios/etc
    vim nagios.cfg
    #打开注视项:
    process_performance_data=1
    host_perfdata_command=process-host-perfdata
    service_perfdata_command=process-service-perfdata
    #修改 commands.cfg
    cd /usr/local/nagios/etc/objects
    vim 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
    }
    

    5.给nagios的监控项扩展性能监控的图标.

    vim templates.cfg
    ## 在最后添加
    define host {
        name       host-pnp
        action_url /pnp4nagios/graph?host=$HOSTNAME$&srv=_HOST_
        register   0
    }
    define service {
        name       srv-pnp
        action_url /pnp4nagios/graph?host=$HOSTNAME$&srv=$SERVICEDESC$
        register   0
    }
    
    
    #修改需要显示的监控项的use属性,如
    
    define host{
            use                     linux-server,host-pnp  
            …
    # 修改 services.cfg
    define service{
            use                                     local-service,srv-pnp      
            …;
    

    6.启动服务

    /etc/init.d/npcd restart
    

    即可看到

    pnp.png

    PNP4Nagios多种模式说明

    PNP4Nagios作为一个Nagios的性能数据分析的插件.插件可以解析性能数据生成性能数据图表.
    PNP4Nagios有如下几种工作模式.

    Synchronous Mode

    Synchronous Mode是最简单的一种模式.对于每一个被处理的service/host.他都会调用一次性能数据处理的脚本.据官方数据统计.该模式下每5分钟可以处理1,000条数据.其工作模式如下:

    synchronous.png

    1.执行插件获得性能数据
    2.调用性能数据的pl来进行解析
    3.调用RRD来进行计算并最后写成XML
    

    Synchronous Mode的部署方式

    1.在nagios.cfg中修改如下
        process\_performance\_data=1
        service_perfdata_command=process-service-perfdata
        host_perfdata_command=process-host-perfdata
    2.定义命令
        define command {
               command_name    process-service-perfdata
               command_line    /usr/bin/perl /usr/local/pnp4nagios/libexec/process_perfdata.pl
        }
        define command {
               command_name    process-host-perfdata
               command_line    /usr/bin/perl /usr/local/pnp4nagios/libexec/process_perfdata.pl -d HOSTPERFDATA
        }
    

    Synchronous Mode的缺点:很明显.就是同步请求.每条数据都需要调用pl.这种方式在负载量小的情况下没有什么问题.但是在数据量大的情况下.nagios就会出现延迟.

    Bulk Mode

    Bulk Mode就是在每条数据过来的时候.不再使用pl来处理,而是写一个临时文件.当达到pl设置的处理时间的时候.会调用pl来处理这个临时文件.并且会在处理文件完成后将被处理文件删除.

    bulk.png

    1.执行插件获得性能数据
    2.Nagios临时存储这些性能数据
    3.Nagiospl来进行解析性能数据.性能数据从临时文件获取
    4.调用RRD来进行计算并最后写成XML
    

    Bulk Mode的部署方式

    1.在nagios.cfg中修改如下
        process\_performance\_data=1
    
        service_perfdata_file=/usr/local/pnp4nagios/var/service-perfdata
        service_perfdata_file_template=DATATYPE::SERVICEPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tSERVICEDESC::$SERVICEDESC$\tSERVICEPERFDATA::$SERVICEPERFDATA$\tSERVICECHECKCOMMAND::$SERVICECHECKCOMMAND$\tHOSTSTATE::$HOSTSTATE$\tHOSTSTATETYPE::$HOSTSTATETYPE$\tSERVICESTATE::$SERVICESTATE$\tSERVICESTATETYPE::$SERVICESTATETYPE$
        service_perfdata_file_mode=a
        service_perfdata_file_processing_interval=15
        service_perfdata_file_processing_command=process-service-perfdata-file
    
        host_perfdata_file=/usr/local/pnp4nagios/var/host-perfdata
        host_perfdata_file_template=DATATYPE::HOSTPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tHOSTPERFDATA::$HOSTPERFDATA$\tHOSTCHECKCOMMAND::$HOSTCHECKCOMMAND$\tHOSTSTATE::$HOSTSTATE$\tHOSTSTATETYPE::$HOSTSTATETYPE$
        host_perfdata_file_mode=a
        host_perfdata_file_processing_interval=15
        host_perfdata_file_processing_command=process-host-perfdata-file
    
    2.定义命令
        define command{
               command_name    process-service-perfdata-file
               command_line    /usr/local/pnp4nagios/libexec/process_perfdata.pl --bulk=/usr/local/pnp4nagios/var/service-perfdata
        }
    
        define command{
               command_name    process-host-perfdata-file
               command_line    /usr/local/pnp4nagios/libexec/process_perfdata.pl --bulk=/usr/local/pnp4nagios/var/host-perfdata
        }
    

    **Bulk Mode的缺点:**Bulk Mode相对Synchronous Mode提升了部分的性能.但是Bulk Mode依然需要调用pl来处理性能数据,并且在处理性能数据的时候.nagios无法做出检查的动作

    Bulk Mode with NPCD

    Bulk Mode with NPCD是一种比较理性的处理方式.他依然不再使用pl来处理,也是写一个临时文件.但是当达到pl设置的处理时间的时候.他还是不会调用pl来处理这个临时文件.而是将这些文件移到一个临时目录.并且等待NPCD来处理这个些文件.Bulk Mode with NPCD在处理数据的时候和Nagios完全脱离.基本不会影响到Nagios的正常使用.

    bulk-npcd.png

    1.执行插件获得性能数据
    2.Nagios临时存储这些性能数据
    3.Nagios将性能数据移动到临时文件夹中
    4.NPCD扫描这个文件夹并且调用pl来进行解析性能数据.性能数据从临时文件获取
    5.调用RRD来进行计算并最后写成XML
    

    Bulk Mode with NPCD的部署方式

    1.在nagios.cfg中修改如下
        process\_performance\_data=1
    
        service_perfdata_file=/usr/local/pnp4nagios/var/service-perfdata
        service_perfdata_file_template=DATATYPE::SERVICEPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tSERVICEDESC::$SERVICEDESC$\tSERVICEPERFDATA::$SERVICEPERFDATA$\tSERVICECHECKCOMMAND::$SERVICECHECKCOMMAND$\tHOSTSTATE::$HOSTSTATE$\tHOSTSTATETYPE::$HOSTSTATETYPE$\tSERVICESTATE::$SERVICESTATE$\tSERVICESTATETYPE::$SERVICESTATETYPE$
        service_perfdata_file_mode=a
        service_perfdata_file_processing_interval=15
        service_perfdata_file_processing_command=process-service-perfdata-file
    
        host_perfdata_file=/usr/local/pnp4nagios/var/host-perfdata
        host_perfdata_file_template=DATATYPE::HOSTPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tHOSTPERFDATA::$HOSTPERFDATA$\tHOSTCHECKCOMMAND::$HOSTCHECKCOMMAND$\tHOSTSTATE::$HOSTSTATE$\tHOSTSTATETYPE::$HOSTSTATETYPE$
        host_perfdata_file_mode=a
        host_perfdata_file_processing_interval=15
        host_perfdata_file_processing_command=process-host-perfdata-file
    
    2.定义命令
        define command{
               command_name    process-service-perfdata-file
               command_line    /bin/mv /usr/local/pnp4nagios/var/service-perfdata /usr/local/pnp4nagios/var/spool/service-perfdata.$TIMET$
        }
    
        define command{
               command_name    process-host-perfdata-file
               command_line    /bin/mv /usr/local/pnp4nagios/var/host-perfdata /usr/local/pnp4nagios/var/spool/host-perfdata.$TIMET$
        }
    

    **Bulk Mode with NPCD的缺点:**Bulk Mode with NPCD基本上没有什么太大的缺点.但是其性能数据无法被其他性能处理的程序使用

    Bulk Mode with NPCD and npcdmod

    Bulk Mode with NPCD and npcdmod相对于Bulk Mode with NPCD.只是添加了npcdmod.o的模块.配置更加简洁.但是在性能上和功能上和Bulk Mode with NPCD并没有区别:

    bulk-npcdmod.png

    1.执行插件获得性能数据
    2.npcdmod临时存储这些性能数据
    3.npcdmod将性能数据移动到临时文件夹中
    4.NPCD扫描这个文件夹并且调用pl来进行解析性能数据.性能数据从临时文件获取
    5.调用RRD来进行计算并最后写成XML
    

    Bulk Mode with NPCD and npcdmod

    在nagios.cfg中修改如下
        process_performance_data=1
        broker_module=/usr/local/pnp4nagios/lib/npcdmod.o config_file=/usr/local/pnp4nagios/etc/npcd.cfg
    

    缺点:缺点同上.

    Gearman Mode

    Gearman Mode在0.6.12 PNP4Nagios中才被支持.他可以使Nagios和pnp4Nagios运行在不同的机器上

    gearman.png

    1.执行插件获得性能数据
    2.mod_gearman将这些性能数据存储在队列内
    3.pl通过gearman获取到性能数据,并且进行解析
    4.调用RRD来进行计算并最后写成XML
    

    这种方式没有亲测

    Bulk Mode with NDO

    这种模式在官方文档中并没有出现,其思路来源于<系统架构师>一书.使用NDO的模式可以实现和nagios完全异步并且nagios无需配置性能数据处理选项.另外使用NDO还可以实现类似Gearman模式的Nagios和pnp4Nagios运行在不同的机器上

    Bulk-NDO.png

    1.执行插件获得性能数据
    2.ndo-mod自动将性能数据插入数据库
    3.定制crontab计划.定期的调用ndo2pnp.pl文件.从数据库中读出需要的数据
    4.再调用process_perfdata.pl.处理数据 生成XML
    

    Bulk Mode with NDO的部署方式

    Bulk Mode with NDO的部署比较简单.
    1.确定NDO已经安装配置完毕.
    2.复制process_ndo2pnp.sh,ndo2pnp.pl到nagios下的libexec/
    3.确认process_ndo2pnp.sh内mysql的用户密码正确.
    4.切换到nagios用户下,新建crontab任务:
        */1 * * * * /usr/local/nagios/libexec/process_ndo2pnp.sh 1&2>/dev/null
    
    展开全文
  • CentOS配置Nagios监控平台,监控Linux客户端,Windows客户端详细配置,以及如何设置微信报警
  • nagios安装和配置详解

    千次阅读 2018-05-16 11:33:08
    写在最前 本文转载自... 一、Nagios简介  Nagios是一款开源的电脑系统和网络监视工具,能有效监控Windows、Linux和Unix的主机状态,交换机路由器等网络设置,打印机等。在系统或服务状态异...

    写在最前
    本文转载自https://www.cnblogs.com/mchina/archive/2013/02/20/2883404.html,转载博客博主写的十分详细,本次转载仅用于学习交流。

    一、Nagios简介

    Nagios logo

      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显示出来,以供管理员及时发现故障。

    四种监控状态

    2

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

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

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

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

    1

    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.3 (Final) 192.168.1.108 Apache、Php、Nagios、nagios-plugins
    Nagios-Linux CentOS release 5.8 (Final) 192.168.1.111 nagios-plugins、nrpe
    Nagios-Windows Windows XP 192.168.1.113  NSClient++

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

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

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

    SELINUX=disabled

    四、实验目标

    五、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

    8

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

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

    5.2 创建nagios用户和用户组


    # useradd -s /sbin/nologin nagios

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

    6

    查看nagios 目录的权限

    # ll -d /usr/local/nagios/

    7

    5.3 编译安装Nagios

    # wget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-3.4.3.tar.gz

    # tar zxvf nagios-3.4.3.tar.gz

    # cd nagios

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

    9

    10

    # make all

    11

    12

    # make install

    13

    # make install-init

    14

    # make install-commandmode

    15

    # make install-config

    16

    # chkconfig –add nagios

    # chkconfig –level 35 nagios on

    # chkconfig –list nagios

    17

    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://prdownloads.sourceforge.net/sourceforge/nagiosplug/nagios-plugins-1.4.16.tar.gz

    # tar zxvf nagios-plugins-1.4.16.tar.gz

    # cd nagios-plugins-1.4.16

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

    # make && make install

    18

    19

    5.6 安装与配置Apache和Php

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

    a. 安装Apache

    # 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

    22

    若出现错误:

    则在编译时入加 –with-included-apr 即可解决。

    b. 安装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

    23

    # make && make install

    24

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

    User daemon 
    Group daemon 

    修改为 

    User nagios 
    Group nagios 

    然后找到 

    <IfModule dir_module> 
      DirectoryIndex index.html 
    </IfModule> 

    修改为 

    <IfModule dir_module> 
      DirectoryIndex index.html index.php 
    </IfModule> 

    接着增加如下内容: 

    AddType application/x-httpd-php .php 

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

    #setting for nagios 
    ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin" 
    <Directory "/usr/local/nagios/sbin"> 
         AuthType Basic 
         Options ExecCGI 
         AllowOverride None 
         Order allow,deny 
         Allow from all 
         AuthName "Nagios Access" 
         AuthUserFile /usr/local/nagios/etc/htpasswd             //用于此目录访问身份验证的文件 
         Require valid-user 
    </Directory> 
    Alias /nagios "/usr/local/nagios/share" 
    <Directory "/usr/local/nagios/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 
    </Directory> 

    d. 创建apache目录验证文件 

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

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

    25
    这样就在/usr/local/nagios/etc 目录下创建了一个htpasswd 验证文件,当通过http://192.168.1.108/nagios/ 访问时就需要输入用户名和密码了。

    e. 查看认证文件的内容

    # cat /usr/local/nagios/etc/htpasswd

    26

    f. 启动apache 服务

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

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

    六、配置Nagios

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

    6.1 默认配置文件介绍

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

    29

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

    文件名或目录名 用途
    cgi.cfg 控制CGI访问的配置文件
    nagios.cfg Nagios 主配置文件
    resource.cfg 变量定义文件,又称为资源文件,在些文件中定义变量,以便由其他配置文件引用,如USER1
    objects objects 是一个目录,在此目录下有很多配置文件模板,用于定义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 主机的一个配置文件模板,默认没有启用此文件

    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     24x7               ; 当服务出现异常时,发送通知的时间段,这个时间段"24x7"在timeperiods.cfg文件中定义
            host_notification_period        24x7               ; 当主机出现异常时,发送通知的时间段,这个时间段"24x7"在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 24x7 ; 指定“发送通知”的时间段,也就是可以在什么时候发送通知给使用者。 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 24x7 ; 这里的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 24x7 ; 主机故障时,发送通知的时间范围,其中“workhours”在timeperiods.cfg中进行了定义;
    ; 下面会陆续讲到。
    notification_interval 10 ; 在主机出现异常后,故障一直没有解决,nagios再次对使用者发出通知的时间。单位是分钟;
    ; 如果你觉得,所有的事件只需要一次通知就够了,可以把这里的选项设为0
    notification_options d,u,r ; 定义主机在什么状态下可以发送通知给使用者,d即down,表示宕机状态;
    ; u即unreachable,表示不可到达状态;
    ; r即recovery,表示重新恢复状态。
    contact_groups ts ; 指定联系人组,这个“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 24x7 ; 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 24x7 ; 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 24x7 ; 这里的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 24x7 ; 指定“发送通知”的时间段,也就是可以在什么时候发送通知给使用者。 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.1.111         #被监控的主机地址,这个地址可以是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.1.113   ; 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                    David             #联系人的名称,这个地方不要有空格
            use                             generic-contact   #引用generic-contact的属性信息,其中“generic-contact”在templates.cfg文件中进行定义
            alias                           Nagios Admin
            email                           david.tang@bsmart.cn
            }
    define contactgroup{
            contactgroup_name       ts                              #联系人组的名称,同样不能空格
            alias                   Technical Support               #联系人组描述
            members                 David                           #联系人组成员,其中“david”就是上面定义的联系人,如果有多个联系人则以逗号相隔
            }

    g. timeperiods.cfg文件

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

    #下面是定义一个名为24x7的时间段,即监控所有时间段  
    define timeperiod{  
            timeperiod_name 24x7       #时间段的名称,这个地方不要有空格
            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=david
    authorized_for_system_information=nagiosadmin,david  
    authorized_for_configuration_information=nagiosadmin,david  
    authorized_for_system_commands=david
    authorized_for_all_services=nagiosadmin,david  
    authorized_for_all_hosts=nagiosadmin,david
    authorized_for_all_service_commands=nagiosadmin,david  
    authorized_for_all_host_commands=nagiosadmin,david 

    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
     
    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

    c. 手工方式平滑重启

    # kill -HUP <nagios_pid>

    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

    c. 手工方式停止Nagios

    # kill <nagios_pid>

    八、查看初步配置情况

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

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

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

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

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

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

    9.1 NRPE 工作原理

    nrpe

    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

    b. 安装Nagios 插件

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

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

     

    修改目录权限

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

    c. 安装NRPE

    # wget http://prdownloads.sourceforge.net/sourceforge/nagios/nrpe-2.13.tar.gz
    
    
    
    
    
    # tar zxvf nrpe-2.13.tar.gz # cd nrpe-2.13 # ./configure

    # 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

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

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

    d. 安装xinted 脚本

    # make install-xinetd

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

    编辑这个脚本:

    在only_from 后增加监控主机的IP地址。

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

    重启xinted 服务

    # service xinetd restart

    查看NRPE 是否已经启动

    可以看到5666端口已经在监听了。

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

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

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

    会返回当前NRPE的版本

    也就是在本地用check_nrpe连接nrpe daemon是正常的。

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

    f. check_nrpe 命令用法

    查看check_nrpe 命令用法

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

    可以看到用法是:

    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@Nagiso-Linux etc]# cat 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 
    [root@Nagiso-Linux etc]# 

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

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

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

    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之间的通信。

    看到已经正确返回了NRPE的版本信息,说明一切正常。

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

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

    在最后面增加如下内容:

    意义如下:

    # '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.1.108/nagios/ 查看相关信息。

    可以看到,对于Nagios-Server 和Nagios-Linux 上的相关服务的监控已经成功了,还有Nagios-Windows 上的服务还没有定义,下面讲到。

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

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

    NSClient++的原理如下图

    可以看到NSClient与nrpe最大的区别就是:

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

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

    10.1 安装NSClient++

    从http://www.nsclient.org/nscp/downloads 下载NSClient++-0.2.7.zip

    解压到C盘根目录。

    打开cmd 切换到c:\NSClient++-0.2.7

    执行nsclient++ /install 进行安装

    执行nsclient++ SysTray (注意大小写),这一步是安装系统托盘,时间稍微有点长。

    在运行里面输入services.msc 打开“服务

     

    看到下图就说明NSClient服务已经安装上了

     

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

    编辑c:\NSClient++-0.2.7下的NSC.ini文件。

    将 [modules]部分的所有模块前面的注释都去掉,除了CheckWMI.dll 和 RemoteConfiguration.dll 这两个。

    在[Settings]部分设置’password’选项来设置密码,作用是在nagios连接过来时要求提供密码。这一步是可选的,我这里设置为’123456’。

    将[Settings]部分’allowed_hosts’选项的注释去掉,并且加上运行nagios的监控主机的IP。各IP之间以逗号相隔。这个地方是支持子网的,如果写成192.168.1.0/24则表示该子网内的所有机器都可以访问。如果这个地方是空白则表示所有的主机都可以连接上来。

    注意是[Settings]部分的,因为[NSClient]部分也有这个选项。

    必须保证[NSClient]的’port’选项并没有被注释,并且它的值是’12489’,这是NSClient的默认监听端口。

    在cmd 中执行nsclient++ /start启动服务,注意所在目录是c:\NSClient++-0.2.7

    这时在桌面右下角的系统托盘处会出现一个黄色的M字样的图标

    查看服务

    已经正常启动了。

    注意服务默认设的是“自动”,也就是说是开机自动启动的。

    在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$
            }

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

    可以看到有错误:NSClient - ERROR: PDH Collection thread not running.

    Google 一下,是由于操作系统语言的问题,好像NSClient 默认支持的语言并不多,具体可以百度一下。

    查看NSClient的日志C:\NSClient++-0.2.7\nsclient.log,信息如下:

    2013-02-02 22:05:30: error:.\PDHCollector.cpp:98: You need to manually configure performance counters!

    需要手动配置performance counters。

    打开C:\NSClient++-0.2.7\counters.defs文件,复制文件里面“English US”那部分内容,粘贴到counters.defs 文件的最后,修改Description = “Chinese”。

    修改完之后,在mmc中重启NSClient 服务。

    然后查看日志,内容如下:

    在正常执行了。

    打开Nagios Web监控页查看。

    执行成功,但是W3SVC服务为Unknown 状态。查资料,需要开启Windows 的IIS服务。

    打开“控制面板”进行安装。

    安装完毕后,再到Nagios Web监控页查看,全部监控正常。

     

    十一、Nagios邮件报警的配置

    11.1 安装sendmail 组件

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

    # yum install -y sendmail*

    然后重新启动sendmail服务:

    # service sendmail restart

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

    # echo “Hello World” | mail david.tang@bsmart.cn

    11.2 邮件报警的配置

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

    11.3 Nagios 通知

    PROBLEM

    RECOVERY

    Linux下Nagios安装配置完毕。 

     

    参考资料

    • Nagios官方网站:http://www.nagios.org/
    • yahoon的小屋 《nagios全攻略》:http://yahoon.blog.51cto.com/
    • 技术成就梦想 《运维监控利器Nagios》:http://ixdba.blog.51cto.com/
    展开全文
  • Nagios基本介绍

    2017-12-20 13:15:47
    一、Nagios简介 Nagios是一款开源的电脑系统和网络监视工具,能有效监控Windows、Linux和Unix的主机状态,交换机路由器等网络设置,打印机等。在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,...
  • 什么是Nagios

    2014-07-18 22:07:41
    参考:http://sery.blog.51cto.com/10037/20520/
  • Nagios运维软件安装以及使用教程

    千次阅读 2017-07-14 10:54:03
    下面给大家说下nagios软件的使用教程,首先我们要准备好nagios相对应的安装软件,可以在我分享的这个链接下载,如果链接失效可以@一下我的QQ 邮箱353698376@qq.com,我邮箱发给你们 nagios:...
  • Nagios 简介

    千次阅读 2018-11-22 12:14:33
    一、Nagios 简介 Nagios是一个监视系统运行状态和网络信息的监视系统。Nagios能监视所指定的本地或远程主机以及服务,同时提供异常通知功能等。 Nagios可运行在Linux/Unix平台之上,同时提供一个可选的基于浏览器...
  • Nagios服务器端安装部署详解

    千次阅读 2019-06-28 00:01:05
    下载地址如下:http://sourceforge.net/projects/nagios/files/ 具体详细下载地址:http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-4.0.6.tar.gz 1 开始下载: wget ...
  • Centos 7下Nagios的安装及配置(完整版) 简介Nagios 是一款自动化运维工具,可以协助运维人员监控服务器的运行状况,并且拥有报警功能。本文章将介绍其安装方法和详细的配置方法。nagios 监控服务应用指南本地资源...
  • Nagios

    2018-09-11 14:36:56
    Nagios是一款用来监视系统和网络的开源应用软件。 利用其众多的插件实现对本机和远端服务的监控,当被监控对象异常时,会及时向管理员报警,用户可以直接调用插件,也可以自定义shell脚本来监控服务;可通过web页面...
  • nagios中文完整版

    热门讨论 2020-07-24 23:33:31
    Nagios是一个监视系统运行状态和网络信息的监视系统。Nagios能监视所指定的本地或远程主机以及服务,同时提供异常通知功能等 Nagios可运行在Linux/Unix平台之上,同时提供一个可选的基于浏览器的WEB界面以方便系统...
  • Nagios添加监控主机

    2018-11-28 11:12:03
    Nagios 主要用于监控一台或者多台本地主机及远程的各种信息,包括本机资源及对外的服务等。默认的Nagios 配置没有任何监控内容,仅是一些模板文件。若要让Nagios 提供服务,就必须修改配置文件,增加要监控的主机和...
  • Nagios的监控原理

    千次阅读 2015-09-24 21:01:33
    Nagios的监控原理 之前对nagios的监控原理不是很清楚,经过几次搭建之后,又参考了许多书籍和部分优秀的文章,将大家讲的好的部分结合在一起,又添了些自己的内容形成这这篇文章,以便一些新手的理解 一、nagios的...
  • 概述:nagios监控客户机需要需要用到一个插件,叫做“NRPE”,这样nagios服务就可以监控到客户机本地的信息,比如cpu,内存,磁盘 使用率等信息 1、首先添加nagios用户,用于管理nagios插件 #useradd nagios (要...
  • nagios

    2016-02-23 19:25:13
    nagios是较常用的监控软件之一,一般由一个主程序,一个插件程序(Nagios-plugins)和一些可选的附加程序(NRPE,NSCliet++,NSCA等)构成。其中附加程序安装在被监控端(客户端),nagios主程序安装在服务端,插件...
  • nagios-3.2.3.tar.gz,nagios-cn-3.2.3.tar.bz2,nagios-plugins-1.4.16.tar.gz,nrpe-2.13.tar.gz httpd-2.2.3-31.el5.x86_64.rpm,php-5.1.6-23.2.el5_3.x86_64.rpm,php-cli-5.1.6-23.2.el5_3.x86_64.rpm,...
  • nagios监控系统——实战篇

    千次阅读 2018-08-24 09:39:53
    一、nagios简介 Nagios是一款开源的免费网络监视工具,能有效监控Windows、Linux和Unix的主机状态,交换机路由器等网络设备,打印机等。在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态...
  • 一.Nagios结构说明 Nagios 结构上来说, 可分为核心和插件两个部分。Nagios 的核心部分只提供了很少的监控功能,因此要搭建一个完善的 IT 监控管理系统,用户还需要在 Nagios 服务器安装相应的插件,插件可以从 ...
1 2 3 4 5 ... 20
收藏数 26,593
精华内容 10,637
关键字:

nagios