zoukankan      html  css  js  c++  java
  • Nagios 监控

    1. 介绍

    Nagios是一款开源软件,能有效监控 Windows 、Linux、VMware 和 Unix 主机状态,交换机、路由器等网络设置等。当监控出异常时提醒系统管理员,当异常恢复时也会通知。Nagios提供一个基于浏览器的web界面,方便管理人员查看系统的运行状态,网络状态、服务状态、日志信息,以及其他异常现象。

    朋友们如果觉得麻烦,可以试试OneAlert一键集成nagios,轻松实现微信、电话、邮件、短信、APP的告警通知。http://www.onealert.com/activity/nagios.html 

    2. 安装

    说明:安装机器为CentOS系统

    2.1安装依赖包

    由于Nagios提供了Web界面,因此需要安装Apache;由于配置Web界面需要PHP模块支持,所以需要安装PHP,还需要其他插件。

    sudo yum install httpd php php-cli gcc glibc glibc-common gd gd-devel net-snmp

    2.2创建用户和分组

    sudo useradd -m nagios             #新建用户
    sudo passwd nagios                 #修改密码
    sudo groupadd nagcmd               #新建分组
    sudo usermod -a -G nagcmd nagios   #添加用户到分组

    2.3安装Nagios

    下载

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

    安装

    tar xzf nagios-4.0.8.tar.gz  #解压
    cd nagios-4.0.8
    sudo ./configure --with-command-group=nagcmd
    sudo make all
    sudo make install
    sudo make install-init
    sudo make install-config
    sudo make install-commandmode

    安装 Web界面
    sudo make install-webconf

    为web界面创建登录账号

    sudo htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin

    其中nagiosadmin为账号名可更改,同时会提示添加密码。
    重启Apache服务

    sudo service httpd restart
    目录名称 作用
    bin Nagios 可执行程序所在目录
    etc Nagios 配置文件目录
    sbin Nagios cgi 文件所在目录, 也就是执行外部 命令所需要文件所在的目录
    share Nagios 网页存放路径
    libexec Nagios 外部插件存放目录
    var Nagios 日志文件、Lock 等文件所在的目录
    var/archives agios 日志自动归档目录
    var/rw 用来存放外部命令文件的目录

    2.4安装plugins

    下载
    wget http://nagios-plugins.org/download/nagios-plugins-2.0.3.tar.gz
    安装
    tar xzf nagios-plugins-2.0.3.tar.gz
    cd nagios-plugins-2.0.3.tar.gz
    sudo ./configure --with-nagios-user=nagios --with-nagios-group=nagios 
    sudo make
    sudo make install

    默认安装目录:/usr/lib64/nagios/plugins/
    安装完毕,web界面

    3. 基本配置

    3.1 配置文件列表配置文件作用

    配置文件 说明
    cgi.cfg 控制CGI访问的配置文件
    nagios.cfg Nagios的主配置文件
    resource.cfg 变量定义文件,在此定义的变量,用于其它配置文件中使用,如$USER1$                      
    objects objects为目录,内部含有大量的配置文件
    objects/command.cfg   命令定义配置文件
    objects/contacts.cfg 联系人和联系人分组配置文件
    objects/localhost.cfg 定义监控本机的配置文件
    objects/printer.cfg 监控打印机的配置文件,默认不启用此文件
    objects/switch.cfg        监控路由器的配置文件,默认不启用此文件
    objects/templates.cfg 定义主机和服务的配置文件
    objects/timeperiods.cfg 定义监控时间段的配置文件
    objects/windows.cfg 监控Windows机器的配置文件,默认没有启动此文件
    备注: Nagios 在配置方面非常灵活,默认的配置文件并不是必需的。可以使用这些默认的配置文件,也可以创建自己的配置文件,然后在主配置文件 nagios.cfg 中引用即可。

    注:在以后修改配置文件后,可以利用以下命令行检测配置文件是否正确,可以根据错误提示修改

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

     修改完配置文件后web界面不会立马修改,需要重新加载、启动nagios服务。

    sudo service nagios reload
    sudo service nagios restart

    3.2 命令配置文件

    文件名称:commands.cfg
    文件定义格式:

    define command{
           command_name    *******
           command_line    *******

    例如,查看本地负载的命令

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

    其中,变量$USER1$在resource.cfg中定义

    # Sets $USER1$ to be the path to the plugins
    $USER1$=/usr/local/nagios/libexec

    $USER1$中自带很多可执行的文件,可在命令行使用-v,查看具体的用法,这里$ARG1是发出警告(w)的条件,$ARG2是发出严重警告(c)的条件。可以用命令执行,命令执行,如

    [master@usr]$ /usr/local/nagios/libexec/check_load -w 5.0,4.0,3.0  -c 10.0,6.0,4.0
    OK - load average: 0.00, 0.01, 0.05|load1=0.000;5.000;10.000;0; load5=0.010;4.000;6.000;0; load15=0.050;3.000;4.000;0;

    3.3 监控本地主机

    确认nagios.cfg中有对localhoast.cfg文件的引用

    # Definitions for monitoring the local (Linux) host
    cfg_file=/usr/local/nagios/etc/objects/localhost.cfg

    localhost.cfg自带了对HTTP、ROOTPartition、SSH等服务的定义。
    在localhost.cfg定义主机

    define host{
            use                  linux-server
            host_name            localhost
            alias                localhost
            address              127.0.0.1
            }

    其中host_name是对被监控机器的名称,alias是被监控机器名称的别称,address是被监控机器的ip(127.0.0.1表示本地机器),use指明的是被监控机器继承的模板(定义模板的位置在templates.cfg,具体含义参考报警部分)。

    然后在localhost.cfg里完成对服务(service)的定义

    define service{
            use                             local-service
            host_name                       localhost
            service_description             磁盘空间
            check_command                   check_local_disk!20%!10%!/
            }

    其中,use指被监控机器集成的服务模板(定义模板的位置在templates.cfg,具体含义参考报警部分),host_name指主机名,与上面定义的host_name所指含义相同,service_description指要显示在web界面的内容,check_command指明要执行的命令名称(命令定义的位置是commands.cfg),示例中的参数20%表示,磁盘剩余空间少于20%($ARG1)时开始报警,10%($ARG2$)表示,磁盘剩余空间少于10)时开始报警。
    对本机其他的监控的配置一样。配置完成后可以在浏览器上浏览效果(地址:部署nagios所在机器的ip/nagios)
    监控主机页面

    监控服务页面

    3.4 监控远程Linux/UNIX主机

    原理


    监控远程的Linux/UNIX由两部分组成:运行在监控主机上的check_nrpe,运行在被监控主机上的NRPE守护进程。其中check_nrpe不是nagios自带的可执行文件,是安装plugins时带的可执行文件(位置在: /usr/lib64/nagios/plugins/)。
    当监控远程的Linux/UNIX时,工作流程如下:

    • nagios运行check_nrpe这个插件,并告诉它要执行什么命令
    • check_nrpe连接到被监控端的NRPE守护进程,告诉它命令
    • 被监控端的NRPE守护进程执行具体的操作
    • 被监控端的NRPE守护进程把执行的结果返回给Nagios做后处理

    被监控端的插件安装与配置

    CentOS系统

    yum install epel-release
    yum install nrpe nagios-plugins-all openssl

    Debian/Ubuntu系统

    apt-get install epel-release
    sudo apt-get install nagios-nrpe-server nagios-plugins

    安装完后进行配置
    打开/etc/nagios/nrpe.cfg文件,在allowed_hosts后面添加上监控机器的ip

    ## Find the following line and add the Nagios server IP ##
    allowed_hosts=127.0.0.1 192.168.1.150

    开启NRPE服务
    CentOS系统

    systemctl start nrpe
    chkconfig nrpe on

    Debian/Ubuntu系统

    sudo /etc/init.d/nagios-nrpe-server restart

    回到监控主机,新建目录servers

    sudo mkdir /usr/local/nagios/etc/servers

    创建监控远程Linux/UNIX主机的脚本

    sudo touch /usr/local/nagios/etc/servers/clients.cfg

    在nagios.cfg中添加上目录servers,这样目录中的文件都会被引入到监控中来。

    cfg_dir=/usr/local/nagios/etc/servers

    举例

    以“监控远程Linux/UNIX主机的CPU负载”为例
    被监控端
    进入目录cd /etc/nagios/nrpe.cfg
    添加命令行:

    command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20
    修改后重启服务
    service nagios-nrpe-server restart

    监控端
    打开servers/clients.cfg文件
    定义主机

    define host{
            use                             linux-server
            host_name                       10.61.88.23
            alias                           10.61.88.23
            address                         10.61.88.23
    }
    定义服务
    define service {
            use                             generic-service,srv-pnp
            host_name                       10.61.88.23
            service_description             CPU负载
            check_command                   check_nrpe!check_load
            notifications_enabled           1
            } 

    其中check_command中check_nrpe!后面的命令check_load对应被监控端的command[check_load]对应的命令。

    监控远程windows

    说明

    nagios对windows进行监控需要在被监控端安装NSClient,NSClient++来监控windows主机有三种方式:check_nt、check_nrpe、nsca。check_nt自带很多功能,可以完成很多基本的需求,但是扩展性差;check_nrpe可以通过执行自己定义的脚本做到很好地扩展。为了满足自己的需求,可以以上几种方式结合使用。
    在objects目录下创建文件windows.cfg,添加主机和服务。

    check_nt

    添加主机和服务

    define host{
    use             windows-server  
    host_name       ruanxi          
    alias           My Windows Server
    address         192.168.0.5     
    }
    
    #监控 windows 主机的开机运作时间
    define service{
    use                     generic-service
    host_name               ruanxi
    service_description     Uptime
    check_command           check_nt!UPTIME
    }
    
    #监控 windows 主机的内存使用状况 
    define service{
    use                     generic-service
    host_name               ruanxi
    service_description     Memory Usage
    check_command           check_nt!MEMUSE!-w 80 -c 90  #内存使用到达80%则warn,到达90%则Critical
    }

    check_nrpe

    原理

    使用check_nrpe监控windows的原理与监控linux主机的原理一致,这样可以根据特定的需求自己写脚本。
    以监控某个进程是否运行为例
    编辑NSClient配置文件NSC.ini,去掉以下几行前面的“;”号(去掉注释,使其生效)

    NRPEListener.dll
    script_dir=scripts
    CheckExternalScripts.dll

    在NSClient安装目录下的scripts文件夹下,新建一个check_run.bat批处理文件,如下

    @echo off
    tasklist |find "%1" >NUL
    IF ERRORLEVEL 1 GOTO err
    IF ERRORLEVEL 0 GOTO ok
    
    :err
    echo CRITICAL: Process does not exist
    exit /B 1
    
    :ok
    echo OK: The process of normal
    exit /B 0

    说明:脚本的退出值与nagios的报警提示对应关系为:0--正常,1--警告,2--严重警告
    在NSC.ini文件中[External Scripts]下面添加如下行:

    check_run=scriptscheck_run.bat   chrome.exe

    重启NSClinet
    可以在被监控端check_nrpe所在的目录(CentOs默认的安装目录为:/usr/lib64/nagios/plugins/)

    ./check_nrpe -H hostip -c check_run

    注:-H后写刚才脚本所在的机器,-c后写命令,这里对应配置文件中的check_run

    如果结果与预期的一致,那么就可以继续配置监控端了

    配置监控端
    修改commands.cfg,增加命令

    define command{
            command_name    check_run
            command_line    /usr/lib64/nagios/plugins/check_nrpe -H yourip -c check_run
            }

    修改windows.cfg,增加服务

    define service{
            use                     generic-service-urgent,srv-pnp
            host_name               youip   ;要展示信息的机器的ip
            service_description     check_fileexistspan
            check_command           check_run
            }

    4. 报警

    4.1 报警配置文件

    修改联系人

    配置文件是contacts.cfg.
    联系人定义方式为:

    define contact{
            contact_name                    nagiosadmin             ; 用户名称
            use                             generic-contact         ; 
            alias                           Nagios Admin            ; 用户别称
            email                          ****@****                ;修改为需要通知的邮箱
            }

     该contact继承了templates.cfg中的genetic-contact,如下

    define contact{
            name                            generic-contact         ; The name of this contact template
            service_notification_period     24x7                    ; service notifications can be sent anytime
            host_notification_period        24x7                    ; host notifications can be sent anytime
            service_notification_options    w,u,c,r,f,s             ; send notifications for all service states, flapping events, and scheduled downtime events
            host_notification_options       d,u,r,f,s               ; send notifications for all host states, flapping events, and scheduled downtime events
            service_notification_commands   notify-service-by-email ; send service notifications via email
            host_notification_commands      notify-host-by-email    ; send host notifications via email
            register                        0                       ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL CONTACT, JUST A TEMPLATE!
            }

     ,host_notification_commands指定的方式为notify-host-by-email,如果是微信或短信等其他方式,用逗号隔开写在后面即可。其中命令notify-host-by-email的定义在commands.cfg中默认已定义,如下

    # 'notify-host-by-email' command definition
    define command{
            command_name    notify-host-by-email
            command_line    /usr/bin/printf "%b" "***** Nagios *****
    
    Notification Type: $NOTIFICATIONTYPE$
    Host: $HOSTNAME$
    State: $HOSTSTATE$
    Address: $HOSTADDRESS$
    Info: $HOSTOUTPUT$
    
    Date/Time: $LONGDATETIME$
    " | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$
            }

    联系人分组定义方式为:

    define contactgroup{
            contactgroup_name       admins
            alias                   Nagios Administrators
            members                 nagiosadmin  ;这里填写刚才定义的contact_name
            }

    4.2 修改报警时间周期

    define host{
            use                     linux-server
            host_name               server_10.61.91.37
            alias                   server_10.61.91.37
            address                 127.0.0.1
            contact_groups          admins   ;这里添加报警组名称(上面刚定义的)
            }
    要使主机或服务能够发邮件,必须在定义主机或服务时添加说明,以服务为例。修改localhost.cfg中本机的修改。

    这样主机出现异常时会发送异常到报警组,报警组把异常分配给组里的成员,然后成员按着自己预先设定的报警方式进行报警。主机继承了linux-server模板,模板的定义在templates.cfg文件,文件中存在着主机和服务的继承关系,可以根据需要自己定制参数,以linux-server模板为例:
    define host{
            name                            linux-server    ; 主机模板名称
            use                             generic-host    ; 继承通用模板
            check_period                    24x7            ; 监控的时间段为一周七天,每天24小时,具体定义详见timeperiods.cfg
            check_interval                  5               ; 对主机每5分钟检测一次(注:这里的数值单位默认为分钟)
            retry_interval                  1               ; 重试检测时间为1分钟
            max_check_attempts              1               ;  nagios对主机的最大检查次数,即nagios在检查发现某主机异常时,并不马上下定论
            check_command                   check-host-alive ;指定检查主机状态的命令,其中“check-host-alive”在commands.cfg文件中定义
            notification_period             workhours       ; 主机故障时,发送通知的时间范围,其中“workhours”在timeperiods.cfg中进行了定义;
            notification_interval           30              ; 故障出现,没有修复,每30分钟再发一次告警
            notification_options            d,u,r           ; 定义主机在什么状态下可以发送通知给使用者,d即down,表示宕机状态;
            register                        0               ;指明这非真正主机,这只是模板而已
            }
    :这里的时间是时间片的含义,定义在nagios.cfg中command_check_interval=60,默认单位是s 。30即30*60s

    4.3 邮件报警

    上面是以邮件报警为例说明的,但是前提是系统可以往外发邮件,配置如下(以CentOs为例)
    打开/etc/mail.rc文件
    添加

    其中
    set from=[发送人邮箱地址]
    set smtp=[smtp服务器地址]
    set smtp-auth-user=[邮箱用户名]
    set smtp-auth-password=[邮箱密码]
    set smtp-auth=login
    测试:
    mail -s [邮件主题] [邮件地址] 回车,然后输入邮件内容,最后按“Ctrl + D”。如果发送成功表名配置成功。

    4.4 微信、短信报警

    参考

    110云监控 Nagios告警集成 链接
    利用Nagios调用Python程序控制微信公众平台发布报警信 链接

    5. 分组

    完成了以上的配置,已经完成了nagios的基本配置,但是当有多个机器时,所有的机器显示在一起会显得很乱,并且和自己无关的主机也会对自己报警。为了作区分可以对主机和服务进行分组,这样管理人员就可以只关注自己管理的主机和服务。

    5.1 主机分组

      定义分组的位置放哪都行,只要引入到nagios.cfg中即可,为了方便找,这里把分组放到localhost.cfg和windows.cfg里。

    define hostgroup{
            hostgroup_name  linux-servers ; The name of the hostgroup
            alias           Linux Servers ; Long name of the group
            members         server_10.61.91.37,172.16.41.211,10.61.88.23 ; 主机名
            }
    点击web界面左边导航条中主机组的表格,分组示例

    5.2 服务分组

    define servicegroup{
            servicegroup_name       dbservices
            alias                   Database Services
            members                 进程CPU与内存,10.61.88.23,监控端口状态 ;这里写service中的service_description
            }
    点击web界面左边导航条中服务组的表格,分组示例

    6. 界面美化

    6.1 汉化

    可以根据自己的需求对web界面的显示选项进行定制和修改。
    对左边导航条的修改文件是/usr/local/nagios/share/side.php
    修改后,需要重新加载、启动nagios。简易修改效果如下:

    6.2 pnp4nagios插件

    nagios自带图表分析功能,但是不美观,可以利用插件pnp4nagios,它对进行检测的主机和服务进行统计,管理人员可以根据统计报表进行分析、改善。
    官网安装文档
    效果图

    7. 参考

    Install And Configure Nagios 4 On Ubuntu 14.10/14.04
    Nagios 监控系统架设全攻略

    8. 维护备忘

    邮箱发件人设置:/etc/mail.rc

    配置文件检查:sudo /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

    重新加载:sudo service nagios reload      sudo service nagios restart

    监控远程Linux

    新建用户

    sudo useradd -m nagios
    
    sudo passwd nagios

    安装nagios-plungins: sudo apt-get install nagios-nrpe-server nagios-plugins

    配置文件地址:/etc/nagios/nrpe.cfg

    插件所在地址:/usr/lib/nagios/plugins  (或 /usr/lib64/nagios/plugins/)

    添加可以监控的机器:

    sudo vim  /etc/nagios/nrpe.cfg
    
    增加:allowed_hosts=127.0.0.1 10.61.73.49  (server的ip)
    增加具体命令:command[check_cpu_proc]=

    修改后重新启动:sudo service nagios-nrpe-server restart

    监控远程Windows

    cd /usr/local/nagios/libexec/

    查看是否正常工作:

    ./check_nt -H 172.16.41.84 -p 12489 -v UPTIME     (12489为默认端口)

  • 相关阅读:
    我是一条内存[转]
    随机翻唱辑 [2006.8.18更新]
    CentOS NTFS 挂载
    grub备忘
    CentOS 使用163软件源
    被车撞了
    爱上苦瓜
    无聊的游戏
    今天去爬山了
    博客搬家了:www.sanv.org
  • 原文地址:https://www.cnblogs.com/kaituorensheng/p/4682565.html
Copyright © 2011-2022 走看看