centos-Nagios 监控搭建

Nagios 监控

阅读目录

回到顶部

1. 介绍

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

朋友们如果觉得麻烦,可以试试OneAlert一键集成nagios,轻松实现微信、电话、邮件、短信、APP的告警通知。![img](file:///C:/Users/wzh94434/AppData/Local/Temp/%W@GJ$ACOF(TYDYECOKVDYB.png)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
目录名称作用
binNagios 可执行程序所在目录
etcNagios 配置文件目录
sbinNagios cgi 文件所在目录, 也就是执行外部 命令所需要文件所在的目录
shareNagios 网页存放路径
libexecNagios 外部插件存放目录
varNagios 日志文件、Lock 等文件所在的目录
var/archivesagios 日志自动归档目录
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界面
img

回到顶部

3. 基本配置

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

配置文件说明
cgi.cfg控制CGI访问的配置文件
nagios.cfgNagios的主配置文件
resource.cfg变量定义文件,在此定义的变量,用于其它配置文件中使用,如USER1USER1
objectsobjects为目录,内部含有大量的配置文件
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$
        } 

其中,变量USER1USER1在resource.cfg中定义

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

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

[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)时开始报警,10ARG1)时开始报警,10ARG2$)表示,磁盘剩余空间少于10)时开始报警。
对本机其他的监控的配置一样。配置完成后可以在浏览器上浏览效果(地址:部署nagios所在机器的ip/nagios)
监控主机页面
img

监控服务页面

3.4 监控远程Linux/UNIX主机

img

原理

img
监控远程的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

原理
img
使用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=scripts\check_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 *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /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文件
添加
img
其中
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。简易修改效果如下:
img

6.2 pnp4nagios插件

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

回到顶部

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为默认端口)

原文出处:https://www.cnblogs.com/kaituorensheng/p/4682565.html

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值