第一章、 监控软件nagios
Nagios功能非常强大,它可以监控服务和主机,但是他自身并不包括这部分功能的代码,所有的监控、检测功能都是有插件来完成的。再说报警功能,如果监控系统发现问题不能报警那就没有意义了,所以报警也是nagios很重要的功能之一。但是,nagios自身也没有报警部分的代码,甚至没有插件,而是交给用户或者其他相关开源项目组去完成比如飞信,邮件等实现报警。nagios安装,是指基本平台,也就是nagios软件包的安装。它是监控体系的框架,也是所有监控的基础。
1.1. 服务器端搭建
1.1.1. nagios搭建
准备 nagios-xxx.tar.gz
Nagios-plugins-xxx.tar.gz
Nrpe-xxx.tar.gz
(注:本文中,我的安装包都放在/usr目录下)
1.1.2. 用户和组的建立:
建立 nagios 账号
useradd nagios
passwd nagios
创建一个用户组名为 nagcmd 用于从 Web 接口执行外部命令。将 nagios用户和 apache 用户都加到这个组中。
groupadd nagcmd
usermod -G nagcmd nagios
usermod -G nagcmd apache
安装软件:nagios-3.3.1.tar.gz
cd /usr
tar xzvf nagios-3.3.1.tar.gz
./configure --with-command-group=nagcmd --prefix=/usr/local/nagios
make all
make install
make install-init
make install-config
make install-commandmode bin
make install-webconf
监控软件nagios-xxx配置web接口(介绍的是最简单的方法,不要改apache的配置文件)直接在nagios 的解压目录下执行一下, make install-webconf 主要作用:在/etc/httpd/conf.d目录下生成nagios.conf,这种配置方式是最简单,最方便的。
Nagios执行程序的目录
bin | Nagios执行程序的目录 |
etc | Nagios配置文件位置,初始安装完后,只有几个*.cfg-sample文件 3与2区别 对象配置文件都在etc/objects目录下 |
sbin | Nagios Cgi文件所在目录,也就是执行外部命令所需文件所在的目录 |
Share | Nagios网页文件所在的目录 |
Var | Nagios日志文件、spid 等文件所在的目录 |
var/archives | Empty directory for the archived logs |
var/rw | Empty directory for the external command file |
Nagios主配文件nagios.conf简介
cfg_file=/usr/local/nagios/etc/objects/contacts.cfg //联系人/组配置文件
cfg_file=/usr/local/nagios/etc/objects/localhost.cfg //本机配置文件
cfg_file=/usr/local/nagios/etc/objects/timeperiods.cfg //监视时段配置文件
cfg_file=/usr/local/nagios/etc/objects/commands.cfg //监视脚本配置
cfg_file=/usr/local/nagios/etc/objects/templates.cfg //监视服务,报警配置
cfg_file=/usr/local/nagios/etc/objects/switch.cfg //监视路由
cfg_file=/usr/local/nagios/etc/objects/windows.cfg //监视微软
1.1.3. 安装插件: nagios-plugins-1.4.15.tar.gz来扩展nagios的功能
cd /usr
tar zxvf nagios-plugins-1.4.15.tar.gz
cd nagios-plugins-1.4.15
./configure --with-nagios-user=nagios --with-nagios-group=nagios --prefix=/usr/local/nagios &&make && make install
chown nagios.nagios /usr/local/nagios
chown -R nagios.nagios /usr/local/nagios/libexec
验证插件是否安装成功:
ls /usr/local/nagios/libexec
成功会显示安装的插件文件,即所有的插件都安装在 libexec 这个目录下
创建一个 nagiosadmin 的用户用于 Nagios 的 WEB 接口登录。记下你所设置的登录口令。
useradd nagiosadmin
htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
重启apache让刚才生成的配置文件生效:
service httpd restart
把 Nagios 加入到服务列表中以使之在系统启动时自动启动
chkconfig --add nagios
chkconfig nagios on
检查Nagios 的配置文件是否有语法错误
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
(这条命令会经常用到要牢记 )
如果没有报错,就可以启动 Nagios 服务
service nagios start
访问http://服务器ip/nagios 输入用户名和口令就可以访问了,访问的结果是里面并没有任何监控的主机。
1.2. 自定义监视内容和集成 Nagios 报告 Ganglia 指标
1.2.1. 自定义监视内容
注册以收到警告
所有配置完成后,注册以收到警告。我们开始时已经完成了该操作,但是如果希望更改或添加用户,则可以修改 /usr/local/nagios/etc/objects/contacts.cfg 文件。将联系人名称改为您的名字,将电子邮件改为您的电子邮件地址。大部分基本的 Linux 服务器应该已经设置好,可以处理邮件了。
在 grid/cloud/cluster 中配置其他节点,为了以示区别。创建一个目录放置所有关于ganglia-nagios的配置文件:
mkdir -p /usr/local/nagios/etc/dallas
我需要通知 Nagios 我的配置文件将放在哪里。为此我修改 nagios.cfg 文件,添加以下行:
vi /usr/local/nagios/etc/nagios.cfg
在相应位置添加一行:
cfg_dir=/usr/local/nagios/etc/dallas
我将在此创建一组文件(很容易让人糊涂)。下图 显示了这些条目以及它们所属的文件,并展示了对象之间的关系。
条目及文件图(/etc/local/nagios/etc/、/etc/local/nagios/etc/objects/)
根据该图继续进行其他设置和安装。
在 /usr/local/nagios/etc/dallas/nodes.cfg (和localhost.cfg文件内容、作用相似)文件中,定义所有节点和节点组。需要监视三种机器:
网络服务器(本例中是运行 Ganglia 的 Linux 服务器)
网络交换机(交换机包括高速交换机和 Gigabit Ethernet)
管理设备(比如刀片式管理模块、老 IBM RSA 卡、BMC、可能的智能 PDU 等等)。
创建三个相应的组,如下所示:
define hostgroup { hostgroup_name dallas-cloud-servers alias Dallas Cloud Servers } define hostgroup{ hostgroup_name dallas-cloud-network alias Dallas Cloud Network Infrastructure }
define hostgroup{ hostgroup_name dallas-cloud-management alias Dallas Cloud Management Devides } |
接下来我创建三个模板文件,三个节点组的节点共享通用特征:
define host { name dallas-management use linux-server hostgroups dallas-cloud-management # TEMPLATE! register 0 } define host { name dallas-server use linux-server hostgroups dallas-cloud-servers # TEMPLATE! register 0 }
define host { name dallas-network use generic-switch hostgroups dallas-cloud-network # TEMPLATE! register 0 } |
现在每个节点定义为 添加要监控的服务器
。各自的示例如下:
define host { use dallas-server host_name x336001 address 172.10.11.1 } define host { use dallas-network host_name smc001 address 172.10.0.254 } define host { use dallas-management host_name x346002-rsa address 172.10.11.12 } |
(注:注意带颜色的部分)
验证是否配置成功,(这一步很重要)则运行:
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
这将验证文件并帮助您发现错误。
现在创建另一文件对要监控的内容进行自定义:
vi /usr/local/nagios/etc/dallas/host-services.cfg
最简单的是将配置从希望监视的 localhost 中复制出来。并添加了一个依赖关系:
define service{ use generic-service hostgroup_name dallas-cloud-servers service_description SSH check_command check_ssh }
define service{ use generic-service hostgroup_name dallas-cloud-servers service_description PING check_command check_ping!100.0,20%!500.0,60% }
define servicedependency{ hostgroup_name dallas-cloud-servers service_description PING dependent_hostgroup_name dallas-cloud-servers dependent_service_description SSH } |
|
重启 Nagios 并测试菜单,以确保看到 ping 和 ssh 检查了节点:
service nagios reload
1.2.2. 集成 Ganglia。
Nagios Exchange 是另一个获取 Nagios 插件的好地方。假设您将源代码解压到 /usr 目录中,剩下的只需要复制 contrib 目录中的 check_ganglia.py
脚本即可:
cp /usr/ganglia-3.2.0/contrib/check_ganglia.py /usr/local/nagios/libexec/ |
check_ganglia
是一个很棒的 Python 脚本,可以运行于 gmetad
运行的服务器上(在我的示例中是 Nagios和ganglia 在同一服务器)。
创建 /usr/local/nagios/etc/dallas/ganglia-services.cfg 文件并添加要监控的内容(也可以和上面所自定义的内容一起使用):
vi /usr/local/nagios/etc/dallas/ganglia-services.cfg
define servicegroup { servicegroup_name ganglia-metrics alias Ganglia Metrics } define command { command_name check_ganglia command_line $USER1$/check_ganglia.py -h $HOSTNAME$ -m $ARG1$ -w $ARG2$ -c $ARG3$ } define service { use generic-service name ganglia-service hostgroup_name dallas-cloud-servers service_groups ganglia-metrics notifications_enabled 0 } define service { use ganglia-service service_description load_one check_command check_ganglia!load_one!4!5 } define service { use ganglia-service service_description disk_free check_command check_ganglia!disk_free!10!5 } |
|
重启 Nagios 时,现在可以根据 Ganglia 指标发出警告!
1.3. 监控软件nagios-扩展
1.3.1. NRPE功能和意义
基本的Nagios 监测服务只能是本地系统监测以及对远程主机的连通性监测。为了使Nagios的监测服务器能够远程对被监测主机系统上的信息进行获取,比如远程系统上的进程数、磁盘空间使用状况、所运行的服务等等这些必须要登录远程主机系统上才能了解的信息的话,就必须要依靠NRPE这个核心扩展插件程序,NRPE作为中间的代理程序,扮演着一手接受着Nagios监测服务器发来的请求,另一手在远程主机系统上获取指定的信息的中间人角色。
1.3.2. NRPE工作方式
如以上提到的实现Nagios对远程系统的监测,那么首先必须要在被监测的远程主机上除了安装Nagios-plugins插件程序之外还必须安装NRPE 核心扩展插件程序,并将NRPE在被监测的远程主机系统上以守护进程的方式运行起来,开放指定的NRPE监听端口监听着Nagios监测服务器发送过来的所有监测请求。另外,在Nagios监测服务器上,在必须要安装Nagios-plugins插件程序和NRPE核心扩展插件程序。唯一不同的是, Nagios监测服务器不需要将NRPE作为守护进程运行着,因为它本身一般不需要被别人监测着而是去监测别人,对Nagios监测服务器而言,它只需要使用到Nagio-plugins插件程序和NRPE扩展插件程序就足够了
1.3.3. 被监控端的安装配置
首先为被监控端准备nagios-plugins和nrpe的安装包。
添加用户nagios:
usradd nagios
passwd nagios
我的安装包放在/usr目录下面;
cd /usr
tar xzvf nagios-plugins-XXX.tar.gz
cd nagios-plugins-XXX
./configure --prefix=/usr/local/nagios
make
make install
./configure --with-nagios-user=nagios --with-nagios-group=nagios --prefix=/usr/local/nagios &&make && make install
chown nagios.nagios /usr/local/nagios
chown -R nagios.nagios /usr/local/nagios/libexec
再在被监控主机上安装NRPE扩展插件程序:
tar -zxvf nrpe-xxx.tar.gz
cd nrpe-xxx
./configure
预配置完毕后会反馈提示信息以及建立Makefile
-------------------------------------------------------
configure: creating ./config.status
config.status: creating Makefile
config.status: creating src/Makefile
config.status: creating subst
config.status: creating include/config.h
*** Configuration summary for nrpe 2.9 08-13-2007 ***:
General Options:
-------------------------
NRPE port: 5666
NRPE user: nagios
NRPE group: nagios
Nagios user: nagios
Nagios group: nagios
Review the options above for accuracy. If they look okay,
type 'make all' to compile the NRPE daemon and client.
最后提示继续使用“make all”命令来对NRPE守护程序以及客户端程序进行编译。
-------------------------------------------------------
make all
make install-plugin
make install-daemon
make install-daemon-config
make install-xinetd
相关文件的修改
vi /etc/xinetd.d/nrpe
only_from = 127.0.0.1 192.168.0.224
(注意,192.168.0.224监控服务器的IP,也就是所允许192.168.0.224来监控本机的服务)
配置nrpe的主配置文件
cd /usr/local/nagios/etc
vim nrpe.cfg
allow_hosts=127.0.0.1,192.168.0.224
#注: 修改为nagios的服务器地址,如果是多个IP 中间用“,” 隔开
vi /etc/services
nrpe 5666/tcp # NRPE(添加一行)
service xinetd restart
如果配置没有问题的话,输入如下命令。查看配置是否配好
netstat -at | grep nrpe
tcp 0 0 *:nrpe *:* LISTEN
找到NRPE运行的执行程序
ll /usr/local/nagios/bin/nrpe
-rwxrwxr-x 1 nagios nagios 93420 Oct 7 01:16 /usr/local/nagios/bin/nrpe
了解NRPE的执行程序的使用方式
/usr/local/nagios/bin/nrpe -h
-------------------------------------------------------
Usage: nrpe [-n] -c <config_file> <mode>
运行方法:nrpe -c NRPE配置文件路径 运行模式
Options:
可用选项
-n = Do not use SSL
不使用SSL方式,一般都使用SSL。
<config_file> = Name of config file to use
指定NRPE配置文件路径,这个NRPE主配置文件就是nrpe.cfg。
<mode> = One of the following two operating modes:
指定NRPE的运行方式,一共有2种可用的NRPE运行方式:
-i = Run as a service under inetd or xinetd
以超级守护进程inetd或xinetd方式运行NRPE,要通过这种方式运行的话还要安装和配置xinetd,一般不用。
-d = Run as a standalone daemon
以独立守护进程方式运行NRPE,一般常用这种运行方式。
-------------------------------------------------------
测试NEPE本地是否正常启动
/usr/local/nagios/libexec/check_nrpe –H localhost
如果正确的话,回返回NRPE的版本号
将NRPE运行添加加入系统启动脚本中
echo "/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d" >> /etc/rc.d/rc.local
到此,被监控主机要做的工作已经完成了。
1.3.4. 服务器端的配置:
1. 安装软件nrpe-2.12.tar.gz(有些版本装不上,这个版本可以)
服务器和被监控主机通过nrpe通信
cd /usr
tar xzvf nrpe-2.12.tar.gz
cd nrpe-2.12
./configure &&make all &&make install-plugin &&make install-daemon &&make install-daemon-config
在command.cfg命令定义文件中添加NRPE命令。
vi /usr/local/nagios/etc/commands.cfg
添加NRPE功能命令。
define command(
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}
这里要说明几点:
(1) 这里定义的命令名就叫作check_nrpe。
(2) $USER1$/check_nrpe会通过引用resource.cfg获得/usr/local/nagios/libexec/check_nrpe这个绝对路径。
(3) -H $HOSTADDRESS$ 用来获得指定被监测主机的IP地址,$HOSTADDRESS$变量会通过定义主机名查找到host段中的IP地址。
(4) -c $ARG1$ 用来指定被监测主机上NRPE守护进程运行着的NRPE命令名。
在Nagios监控服务器上然后按照NRPE命令定义来添加NRPE远程监控服务:
vi usr/local/nagios/etc/object/localhost.cfg
在localhost.cfg 添加 define host define service
define host{
use linux-server
host_name remotehost
alias Remote Host
address 192.168.0.221 #远程Linux服务器的地址
contact_groups admins
}
实现监控192.168.0.221服务器硬盘使用情况
define service{
use genericPservice
host_name remotehost
service_description SwapRUsage
check_command check_nrpe!check_swap
}
通过这样的方法可以在localhost文件里添加更多的服务
检查是否可以监控客户端:
/usr/local/nagios/libexec/check_nrpe -H 192.168.0.221(此IP为被监控端地址)
返回版本号则是正确的,如果有错可以通过如下命令检查:
/usr/local/nagios/bin/nagios –v /usr/local/ngaios/etc/nagios.cfg
重启 Nagios Service 使配置生效
service nagios reload
注意:监控主机和被监控主机如果启动Iptables防火墙的话,测试的时候可以停止iptables服务 Service iptables stop 正真的使用中,需要开启Iptables,同时配置防火墙是Iptables 的5666端口开放。
防火墙配置方法:
/sbin/iptables -A FORWARD -i eth0 -p tcp --dport 5666 -j ACCEPT
第二章、 注意事项
l 必须通过yum源安装php
l 必须为网络配置网关
l Nagios定义的监控状态
nagios定义了4中监控状态,代表不同的严重级别,除了OK代表正常不用关心外,其余3种都要引起重视.如下表
状态 | 代码 | 颜色 |
正常 | OK | 绿色, |
警告 | WARNING | 黄色, |
严重 | CRITICAL | 红色, |
未知错误 | UNKOWN | 深黄色 |