共计 8665 个字符,预计需要花费 22 分钟才能阅读完成。
关于 Nagios
Nagios 是一款用于监控系统和网络的开源应用软件,它的模式是服务器—客户端,也就是说首先要在在一台服务器上(server)部署相应的主要套件,然后在要监控的服务器上部署客户端程序,这样 server 会和 client 通信,从而监控 client 端的各项资源。Nagios 功能十分强大几乎所有的项目都可以监控,大到服务器的存活状态,小到服务器上的某一个服务(web)。这些功能都是通过自定义插件(或者叫做脚本)来实现。
当 Nagios 监控到某项资源发生异常会通知到用户,你可以接入手机短信接口也可以接入邮件接口。我们可以通过 web 页面来查看 Nagios 所监控的各项资源,默认搭建的 Nagios 服务器只能监控简单的几个项目,而其他服务之类的监控项目都是由我们自己开发的插件来实现的。
需要下载的软件
nagios-3.0.5
nagios-plugins-1.4.13
nrpe-2.12.tar.gz
apache-2.2.11
// 以上软件版本可以不一样
监控中心 Server 端的配置
-
安装 apache(略,请参考第 16 章中相关内容,只需安装,到后边再配置)
- 建立 nagios 账户
useradd nagios
- 下载软件
cd /usr/local/src/
wget http://syslab.comsenz.com/downloads/linux/nagios-3.0.5.tar.gz
wget http://syslab.comsenz.com/downloads/linux/nagios-plugins-1.4.13.tar.gz
wget http://syslab.comsenz.com/downloads/linux/nrpe-2.12.tar.gz
- 编译安装 nagios
cd /usr/local/src/
tar zxvf nagios-3.0.5.tar.gz
cd nagios-3.0.5
./configure –prefix=/usr/local/nagios
make all
make install
make install-init # 把 nagios 做成一个运行脚本,使 nagios 随系统开机启动
make install-config # 把配置文件样例复制到 nagios 的安装目录
make install-commandmode # 给外部命令访问 nagios 配置文件的权限
chown -R nagios:nagios /usr/local/nagios
- 编译安装 nagios-plugins
cd /usr/local/src/
tar zxvf nagios-plugins-1.4.13.tar.gz
cd nagios-plugins-1.4.13
./configure –prefix=/usr/local/nagios –with-nagios-user=nagios –with-nagios-group=nagios
make && make install
查看是否安装成功的方法是:
ls /usr/local/nagios/libexec/ 看这个目录下是否有插件文件
- 安装 nrpe
cd /usr/local/src/
tar zxvf nrpe-2.12.tar.gz
cd nrpe-2.12
./configure –enable-ssl –enable-command-args
make all
make install-plugin
make install-daemon
make install-daemon-config
- 配置 web 接口
vim /usr/local/apache2/conf/httpd.conf
在最后加入以下内容:
ScriptAlias /nagios/cgi-bin /usr/local/nagios/sbin
<Directory "/usr/local/nagios/sbin/">
AllowOverride AuthConfig
Options ExecCGI
Order allow,deny
Allow from all
</Directory>
Alias /nagios/ /usr/local/nagios/share/
<Directory "/usr/local/nagios/share">
Options None
AllowOverride AuthConfig
Order allow,deny
Allow from all
</Directory>
- 配置 nagios
cd /usr/local/nagios/etc/
vim cgi.cfg
把 use_authentication=1 改成 use_authentication=0 意思是不用用户验证
- 启动 nagios
在启动前先检测一下:
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
如果最后显示如下,则说明配置没有问题了。
Total Warnings: 0
Total Errors: 0
启动命令:
/etc/init.d/nagios start
或者:
/usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg
此时,就可以访问 web 页面的 nagios 了,在浏览器中输入:
http://IP/nagios/
看看吧。
在要监控的机器上 client 部署 nagios
如果你打开了 web 页面,点击左栏的 Host Detail 会在右栏看到一行数据,其中 Host 名为“localhost”,Status 显示为”up”,并且显示为绿色,如果是其他颜色就说明你的 localhost 出了问题。目前只有一行数据,也就是说只监控了监控中心(localhost)一台主机,那么如何添加其他机器被它监控呢?这就需要在要被监控的机器上也部署 nagios 软件。
- 添加账户
useradd nagios
- 安装 nrpe
cd /usr/local/src/
wget http://syslab.comsenz.com/downloads/linux/nrpe-2.12.tar.gz
tar zxvf nrpe-2.12.tar.gz
cd nrpe-2.12
./configure –enable-ssl –enable-command-args
make all
make install-plugin
make install-daemon
make install-daemon-config
- 安装 nagios-plugin
cd /usr/local/src/
wget http://syslab.comsenz.com/downloads/linux/nagios-plugins-1.4.13.tar.gz
tar zxvf nagios-plugins-1.4.13.tar.gz
cd nagios-plugins-1.4.13
./configure –prefix=/usr/local/nagios –with-nagios-user=nagios –with-nagios-group=nagios
make && make install
到此就算安装完成了,请查看 /usr/local/nagios/ 目录下是否有四个目录分别为:bin etc libexec share 另外在 libexec 目录下会有很多 check_开头的文件。如果你的机器上没有,就请重新安装吧。
- 配置
vim /usr/local/nagios/etc/nrpe.cfg
找到”allowed_hosts=127.0.0.1”改成“allowed_hosts=127.0.0.1,10.0.4.67”
// 后边的 IP 是 server 的 IP
找到”dont_blame_nrpe=0”改成“dont_blame_nrpe=1”
- 启动 nrpe
/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d
在监控中心添加被监控主机
添加主机当然是要到 server 端(监控中心)修改配置文件了。
- 修改主配置文件
cd /usr/local/nagios/etc/
vim nagios.cfg
增加内容:
cfg_dir=/usr/local/nagios/etc/services ## 定义一个目录,以后把新增加的主机信息文件全部放到这里
- 添加被监控主机信息
mkdir /usr/local/nagios/etc/services
cd /usr/local/nagios/etc/services
vim 10.0.4.56.cfg 加入如下内容:
define host{
use linux-server
host_name 10.0.4.56
alias 10.0.4.56
address 10.0.4.56
}
define service{
use generic-service
host_name 10.0.4.56
service_description check_ping
check_command check_ping!100.0,20%!200.0,50%
max_check_attempts 5
normal_check_interval 1
}
define service{
use generic-service
host_name 10.0.4.56
service_description check_ssh
check_command check_ssh
max_check_attempts 5
normal_check_interval 1
}
define service{
use generic-service
host_name 10.0.4.56
service_description check_http
check_command check_http
max_check_attempts 5
normal_check_interval 1
}
// 注意,这里的 IP 是 client 端的 IP,监控的项目有三个 ping, ssh, http。其实这三个项目使用的脚本都为本地脚本,也就是说,即使远程主机没有安装 nagios 和 nrpe 同样可以监控这些项目。但是如果想监控 load,disk,等等就需要通过 nrpe 服务来搞定了,道理很简单,load 和 disk 都需要登录到远程主机上去获得信息,而 ping,ssh,http 都不需要的。这个到远程主机获取相关的信息的过程是由 nrpe 完成的。如果你的 client 上没有启动 nrpe 服务那么我们是无法获取远程主机的 load 和 disk 等信息的。下面笔者配置一下使用 nrpe 来监控远程主机的相关项目。
在 server 端编辑 /usr/local/nagios/etc/objects/commands.cfg
vim /usr/local/nagios/etc/objects/commands.cfg # 在最后面添加如下内容
define command{
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}
然后编辑 10.0.4.56.cfg(还是 server 上)
cd /usr/local/nagios/etc/services
vim 10.0.4.56.cfg # 加入如下内容:
define service{
use generic-service
host_name 10.0.4.56
service_description check_load
check_command check_nrpe!check_load
max_check_attempts 5
normal_check_interval 1
}
define service{
use generic-service
host_name 10.0.4.56
service_description check_disk_hda1
check_command check_nrpe!check_hda1
max_check_attempts 5
normal_check_interval 1
}
define service{
use generic-service
host_name 10.0.4.56
service_description check_disk_hda2
check_command check_nrpe!check_hda2
max_check_attempts 5
normal_check_interval 1
}
这里需要解释一下相关的”check_command”, 先看这个”check_nrpe!check_load”这里的 check_nrpe 就是上面 /usr/local/nagios/etc/objects/commands.cfg 中刚刚定义的,后面的 check_load 是在远程主机上定义的一个命令脚本。具体在哪里定义稍后介绍。为什么中间加一个”!”,这个是 nagios 特有的形式,无需关心。下面需要到远程主机上去定义上面用到的脚本了。
在远程主机上编辑 /usr/local/nagios/etc/nrpe.cfg 文件
vim /usr/local/nagios/etc/nrpe.cfg (client 上)
把”command[check_hda1]”那行改成:
command[check_hda1]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/hda1
然后再增加一行:
command[check_hda2]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/hda2
这里的 check_hda1 和 check_hda2 都是自定义的,和 server 端的定义的 service 中的 check_command 对应。也就是说,如果在 server 端定义了一个 service(通过 nrpe 方式)那么必须要在客户端上的 nrpe.cfg 中定义相应的脚本。保存这个文件后,需要重新启动一下 nrpe 服务。
killall nrpe ; /usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d(client 上)
- 重启 nagios 服务
修改了配置需要重启服务才能使添加的监控主机生效。
/etc/init.d/nagios restart(server 上)
此时再到 web 页面去观察是否多了一台 10.0.4.56
在 nagios 客户端上自定义监控脚本
在开始,笔者就讲过,我们可以自定义写监控脚步,从上面的例子中也可以看到监控磁盘状态时,是根据磁盘分区来监控的。这样不免有些麻烦���因为每台主机的磁盘分区状况都不一样(一样还好),而且有多少个分区就需要定义多少个命令。所以笔者就自定义写一个 shell 脚本来监控所有的磁盘分区:
- 在客户端上创建脚本 /usr/local/nagios/libexec/check_disk.sh
vim /usr/local/nagios/libexec/check_disk.sh 写入如下内容:(client 上)
#!/bin/bash
row=`df -h -P|wc -l`
status=0
for i in `seq 2 $row`
do
spare=`df -h -P|sed -n "$i"p|awk '{print $4}'`
use_percentage=`df -h -P|sed -n "$i"p|sed -n "s/\%//"p|awk '{print $5}'`
spare_percentage=`expr 100 - $use_percentage`
partition_name=`df -h -P|sed -n "$i"p|awk '{print $6}'`
if ["$spare_percentage" -lt "3"];then
echo -n "$partition_name CRITICAL ${spare_percentage}% $spare"
status[$i]=2
elif ["$spare_percentage" -lt "5"];then
echo -n "$partition_name WARNING! ${spare_percentage}% $spare"
status[$i]=1
else
echo -n "$partition_name OK ${spare_percentage}% $spare"
status[$i]=0
fi
done
zhuangtai=0
for j in `seq 2 $row`
do
if ["${status[$j]}" -gt "$zhuangtai" ];then
zhuangtai=${status[$j]}
fi
done
exit $zhuangtai
- 保存后,修改该脚本的权限
chmod +x /usr/local/nagios/libexec/check_disk.sh(client 上)
- 然后编辑 /usr/local/nagios/etc/nrpe.cfg 文件
vim /usr/local/nagios/etc/nrpe.cfg # 加入一行:(client 上)
command[check_disk]=/usr/local/nagios/libexec/check_disk.sh
保存,重启 nrpe 服务
killall nrpe ; /usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d(client 上)
- 检测刚才的脚本是否正常运行的方法是,到 server 端执行如下命令:
/usr/local/nagios/libexec/check_nrpe -H 10.0.4.56 -c check_disk(server 上)
如果正常的话,会输出一行磁盘检测的数据,否则可能会报错。
- 到 server 上添加相应的 service
cd /usr/local/nagios/etc/services(server 上)
vim 10.0.4.56.cfg # 加入如下内容:
define service{
use generic-service
host_name 10.0.4.56
service_description check_disk
check_command check_nrpe!check_disk
max_check_attempts 5
normal_check_interval 1
}
- 重启 nagios 服务
/etc/init.d/nagios restart(server 上)
配置 nagios 报警邮件
现在 139 邮箱有顺便发短信的功能,所以当有报警时,只需发送到你的 139 邮箱你就同样会收到一条报警短信。这样做的优势就是不用再去买短信网关了,节省了很大一笔钱。
vim /usr/local/nagios/etc/objects/contacts.cfg
把”email nagios@localhost”修改成“email 你的 139 邮箱”
vim /usr/local/nagios/etc/objects/templates.cfg
找到:
define service{name generic-service
之所以看这一段,是因为在上面添加的 10.0.4.56.cfg 定义了很多 generic-service 所以要关注这段的配置。
define service{
name generic-service
active_checks_enabled 1
passive_checks_enabled 1
parallelize_check 1
obsess_over_service 1
check_freshness 0
notifications_enabled 1
event_handler_enabled 1
flap_detection_enabled 1
failure_prediction_enabled 1
process_perf_data 1
retain_status_information 1
retain_nonstatus_information 1
is_volatile 0
check_period 24x7
max_check_attempts 3
normal_check_interval 10
retry_check_interval 2
ontact_groups admins
notification_options w,u,c,r
notification_interval 60
notification_period 24x7
register 0
}
其中有几个参数需要你注意:
- notifications_enabled : 是否开启提醒功能。1 为开启,0 为禁用。一般,这个选项会在主配置文件(nagios.cfg)中定义,效果相同。
- notification_interval: 重复发送提醒信息的最短间隔时间。默认间隔时间是 60 分钟。如果这个值设置为 0,将不会发送重复提醒。
- notification_period: 发送提醒的时间段。非常重要的主机(服务)我定义为 7×24,一般的主机(服务)就定义为上班时间。如果不在定义的时间段内,无论什么问题发生,都不会发送提醒。
- notification_options: 这个参数定义了发送提醒包括的情况:d = 状态为 DOWN, u = 状态为 UNREACHABLE , r = 状态恢复为 OK , f = flapping。,n= 不发送提醒。
要想正确发送邮件,上面的参数得配置合理才行。
: