部门里负责运维的只有我一个人,所以服务器出了任何问题都得由我来处理,为了及时处理各种无法预料的问题,就借nagios搭建了一个服务器集群监控平台。

以前用的是一个php自己写的,不稳定,误报率非常高,考虑到以后集群规模会比较大,国内网络条件也不是很好,所以做了这个平台来管理,明显减少了误报,什么原因出现什么样的报警也一清二楚,很方面。总结了一下安装配置的过程,放博客上与大家分享。文中不正之处,欢迎留言指出!有任何问题也可以留言提问。

一、安装前信息收集

首先确定一下相关变量
查看apache指定的CGI目录,在Apache安装目录下的bin目录中,执行

./suexec -V

查看AP_DOC_ROOT项,这项配置的路径就是我们要将nagios安装到的目录,这个路径涉及到CGI的安全问题,在多次尝试之后我总结出来,不要尝试在编译apache时指定suexec的路径了,我这儿没用,还是干脆直接用默认的好了。此处以本机的/usr/local/apache2/htdocs/nagios为例
查看Apache使用的用户
grep ^User --after-contex=1 httpd.conf

此处以本机的www为例

二、安装过程

解压

tar xzvf nagios-$version.tar.gz

编译安装
./configure --prefix=/usr/local/apache2/htdocs/nagios --with-nagios-user=www --with-nagios-group=www --with-command-user=www --with-command-group=www --with-gd-lib=/usr/local/gd2/lib --with-gd-inc=/usr/local/gd2/include --with-init-dir=/etc/init.d --with-httpd-conf=/usr/local/apache2/conf/extra
make all
make install
make install-commandmode
make install-config
make install-init

列目录
ls /usr/local/apache2/htdocs/nagios/

查看是否有bin、etc、include、libexec、sbin、share、var这几个目录,有则说明nagios已经正常安装好了。

下面安装插件

tar xzvf nagios-plugins-$version.tar.gz

编译安装
./configure --prefix=/usr/local/apache2/htdocs/nagios --with-mysql=/usr/local/mysql --with-libiconv-prefix=/usr/local
make
make install

列目录
ls /usr/local/apache2/htdocs/nagios/libexec

看到很多check_xxxx说明安装成功了。

到此Nagios需要安装的都安装好了,接下来就是配置了,见下页。

三、配置nagios

首先,为nagios从网络访问生成用户认证,即在打开nagios监控页面时提示登陆

/usr/local/apache2/bin/htpasswd -c /usr/local/apache2/htdocs/nagios/share/.htpasswd nagios

说明:第一次使用时需用参数-c,之后添加用户时不需要再加-c参数而可以直接添加用户。

添加对Nagios的配置
先查看启用的模块,请确保与用户验证相关的模块都启用了,比如mod_authn_file类似的几个模块。

#在<IfModule alias_module>段中,注释掉下面一行:
ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"
#添加下面两行:
ScriptAlias /nagios/cgi-bin "/usr/local/apache2/htdocs/nagios/sbin/"
Alias /nagios "/usr/local/apache2/htdocs/nagios/share/"
#在<IfModule alias_module>段外添加两段针对这两个目录的权限设置
<Directory "/usr/local/apache2/htdocs/nagios/sbin">
    Options ExecCGI
    AllowOverride none
    Order allow,deny
    Allow from all
    AuthName "Nagios Access"
    AuthType Basic
    AuthUserFile /usr/local/apache2/htdocs/nagios/share/.htpasswd
    Require valid-user
</Directory>
<Directory "/usr/local/apache2/htdocs/nagios/share">
    Options None
    AllowOverride none
    Order allow,deny
    Allow from all
    AuthName "Nagios Access"
    AuthType Basic
    AuthUserFile /usr/local/apache2/htdocs/nagios/share/.htpasswd
    Require valid-user
</Directory>

保存之后重启apache服务

配置/usr/local/apache2/htdocs/nagios/etc/nagios.cfg

#注释掉
cfg_file=/usr/local/apache2/htdocs/nagios/etc/localhost.cfg
#注释去掉:
cfg_file=/usr/local/apache2/htdocs/nagios/etc/contacts.cfg       联系人配置文件路径
cfg_file=/usr/local/apache2/htdocs/nagios/etc/timeperiods.cfg    监视时段配置文件路径
cfg_dir=/usr/local/apache2/htdocs/nagios/etc/servers             每个主机分别配置需监视的服务
#添加下面的行
cfg_file=/usr/local/apache2/htdocs/nagios/etc/hosts.cfg          主机配置文件路径

检查一下配置文件中nagios的user和group是不是www。

配置/usr/local/apache2/htdocs/nagios/etc/cgi.cfg

use_authentication=1
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/apche2/htdocs/nagios/etc/object/command.cfg,添加短信报警的命令,本人用的是winic的服务,如果你需要飞信之类的报警设置,可以google一下。

#host-notify-by-sms   发送短信报警
define command {
       command_name      host-notify-by-sms
       command_line      xxxxxxxxxxxxxxxxxxxxxxx
       }
#service notify by sms  发送短信报警
define command {
       command_name     service-notify-by-sms
       command_line     xxxxxxxxxxxxxxxxxxxxxxxx
       }

配置/usr/local/apache2/htdocs/nagios/etc/object/contact.cfg,添加用户信息,在“{}”中可以用“;”注释,之外则用“#”进行注释

define contact{
        contacy_name    nagios
        alias   nagios administrator user
        service_notification_period     24x7
        host_notification_period        24x7
        service_notification_options    w,u,c,r
        host_notificetion_options       d,u,r
        service_notification_commands   notify-service-by-email,notify-service-by-sms
        host_notification_commands      notify-host-by-email,notify-host-by-sms
        email njutczd@gmail.com
}

说明:w-warning , u-unknown,c-critical,r-recovery;d-down,u-unreachable

别忘记在contactgroup中添加这个用户

配置/usr/local/apache2/htdocs/nagios/etc/object/hosts.cfg,一个示例配置如下:

#注释
define host {<
        host_name 主机名
        alias 主机别名
        address 主机IP
        check_command check-host-alive
        contact_groups admins
        check_interval 5
        retry_interval 1
        check_period 24x7
        max_check_attempts 3
        notifications_enabled 1
        notification_interval 2
        notification_period 24x7
        notification_options d,u
}
#定义一个主机组
define hostgroup{
        hostgroup_name  Linux
        alias           Server-Linux
        members         主机名;主机名之间以“,”分隔
}

配置/usr/local/apache2/htdocs/nagios/etc/servers/主机名.cfg

#注释
define service {
        host_name 主机名
        service_description check_http
        check_command check_http
        check_period 24x7
        check_interval 5
        max_check_attempts 3
        retry_interval 1
        contact_groups admins
        notification_interval 10
        notification_period 24x7
        notification_options w,u,c
}

检查配置是否正确

/usr/local/apache2/htdocs/nagios/bin/nagios -v /usr/local/apache2/htdocs/nagios/etc/nagios.cfg

如果没有报错或警告,用下面的命令启动它
/etc/init.d/nagios start

用你刚刚设置的用户名和密码登陆http://IP/nagios来查看监控情况,别忘了加进开机启动,随你用什么方法。

为了监控更全面,更精确,一般我们安装nrpe来实现这样的目的,请见下页。

四、NRPE扩展

在监控端,编译安装NRPE

tar xzf nrpe-$version.tar.gz
cd nrpe-$version
./configure
make all
make install-plugin

配置监控端的NRPE,在/usr/local/apache2/htdocs/nagios/etc/commands.cfg中,添加内容如下:

#check_nrpe!args
define command{
    command_name check_nrpe
    command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}

为主机添加NRPE检测项目

define service{
  host_name 主机名
  service_description check_nrpe_load
  check_command check_nrpe!check_load;“!”之后的内容为参数,即要检测的远程的内容
  check_period 24x7
  check_interval 5
  max_check_attempts 3
  retry_interval 1
  contact_groups admins
  notification_interval 10
  notification_period 24x7
  notification_options w,u,c,r
}

同样的检查配置是否正确,正确之后重启nagios生效

在被监控端编译安装NRPE,先确定这台服务器上apache使用的用户,这里以www为例。之后安装nagios-plugins

tar xzvf nagios-plugins-1.4.15.tar.gz
cd nagios-plugins-1.4.15
./configure --prefix=/usr/local/nagios --with-nagios-user=www --with-nagios-group=www --with-mysql=/usr/local/mysql --with-libiconv-prefix=/usr/local
make && make install
chown -R www:www /usr/local/nagios

安装NRPE,以独立服务的模式安装

tar xzvf nrpe-2.12.tar.gz
cd nrpe-2.12
./configure --prefix=/usr/local/nagios --with-nrpe-user=www --with-nrpe-group=www --with-nagios-user=www --with-nagios-group=www
make all
make install-plugin
make install-daemon
make install-daemon-config

为NRPE添加配置

#给allowed_hosts添加允许的IP
allowed_hosts=127.0.0.1,192.168.100.3
#检查用户和组是否编译时候设置的www
#编辑最后部分的命令,添加你需要的命令配置,这里的命令即在监控端配置时用的check_nrpe的感叹号之后可用的命令

配置好之后通过下面的命令来启动NRPE服务

/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d
然后用下面的命令看看NRPE是否生效了
ps -A | grep nrpe
netstat -tulnp | grep 5666

用下面的命令看能否正常访问
/usr/local/nagios/bin/nrpe -H 127.0.0.1

如果看到返回的是NRPE的版本号那就成功了。

成功之后别忘将其加入开机启动

echo "/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d" >> /etc/rc.local

使用防火墙的朋友需要注意,监控端和被监控端必须开放NRPE用于通信的5666端口,iptables可以用下面的命令限制只允许某IP访问5666端口

iptables -A INPUT -p tcp -s 192.168.100.3 --dport 5666 -j ACCEPT
iptables -A OUTPUT -p tcp -d 192.168.100.3 --sport 5666 -j ACCEPT

关于iptables的详细用法,可以参照我另一篇博文《我的iptables总结》,里面有更详细的iptables规则介绍。

我的nagios笔记到此告一段落,后续会有更多如何配置Nagios监控的文章,与大家分享。