NAGIOS

简介:

                                                                  再谈nagios
前言:
 好吧,准备重新再写一次nagios的详细说明文档。因为这个东西安装起来简单,配置使用确实相对复杂很多。希望我能尽量写的够详细,并将可能遇到的问题都列举出来。

【nagios简介】
首先我们先知道这个是个什么东西。
Nagios是一款开源的免费网络监视工具,能有效监控Windows、Linux和Unix的主机状态,交换机路由器等网络设置,打印机等。在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知。(我承认我是从百度百科上拷贝的,不过这个解释的已经很好了。)
nagios应用在linux操作系统中,那么基础的linux操作就不再多说。
Nagios的强大主要在于其插件所提供的各种监控功能以及web形式的友好交互,nagios对于linux和windows服务器都可以很好的进行监控,这里主要说明对linux服务器的监控。

【准备工作】
Naigos必须运行在有C语言编辑器的Linux平台上,并且需要一个web服务器(通常来说apache即可)来提供友好的交互界面,否则你监控到的内容只是一堆日志毫无乐趣可言。下面我将按照最小化安装的裸机来进行安装。
我使用的centos5.6版本,用ubuntu的注意版本及配置文件习惯即可
监控主机A地址:192.168.0.10
被监控主机B地址:192.168.0.20
首先下载3个文件:
nagios-3.3.1.tar.gz                        nagios主程序
nagios-plugins-1.4.15.tar.gz       nagios插件
nrpe-2.12.tar.gz                             监控linux主机所需插件
#yum install –y httpd php gcc* gd* glibc*     安装nagios所需的库,这里为了方便后面操作apache 和php都是yum安装的,如果编译安装的朋友注意下路径即可。
#groupadd nagios       新建一个nagios组
#useradd nagios –g nagios     新建一个nagios用户并将其加入到nagios组中

【安装nagios】
# tar zxvf nagios-3.3.1.tar.gz 
# cd nagios
# ./configure --prefix=/usr/local/nagios --with-nagios-user=nagios   最好还是制定目录
# make all
# make install
# make install-commandmode
# make install-config
# make install-init
# make install-webconf

这里nagios的编译不同于其他的软件,需要好几步才能完成,我们来解释一下make这几步的意思
make install  安装主要的程序、CGI、HTML文件等等。
make install-commandmode 赋予外部命令访问nagios配置文件的权限
make install-config 将nagios的配置文件的例子复制到nagios的安装目录下
make install-init 将nagios做成一个运行脚本,放入init.d中,使nagios可以随系统的开机而启动
make install-webconf配置apache的web接口,如果运行出错,是因为你的apache是自己编译安装的
不是yum安装的,webconf生成的文件会放在/etc/httpd/conf.d/下,因为找不到这个目录,所以出错
编译安装完成后:
# ls /usr/local/nagios
bin  etc  include  libexec  share
查看是否有上面的文件,如果有到此nagios就算是安装完了。
那么我们来看看这上面几个目录下的文件都有什么意义。
bin          nagios执行程序所在目录,这个目录只有一个文件nagios
etc          nagios配置文件位置,初始安装完成后,只有几个*.cfg-sample文件
sbin        nagios  Cgi文件所在目录,也就是执行外部命令所需文件所在的目录
share     nagios网页文件所在的目录
var          nagios日志文件、spid等文件所在的目录

nagios的主程序安装完毕后,为了以防万一我们来检查一下/usr/local/nagios的目录权限
如果不是nagios的属主那么要将属主进行修改,否则nagios没有权限来运行。
我们在进行下一步插件的安装

【安装nagios插件】
插件对于nagios来说是非常重要的,插件的版本对于nagios主程序之间的关联并不大
各个版本基本都可以使用。
# tar zxvf nagios-plugins-1.4.15.tar.gz
# cd nagios-plugins
# ./configure --prefix=/usr/local/nagios   nagios-plugins是安装到nagios的主目录下的
# make
# make install
安装完成后/usr/local/nagios生成目录libexec,这就是nagios所需要的插件

检查工作:
再次检查nagios主目录的属主,一定要是nagios,不能是root
如果属主不正确
#chown -R nagios.nagios /usr/local/nagios 
nagios的用户不需要登录shell 所以如果为了安全
vi /etc/passwd 
nagios:x:500:500::/home/nagios:/bin/bash
修改为:
nagios:x:500:500::/home/nagios:/bin/nologin
那么nagios用户则不能够登录shell

【配置apache】
  yum 装的apache本身不需要太多的配置,在nagios的编译过程中的make install-webconf就是在/etc/httpd/conf.d/下生成nagios.conf的配置文件。会自动帮你配置apache的nagios部分。
#vi  /etc/httpd/conf/httpd.conf
修改apache的运行用户为nagios
user nagios
group nagios

在末尾加上apache的nagios部分
ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin"

<Directory "/usr/local/nagios/sbin">
#  SSLRequireSSL
   Options ExecCGI
   AllowOverride None
   Order allow,deny
   Allow from all
#  Order deny,allow
#  Deny from all
#  Allow from 127.0.0.1
   AuthName "Nagios Access"
   AuthType Basic
   AuthUserFile /usr/local/nagios/etc/htpasswd.users
   Require valid-user
</Directory>

Alias /nagios "/usr/local/nagios/share"

<Directory "/usr/local/nagios/share">
#  SSLRequireSSL
   Options None
   AllowOverride None
   Order allow,deny
   Allow from all
#  Order deny,allow
#  Deny from all
#  Allow from 127.0.0.1
   AuthName "Nagios Access"
上面文本的作用是对nagios的目录进行用户验证,只有合法的授权用户才可以访问nagios的页面文件
生成用户验证文件
# htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
命令交互执行需要输入2次密码,然后会再/usr/local/nagios/etc/htpasswd.users中写入一行字段是
刚才生成的用户名和密码
如需添加更多用户执行命令中去掉-c即可,否则会覆盖所有已经生成的行

配置完成后执行/usr/sbin/httpd -t 来验证apache 的配置文件压法
这里的httpd路径根据自己具体的路径来执行
#service httpd restart

在浏览器中输入nagios的访问地址: http://local/nagios
在登录框中输入你刚才设置的nagios用户和密码
到此我们的nagios服务器就已经搭建好了,但是现在还没有检测任何的主机也没有任何的信息,我们现在要做的就是来看一看nagios服务器到底需要怎么用。

【配置nagios】
好了 这里是我们的最重的重点了,我们来详细的分析一下nagios的配置文件。
首先来看一下nagios的etc目录下的配置文件有哪些


-rw-rw-r-- 1 nagios nagios 11408 12-07 12:57 cgi.cfg
-rw-r--r-- 1 nagios nagios    26 11-01 17:36 htpasswd.users
-rw-rw-r-- 1 nagios nagios 43775 12-07 12:19 nagios.cfg
drwxrwxr-x 2 nagios nagios  4096 12-07 14:44 objects
-rw-rw---- 1 nagios nagios  1340 11-01 17:35 resource.cfg

PS: 如果是nagios2.6版本以前,etc下的文件名都是cgi.cfg-sample类型, 改名为cgi.cfg即可,2.6以后版本都不需要修改配置文件名
由于我的nagios是最新的版本这里会有一个objects的目录,那么来看一下目录下有哪些文件
commands.cfg  定义了各项功能命令及说明 
localhost.cfg    监控的主机配置文件
printer.cfg      监控打印配置文件
templates.cfg   这里会给你提供一些配置文件的模板供参考
windows.cfg    监控windows主机的配置文件
contacts.cfg    定义联系人的文件
switch.cfg      这个基本不用,是一个假定您使用的示例配置文件得到安装Nagios的快速入门指南。
timeperiods.cfg  监视时段配置文件
这里的object不同于老版本将一些对具体监控的配置放置在了统一的object目录下,以方便管理。

# /usr/local/nagios/bin/nagios -v /usr/local/nagos/etc/nagios.cfg 来验证程序能否正常运行
# vi /usr/local/nagios/etc/localhost.cfg
把下面的几行注释去掉
cfg_file=/usr/local/nagios/etc/objects/contactgroups.cfg  //联系组配置文件路径
cfg_file=/usr/local/nagios/etc/objects/contacts.cfg       //联系人配置文件路径
cfg_file=/usr/local/nagios/etc/objects/hostgroups.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    //监视时段配置文件路径
将check_external_command=0修改为1 作用是允许执行web界面下重启nagios,停止主机/服务检查鞥操作
cgi.cfg文件 控制相关的cgi脚本
#vi /usr/local/nagios/etc/cgi.cfg
确保use_authentication=1
其中的各项authorized_for_都是定义登录的用户权限
全部设置为nagiosadmin即可,也可设置你自己htpasswd生成设置的用户名

【安装nrpe】
# tar zxvf nrpe-2.12.tar.gz 
# cd nrpe
# .configure 
# make all
# make install-plugin

commands.cfg定义外部构建nrpe
# vi /usr/local/nagios/etc/objects/commands.cfg
#check nrpe
 
define command{
 
        command_name check_nrpe
 
        command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
 
        }
设置要监控的Linux主机
vi /usr/local/nagios/etc/nagios.cfg
cfg_file=/usr/local/nagios/etc/objects/localhost.cfg
设置localhost.cfg内容
vi /usr/loca/nagios/etc/objects/locaohost.cfg
address 修改为被监控的IP

其他设置:
chkconfig --add nagios  配置开机启动
chkconfig nagios on
/usr/loacal/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg  检查nagios配置文件
vi /etc/selinux/config 关闭SELINUX
SELINUX=disabled
service iotables stop 
serivce nagios start

【配置被监控端】
一、安装nagios-plugin
# useradd nagios
# tar zxvf nagios-plugins-1.4.15.tar.gz
# cd nagios-plugins
# ./configure --with-nagios-user=nagios --with-nagios-group=nagios --enable-redhat-pthread-workaround
# make
# make install
chown -R nagios.nagios /usr/local/nagios

二、安装被监控端nrpe
# tar zxvf nrpe-2.12.tar.gz 
# cd nrpe
# .configure 
# make all
# make install-plugin
# make install-daemon
# make install-daemon-config

配置nrpe
vi  /usr/local/nagios/etc/nrpe.cfg
allowed_hosts=192.168.0.1,127.0.0.1
启动nrpe
/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d
也可讲其写入到/etc/rc.d/rc.local中开机运行

验证nrpe
# netstat -anpl |grep 5666
tcp        0      0 0.0.0.0:5666                0.0.0.0:*                   LISTEN      11750/nrpe    
# /usr/local/nagios/libexec/check_nrpe -H 127.0.0.1
NRPE v2.12

然后服务端测试
/usr/local/nagios/libexec/check_nrpe -H 被监控机IP
NRPE v2.12
配置监控对象(重要)
# vi /usr/local/nagios/etc/nrpe.cfg
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_hda1]=/usr/local/nagios/libexec/check_disk -w 20 -c 10 -p /dev/hda1
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
command[check_swap]=/usr/local/nagios/libexec/check_swap -w 20% -c 10%
这一步是关键,如果nagios服务器想要监控客户机swap分区,但客户机nrpe.cfg文件
没有swap监控对像,这时监控服务器就是报错(NRPE command ‘check_swap’no defined).
平时自己写脚本,也是主要配这个地方
至此就可以监控linux客户机的disk,swap,users,memory了

那么到了这里还不够,如果我们需要邮件报警或者短信报警的功能那么就要进行更加负责的操作

【邮件报警】
我们首先看一下邮件报警的功能事怎么定义的:
vi /usr/local/nagios/etc/objects/commands.cfg
#'notify-host-by-email' command definition
define command{
        command_name    notify-host-by-email
        command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotific
ation Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddre
ss: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /bi
n/mail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **"
$CONTACTEMAIL$
        }

# 'notify-service-by-email' command definition
define command{
        command_name    notify-service-by-email
        command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotific
ation 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 "** $NOTIFICATIO
NTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONT
ACTEMAIL$
        }
这里定义了host和server两个模块的email发送方式,
可以看到nagios默认的是使用linux系统自带的/bin/mail 来发送邮件的,
这里nagios已经帮我们配置好了,不出意外的话不需要进行太多修改。但是如果你需要用sendmail的话,可以自己修改命令。

下面来看看联系人的配置文件
vim /usr/local/nagios/etc/objects/contacts.cfg
定义一个发送邮件的地址和选项
define contact{
     contact_name   nagiosadmin  //定义联系人的名字
     use      generic-contact  //这个名字是默认的,没有进行修改                                                                                                                                       做修改
     alias     Nagios Admin  //别名
     service_notification_period    24x7  //服务出现状况通知的时间段,这个时间段是objects中的timeperiod.cfg中定义的
     host_notification_period         24x7  //主机出现状况通知的时间段,这个时间段同样是timeperiod.cfg中定义的
      service_notification_options      w,u,c,r  //当服务器出现w(warning),u(unkown),c(critical),或者r(恢复)这几种情况下通知联系人
      host_notification_options         d,u,r         //与service差不多,d的意思是down
      service_notification_commands   notify-service-by-email         // 定义服务出现问题,使用命令notify-service-by-email通知 
      host_notification_commands      notify-host-by-email     //主机出现问题使用notify-host-by-email 通知
      email                          
xxx@xx.com    //通知人的邮件地址

}

这里顺便也讲contact组也定义了 如下:

define contactgroup{
        contactgroup_name       admins
        alias                   Nagios Administrators
        members                 nagiosadmin
}

下面来看监控主机的配置文件,我这里的配置文件为localhost.cfg
你可以选择起任何的名字,只需要在nagios.cfg中重新定义即可。
vi /usr/local/nagios/etc/objects/localhost.cfg 
定义主机如下:
define host{
 host_name linux-20      //为被监控的主机起个名字
 alias  linux20       //起个别名
 address  192.168.0.20   //IP地址
 contact_groups admins       //联系人的组,在contacts.cfg中定义
 check_command check-host-alive  //检查主机状态的命令,commands.cfg中定义
 check_period 24x7    //检查的时间段24*7,来自timeperiod.cfg中定义的
 max_check_attempts 3  //检查失败后的重试次数
 notification_interval  10  //提醒的间隔,单位是分钟
 notification_period  24x7  //提醒周期,来自timeperiod.cfg中定义
 notification_options  d,u,r   //报警的选项
}
主机检查命令行一般选择检查主机存活check-host-alive
最大尝试次数最好不要设置为“1”,一般来说3-4次比较合理,否则你的邮箱估计会爆掉
顺便将host组也定义下
define hostgroup{
        hostgroup_name  linux-servers 
        alias           Linux Servers 
        members         linux-20  //可以在此添加linux主机,以逗号分离
}

下面来编辑service 的配置还是在localhost.cfg下,以Ping和apache服务为例子
define service {
host_name   linux-20                      #被监控的主机,hosts.cfg中定义的
service_description  PING                      #定义的是监控这个主机是不是存活,描述是PING
check_period          24x7                        #监控的时间段,是timeperiods.cfg中定义的
notification_interval        10                 #重复发送提醒信息的最短间隔时间。默认间隔时间是
                                               "60"分钟。如果这个值设置为 "0" ,将不会发送重复提醒
normal_check_interval        3                 #检查间隔3分钟
max_check_attempts           3                 #最大重试次数,重新检查3次 3次都失败就报警
retry_check_interval         2                 #重试检查间隔时间2分钟
check_command   check_ping!100.0,20%!500.0,60%  #使用ping来做健康检查
contact_groups          admins               #联系人组,是contactgroups.cfg中定义的
                      }

define service {
host_name   linux-20
max_check_attempts           5 
check_period              24x7
notification_interval        10
normal_check_interval        1
retry_check_interval         1
service_description  HTTP
check_command   check_http
notification_period     24x7
notification_options     w,u,c,r
contact_groups          admins
                       }

主机名 host_name,必须是主机配置文件hosts.cfg中定义的主机。
检查用的命令check_command,在命令配置文件中定义或在nrpe配置文件中有定义。
最大重试次数max_check_attempts 一般设置为3-4次比较好,这样不会因为网络闪断片刻而发生误报。
检查间隔和重试检查间隔的单位是分钟。
通知间隔指探测到故障以后,每隔多少时间发送一次报警信息。 它的单位是分钟。
通知选项跟服务定义配置文件相同。
联系组contact_groups由配置文件contactgroup.cfg定义。

最后我们检查下配置文件是否正确
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
service nagios restart  
通过破坏测试,看看你能不能收到邮件吧。
PS:关于收不到邮件有很多可能
1.本地mail命令没有权限给nagios用或者mail本身就无法使用
2.本地防火墙阻止
3.commands.cfg中的mail功能定义错误
4.你定义的收件邮箱阻止了nagios的邮件
想查看你的邮件到底有没有发送出去,还是要看/var/log/maillog的日志吧
一般来说配置的过程中会出现很多问题 多用
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
验证,多查看各个日志是能找到关键性的错误点的,祝大家好运。








本文转自东方之子736651CTO博客,原文链接: http://blog.51cto.com/ecloud/1441520  ,如需转载请自行联系原作者




相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
JavaScript 前端开发
|
监控 Windows
|
监控 Apache
|
监控 关系型数据库 C++
|
监控 网络协议 测试技术
|
监控 Linux 调度