Nagios是一款开源的计算机系统和网络监视工具,可以监控Windows、Linux和Unix的主机状态,交换机路由器等网络设备,在系统或服务状态异常时发出邮件或短信报警,第一时间通知网站运维人员,在状态恢复后发出正常的电子邮件或短信通知。
1. Nagios工作原理
Nagios的功能是监控服务和主机,但其自身并不包括这些功能,所有的监控、检测功能都是通过各种插件来完成的。安装完Nagios之后,在Nagios主目录下的/libexex里面放有Nagios自带的插件,如:check_disk是检查磁盘空间的插件,check_load是检查cpu负载的插件,每一个插件可以通过运行./check_xxx -h命令来检查其使用方法和功能。
2. Nagios的四种监控状态
Nagios可以识别四种状态返回信息。0(OK)表示状态正常(绿色显示),1(WARNING)表示出现警告(×××),2(CRITICAL)表示出现非常严重错误(红色),3(UNKNOWN)表示未知错误(深×××),nagios根据插件返回来的值来判断监控对象的状态,并通过web显示出来,以供管理员即时发现故障。
3. Nagios通过nrpe插件来远程管理服务的工作过程
(1) Nagios执行安装在它里面的check_nrpe插件,并告诉check_nrpe去检测哪些服务。
(2)通过ssl,check_nrpe连接远端机器上的NRPE daemon。
(3)NRPE运行本地的各种插件去检测本地服务器和状态(check_disk,...etc)。
(4)NRPE把检测的结果传给主机端的check_nrpe,check_nrpe再把结果送到nagios状态队列中。
(5)Nagios依次读取队列中的信息,再把结果显示出来。
案例:部署Nagios监控系统
在目前而言,有服务器的地方就少不了监控系统,可以实时了解服务器的运行状况并能在出现问题时发出警告,使管理员及时解决问题。本案例使用三台服务器来配置Nagios监控系统,具体拓扑图如下:
实验步骤如下:
1. 安装Nagios
[root@localhost ~]# service iptables stop [root@localhost ~]# useradd -s /sbin/nologin nagios [root@localhost ~]# mkdir /usr/local/nagios [root@localhost ~]# chown –R nagios:nagios /usr/local/nagios [root@localhost ~]# tar zxf nagios-4.0.1.tar.gz [root@localhost ~]# cd nagios-4.0.1 [root@localhost nagios-4.0.1]# ./configure --prefix=/usr/local/nagios [root@localhost nagios-4.0.1]# make all [root@localhost nagios-4.0.1]# make install //安装nagios的主程序,CGI和HTML文件 [root@localhost nagios-4.0.1]# make install-init //在/etc/rc.d/init.d下创建启动脚本 [root@localhost nagios-4.0.1]# make install-commandmode //配置目录权限 [root@localhost nagios-4.0.1]# make install-config //安装nagios示例配置文件 [root@localhost nagios-4.0.1]# ls /usr/local/nagios/ bin etc libexec sbin share var //各个目录结构以及功能如下图所示
2. 安装nagios插件
Nagios提供的各种监控功能基本上是通过插件完成的
[root@localhost ~]# yum -y install openssl-devel //监控端可被监控端需要SSL通道 [root@localhost ~]# yum -y install httpd //可通过Web监控界面查看 [root@localhost ~]# yum -y install php //配置Web监控界面需要PHP支持 [root@localhost ~]# tar zxf nagios-plugins-1.5.tar.gz [root@localhost ~]# cd nagios-plugins-1.5 [root@localhost nagios-plugins-1.5]#./configure --prefix=/usr/local/nagios [root@localhost nagios-plugins-1.5]# make [root@localhost nagios-plugins-1.5]# make install [root@localhost ~]# tar zxf nrpe-2.15.tar.bz2 [root@localhost ~]# cd nrpe-2.15 [root@localhost nrpe-2.15]#./configure [root@localhost nrpe-2.15]#make all [root@localhost nrpe-2.15]#make install-plugin
为了安全,一般情况需要Nagios的Web监控界面经过授权才能访问,需要到/etc/httpd/conf.d/nagios.conf配置文件加入一些信息
[root@localhost ~]# vim /etc/httpd/conf.d/nagios.conf ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin"AuthType Basic Options ExecCGI AllowOverride None Order allow,deny Allow from all AuthName "Nagios Access" AuthUserFile /usr/local/nagios/etc/htpasswd //此目录存放身份验证文件 Require valid-user Alias /nagios "/usr/local/nagios/share"AuthType Basic Options None AllowOverride None Order allow,deny Allow from all AuthName "nagios Access" AuthUserFile /usr/local/nagios/etc/htpasswd Require valid-user [root@localhost ~]# /usr/bin/htpasswd -c /usr/local/nagios/etc/htpasswd nagiosadmin New password: (输入密码) Re-type new password: (再输入一次密码) Adding password for user nagiosadmin [root@localhost ~]# cat /usr/local/nagios/etc/htpasswd //查看认证内容 nagiosadmin:dH4sf78y9dfP9 [root@localhost ~]# service httpd start
打开浏览器,输入http://192.168.1.10/nagios,输入用户名、密码即可
目前只能是打开网页,很多的监控选项不能看到,如果需要监控远程的服务器,还需要做很多配置,下面开始配置。
3. Nagios监控系统的配置文件介绍
(1)Nagios的配置文件默认在/usr/local/nagios/etc/目录下
Nagios.cfg:主配置文件,定义各种配置文件的名称和位置
Cgi.cfg:控制CGI的配置文件
Resource.cfg:资源文件,定义各种变量,以便于其他文件调用
Objects:其他配置文件存放目录,此目录下主要有:
Command.cfg:命令配置文件,定义各种命令格式,以备其他文件调用
contacts.cfg:联系人和组,发邮件等告警信息时可以调用
localhost.cfg:监控本机的配置文件
timeperiods.cfg:定义监控时间的配置文件,便于其他文件调用
Hostgroups.cfg:定义监控的主机(组),需手动创建。
(2)配置文件之间的关系
在Nagios的配置过程中涉及的几个定义有主机、主机组、服务、服务组、联系人、联系人组、监控时间和监控命令等。从这些定义可以看出,nagios各个配置文件之间互为关联、彼此引用的。成功配置出一台nagios监控系统,必须要弄清楚每个配置文件之间依赖与被依赖的关系,最重要的有四点
a.定义监控那些主机,主机组,服务和服务组
b.定义这个监控要用什么命令实现
c.定义监控的时间段
d.定义主机或服务器出现问题时要通知的联系人和联系人祖
(3)配置nagios
为了能更清楚的说明问题,同时也为了维护方便,建议将nagios各个定义的对象创建独立的配置文件。
a.创建conf目录来定义host主机
b.创建hostgroups.cfg文件来定义主机组
c.用默认的contacts.cfg文件来定义联系人和联系人组
d.用默认的commands.cfg文件来定义命令
e.用默认的timeperiods.cfg来定义监控时间段
f.用默认的templetes.cfg文件作为资源引用文件
4. 配置Nagios监控系统
1)修改主配置文件
[root@localhost ~]# mkdir /usr/local/nagios/etc/conf [root@localhost ~]# vim /usr/local/nagios/etc/nagios.cgf //添加两行 cfg_file=/usr/local/nagios/etc/objects/hostgroups.cfg cfg_dir=/usr/local/nagios/etc/conf
2)添加/usr/local/nagios/etc/objects/commands.cfg(定义check_nrpe监控命令)
[root@localhost ~]# vim /usr/local/nagios/etc/objects/commands.cfg define command{ command_name check_nrpe command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ }
3)修改/usr/local/nagios/etc/objects/localhost.cfg(定义本机监控文件)
[root@localhost ~]# vim /usr/local/nagios/etc/objects/localhost.cfg define service{ use local-service host_name localhost //主机名,在host段定义 service_description Total Processes //监控服务名称,在 Web页面显示 check_command check_local_procs!250!400!RSZDT //监控界值 }
4)修改/usr/local/nagios/etc/objects/contacts.cfg(定义监控服务器联系人)
[root@localhost ~]# vim /usr/local/nagios/etc/objects/contacts.cfg define contact{ contact_name ysf //定义联系人名称 alias ysf //别名 service_notification_period 24x7 //监控主机服务24x7小时 host_notification_period 24x7 //监控主机对角应用服务24x7小时 service_notification_options w,u,c,r //告警级别参数 host_notification_options d,u,r //定义在什么状态下发通知,分别表示宕机、不可到达、重新恢复 service_notification_commands notify-service-by-email //调用邮件名称 host_notification_commands notify-host-by-email //调用飞信名称 email root //定义发送到哪个邮箱 } define contacatgroup{ contactgroup_name ysf alias ysf members ysf }
5)新建/usr/local/nagios/etc/objects/hostgroups.cfg(定义主机组)
[root@localhost ~]# vim /usr/local/nagios/etc/objects/hostgroups.cfg define hosrgroup{ hostgroup_name web alias web members 192.168.1.20 } define hosrgroup{ hostgroup_name mysql alias mysql members 192.168.1.30 }
6)具体监控MySQL、HTTP主机的存活、负载、进程
在/usr/local/nagios/etc/conf下面新建192.168.1.20.cfg文件和192.168.1.30.cfg
[root@localhost ~]# cd /usr/local/nagios/etc/conf/ [root@localhost ~]# vim 192.168.1.20.cfgdefine host{ //定义监控哪台主机 host_name 192.168.1.20 alias 192.168.1.20 address 192.168.1.20 check_command check-host-alive max_check_attempts 5 check_period 24x7 contact_groups ysf notification_period 24x7 notification_options d,u,r } define service{ //定义监控这台主机的存活 host_name 192.168.1.20 service_description check-host-alive check_command check-host-alive max_check_attempts 3 normal_check_interval 2 retry_check_interval 2 check_period 24x7 notification_interval 10 notification_period 24x7 notification_options w,u,c,r contact_groups ysf } define service{ //定义这台主机进程数 host_name 192.168.1.20 service_description check-proce check_command check_nrpe!check_total_procs max_check_attempts 3 normal_check_interval 2 retry_check_interval 2 check_period 24x7 notification_interval 10 notification_period 24x7 notification_options w,u,c,r contact_groups ysf } define service{ //定义这台主机进程数 host_name 192.168.1.20 service_description check-load check_command check_nrpe!check_load max_check_attempts 3 normal_check_interval 2 retry_check_interval 2 check_period 24x7 notification_interval 10 notification_period 24x7 contact_groups ysf }
同理,在192.168.1.3.cfg的配置一样,改下IP即可
7)修改/usr/local/nagios/etc/cgi.cfg
将use-authentication=1修改为0
8)重启Nagios服务
[root@localhost ~]# service nagios restart [root@localhost ~]# chcon -R -t httpd_sys_content_t /usr/local/nagios/sbin/ [root@localhost ~]# chcon -R -t httpd_sys_content_t /usr/local/nagios/share/ //如开启了selinux,需要配置以上命令
9)访问网页查看状态
5. 配置被控端192.168.1.20、192.168.1.30(MySQL和Web)
[root@localhost ~]# yum -y install openssl openssl-devel [root@localhost ~]# useradd -s /sbin/nologin nagios [root@localhost ~]# tar zxf nagios-plugins-1.5.tar.gz [root@localhost ~]# cd nagios-plugins-1.5 [root@localhost nagios-plugins-1.5]# ./configure --prefix=/usr/local/nagios [root@localhost nagios-plugins-1.5]# make [root@localhost nagios-plugins-1.5]# make install [root@localhost nagios-plugins-1.5]# chown -R nagios:nagios /usr/local/nagios [root@localhost ~]# tar zxf nrpe-2.15.tar.bz2 [root@localhost ~]# cd nrpe-2.15 [root@localhost nrpe-2.15]# ./configure [root@localhost nrpe-2.15]# make all [root@localhost nrpe-2.15]# make install-plugin [root@localhost nrpe-2.15]# make install-daemon [root@localhost nrpe-2.15]# make install-daemon-config [root@localhost ~]# ps -ef | wc -l //查看进程数,进程界值根据总进程数来进行调整 [root@localhost ~]# more /proc/cpuinfo | grep proc | wc -l //负载是根据服务有几个CPU来调整界值的 [root@localhost ~]# vim /usr/local/nagios/etc/nrpe.cfg allowed_hosts=127.0.0.1,192.168.1.10 //添加监控服务器的IP地址 . [root@localhost ~]# /usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d //启动nrpe
在Nagios服务器上测试nrpe运行是否正常,出现下面的信息说明正确。
[root@localhost ~]# /usr/local/nagios/libexec/check_nrpe -H 192.168.1.20 NRPE v2.15
在浏览器上访问
也可在services.cfg文件中添加192.168.1.20.cgf文件中的参数
[root@localhost ~]# vi /usr/local/nagios/etc/objects/services.cfg 1define service{ use local-service host_name nagios service_description ping check_command check-host-alive }2define service{ use local-service host_name nagios service_groups 系统状况检查 service_description 登陆用户数 check_command check-host-users!20!50 }3define service{ use local-service host_name nagios service_groups 系统状况检查 service_description 根分区 check_command check-local_disk!20%!10%!/ }4define service{ use local-service host_name nagios service_groups 系统状况检查 service_description 进程总数 check_command check-local_procs!250!400!RSZDT }5define service{ use local-service host_name nagios service_groups 系统状况检查 service_description 系统负载 check_command check-host-load!5.0,4.0,3.0!10.0,6.0,4.0 }6define service{ use local-service host_name nagios service_groups 系统状况检查 service_description 交换空间利用率 check_command check-local_swap!20!10 }7define service{ servicegroup_name 系统状况检查 alias 系统概况 }
check_local_users!20!50 //监测远程主机当前的登录用户数量,如果大于20用户则报warning,如果大于50则报critical
check_local_disk!20%!10%!/ //如果可用空间低于20%会报Warning,如果可用空间低于10%则报Critical:
check_local_procs!250!400!RSZDT //监测远程主机当前的进程总数,如果大于250进程则报warning,如果大于400进程则报critical,S(休眠)、R(运行)、Z(僵死)、D (不可中断)、T (停止)
check_load -w 5,4,3 -c 10,6,4这个命令的意义如下
当1分钟多于5个进程等待,5分钟多于4个,15分钟多于3个则为warning状态
当1分钟多于10个进程等待,5分钟多于6个,15分钟多于4个则为critical状态
服务组并不是必须的,这是配合nagios的监控页面的显示