nagios网络监控
nagios是什么:
Nagios是一款开源的免费网络监视工具,能有效监控Windows、Linux和Unix的主机状态,交换机路由器等网络设置,打印机等。在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知。
nagios是功能强大的监控软件,主要用来监控网络设备的状态(比如:主机的资源状态);适合于:对大量的服务器进行监控,判断其负载或服务是否正常,发生异常能通过邮件、短信报警。特别注意:流量监控不是他的强项,流量监控建议使用cacti.可以绘制非常直观的图形
nagios能监视什么:
nagios可以监控:1、主机是否宕机(通过ping命令,如果ping不通会认为主机属于宕机状态,但不影响所监控的其他服务);2、服务器资源(cpu使用率、硬盘剩余空间等);3、网络服务(smtp\pop3\http\);4、监控网络设备(路由器、交换机等。)
操作步骤:
1、 安装编译所需的软件包:如下图所示:
# yum –y install httpd php-* gd-* mysql-devel
(若mysql-devel包不安装,会没有check_mysql插件。)
2、创建运行nagios服务的用户
注:useradd nagios #创建运行nagios服务的用户
usermod -G nagios apache #使apache用户对nagios目录具有写权限,不然web页面操作失败.
3、nagios软件安装
释放nagios源码包,进行编译前的预备置:
编译并安装nagios及相关操作,如下图所示:
注:
make install //安装主程序,CGI和HTML文件
make install-init //在/etc/rc.d/init.d安装启动脚本
make install-commandmode //配置目录权限
make install-config //安装示例配置文件
make install-webconf //安装nagios的web接口,会在/etc/httpd/conf.d目录中创建nagios.conf文件。
注:若在RHEL6X32位系统中安装nagios-cn-3.2.3.tar.bz2要先执行make clean操作,然后再执行./configure和make all等操作,否则执行make all时会报如下错误。
验证安装是否成功:验证程序是否被正确安装,我们切换目录到安装路径(默认安装目录是/usr/local/nagios),看是否存在etc、bin、sbin、share、var、这五个目录,如果存在说明程序被正确安装到系统了
下面我们对这五个目录功能做简要说明:
bin:nagios执行程序所在的目录,nagios文件即为主程序。
etc:nagios配置文件目录,当make install-config完以后etc下面就会出现默认的配置文件。
sbin:nagios CGI文件所在目录,这里存放的是一些外部命令执行程序。
share:nagios网页文件目录,存放一些html文件。
var:nagios日志文件、pid等文件目录。
4、安装nagios-plugins插件:
nagios-plugins是nagios官方提供的一套插件程序,nagios监控主机的功能其实都是通过执行插件程序来实现的。
释放nagios-plugins源码包并进行编译前的预备置
编译并安装nagios-plugins插件:
这个装完之后会在/usr/local/nagios/libexec文件夹中多出一些文件,这里存放nagios所要用到的所有插件.
安装后所有插件命令将被安装到/usr/local/nagios/libexec 目录下
到此nagios就安装完毕,但还需修改nagios的配文件
预备知识:
联系人 contact:出了问题向谁报告?一般当然是系统管理员了
监控时间段 timeperiod :7X24小时不间断还是周一至周五,或是自定义的其他时间段
被监控主机 Host :所需要监控的服务器,当然可以是监控机自己
监控命令 command :nagios发出的哪个指令来执行某个监控,这也是自己定义的
被监控的服务 Service :例如主机是否存活,80端口是否开,磁盘使用情况或者自定义的服务等
注意:多个被监控主机可以定义为一个主机组,多个联系人可以被定义为一个联系人组
5、修改配置文件:修改nagios的主配置文件nagios.cfg
cfg_file=/usr/local/nagios/etc/objects/hosts.cfg #新建hosts.cfg文件,存放主机与主机组定义
cfg_file=/usr/local/nagios/etc/objects/services.cfg #新建services.cfg文件,存放服务与服务组定义
#cfg_file=/usr/local/nagios/etc/objects/localhost.cgf #加“#”注释localhost.cfg
修改后结果如下图所示:
将localhost.cfg文件注释掉,添加有关hosts.cfg和services.cfg文件定义。
在/usr/local/nagios/etc/objects目录下存放一些以.cfg为后缀的文件
timeperiods.cfg //监控时间段配置文件
如下图所示定义了一个监控时间段,它的名称是24x7(时间段的名称,这个地方不要有空格),监控的时间是每天全天24小时
commands.cfg //命令配置文件
图略
contacts.cfg //联系人配置文件
如下图所示定义了一个联系人,联系人的名称是nagioscontact,并定义了一个联系人组,联系人组名是admins,包含一个成员nagioscontact
下面列出其中重要的几个选项做说明:
service_notification_period 24x7
服务出了状况通知的时间段,这个时间段就是上面在timeperiods.cfg中定义的.
host_notification_period 24x7
主机出了状况通知的时间段, 这个时间段就是上面在timeperiods.cfg中定义的
service_notification_options w,u,c,r
当服务出现w-报警(warning),u-未知(unkown),c-严重(critical),或者r-从异常情况恢复正常,在这四种情况下通知联系人
host_notification_options d,u,r
当主机出现d-当机(down),u-返回不可达(unreachable),r-从异常情况恢复正常,在这3种情况下通知联系人
service_notification_commands notify-service-by-email
服务出问题通知采用的命令notify- service-by-email,这个命令是在commands.cfg中定义的,作用是给联系人发邮件,还可以飞信发手机短信给联系人,但需要安装飞信程序。. host_notification_commands notify- host-by-email
同上,主机出问题时采用的也是发邮件和飞信的方式通知联系人。
email [email protected]
很明显,联系的人email地址
Pager 137XXXXXXXX
联系人接收报警信息电话
可以将多个联系人组成一个联系人组
define contactgroup{
contactgroup_name admins //联系人组的名称,同样不能空格
alias Nagios Administrators //别名
members nagioscontact
//组的成员,来自于上面定义的联系人,如果有多个联系人则以逗号相隔
templates.cfg //模板配置文件
/usr/local/nagios/etc/cgi.cfg //它的作用是控制相关cgi脚本
其他配置文件以实际情况来进行配置
发现在/usr/local/nagios/etc/objects目录中并不存在hosts.cfg和services.cfg文件,这两个文件需要手工创建。
6、创建hosts.cfg文件:
#vi /usr/local/nagios/etc/objects/hosts.cfg
内容如下:
define host{
use linux-server //定义使用的模板
host_name nagios //被监控主机的名称,最好别带空格
alias nagios //别名
address 127.0.0.1 //被监控主机的IP地址
check_command check-host-alive
//监控的命令check-host-alive,这个命令来自commands.cfg,用来监控主机是否存活
max_check_attempts 5 //检查失败后重试的次数
check_period 24x7 //检查的时间段24x7,同样来自timeperiods.cfg中定义
notification_interval 10 //提醒的间隔,每隔10分钟提醒一次
notification_period 24x7 //提醒的周期, 24x7,同样来自timeperiods.cfg中定义
contact_groups admins //联系人组,上面在contactgroups.cfg中定义的admins
notification_options d,u,r //指定什么情况下提醒
}
主机组并不是必须的,这是配合nagios的监控页面的显示
通过简单的复制修改就可以定义多个主机了.后面我们会加上被监控主机mysql
7、创建services.cfg文件:(这里只是简单介绍,也可在services.cfg文件中添加hosts.cfg文件中的参数)
#vi /usr/local/nagios/etc/objects/services.cfg
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状态
Check_local_swap!20%!10% //如果交换空间低于20%会报Warning,如果可用空间低于10%则报Critical
服务组并不是必须的,这是配合nagios的监控页面的显示
校验nagios配置文件的正确性:
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
若显示如下图所示则表示没有错误
nagios监控页面访问用户和密码:
注:安装好nagios后会在apache安装目录中的conf.d目录存在一个nagios.conf文件,这个文件中定义了有关访问nagios的web页面的定义。在httpd.conf文件使用Include conf.d/*.conf配置项将nagios.conf文件的定义包含到httpd.conf文件中。
执行htpasswd命令添加一个访问nagios页面的授权用户
启动httpd和nagios服务并设置开机自动启动
#service nagios start #启动nagios和httpd服务
#service httpd start #启动httpd服务
#chkconfig httpd on
#chkconfig nagios on
注意:如果你开启了selinux 需要配置如下二步:
chcon -R -t httpd_sys_content_t /usr/local/nagios/sbin/
chcon -R -t httpd_sys_content_t /usr/local/nagios/share/
访问nagios监控页面,输入上面添加的用户名和密码
http://IP/nagios (注意nagios服务器上有关防火墙的设置)
显示结果如下:
二、监控mysql服务运行
1、mysql主机上运行有mysql服务:
安装mysql的服务器软件包(这里我是以RPM类型包安装mysql服务器)
启动mysqld服务并设置为开机自动启动
#service mysqld start
#chkconfig mysqld on
2、在mysql服务器上创建监控检测帐户:
3、在nagios主机上检测是否可以连接mysql主机上的mysql服务(注意要在mysql主机设置防火墙允许3306端口的通信)
注:若没有check_mysql插件,是因为没有安装mysql-devel包,将mysql-devel包安装后重新安装一下nagios-plugins就有了
4、在nagios主机上添加对mysql服务监控的定义:
#vi /usr/local/nagios/etc/objects/hosts.cfg 添加如下行
#vi /usr/local/nagios/etc/objects/services.cfg 添加如下行
#vi /usr/local/nagios/etc/objects/commands.cfg 添加如下行(注:check_mysql命令必须存在于/usr/local/nagios/libexec目录中)
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg #检测无误后重载nagios
service nagios reload
访问ngios的web页面:如下所示,能通过监控发现MYSQL服务运行正常。
如果访问nagios页面报下图错误
解决方法:修改/usr/local/nagios/etc/cgi.cfg文件
三、Nagios通过NRPE监控远程主机系统状况(如msyql主机)
NRPE总共由两部分组成:
check_nrpe插件:运行在监控主机上 (即nagios主机)
NRPE daemon:运行在远程的linux主机上(通常就是被监控机)
整个的监控过程:
当Nagios需要监控某个远程linux主机的服务或者资源情况时:
1:nagios运行check_nrpe插件,我们要在nagios配置文件中告诉它要检查什么.
2:check_nrpe插件会通过SSL连接到远程的NRPE daemon.
3:NRPE daemon会运行相应的nagios插件来执行检查本地资源或服务.
4:NRPE daemon将检查的结果返回给check_nrpe插件,插件将其递交给nagios做处理.
注意:NRPE daemon需要nagios插件和Nrpe一起安装在远程被监控linux主机上,否则,daemon不能做任何的监控. 别外因为它们间的通信是加密的SSL,所以需要安装SSL
这个插件需要openssl的支持,没有就直接安装一下(yum install openssl-devel)
1、远程主机设定(即被监控主机设定)这里仍然对mysql服务器进行监控,在mysql主机上进行如下操作:
被监控端只需安装nagios-plugins和nrpe就可以的
创建nagios用户:
编译安装nagios-plugins插件上:
安装xinetd软件包:
编译安装nrpe软件包:
注:make install-daemon //安装守护进程
make install-daemon-config //安装配置文件
make install-xinetd //安装xinetd脚本
配置nrpe,添加nrpe 服务
vi /etc/xinetd.d/nrpe 修改如下行
only_from = 127.0.0.1 192.168.10.100 //在后面增加监控主机(即nagios服务器)的地址192.168.10.100,以空格间隔
//改后 only_from = 127.0.0.1 192.168.10.100
如下图所示:
编辑/etc/services文件,增加NRPE服务
vi /etc/services 在该文件尾部添加如下行
nrpe 5666/tcp #nrpe服务监听端口
修改后如下图:
vi /usr/local/nagios/etc/nrpe.cfg 修改如下行
将下图中的#注释去掉并进行修改
修改后效果如下图:
command[check_disk]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /
注:command[check_disk]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p / #根分区监测
重启xinetd服务 ,查看NRPE是否已经启动
可以看到5666端口已经在监听了,并确保防火墙允许此端口
附录:
/usr/local/nagios/libexec/check_nrpe –h查看这个命令的用法
可以看到用法是check_nrpe –H 被监控的主机 -c要执行的监控命令
注意:-c后面接的监控命令必须是nrpe.cfg文件中定义的.也就是NRPE daemon只运行nrpe.cfg中所定义的命令
查看NRPE的监控命令
vim /usr/local/nagios/etc/nrpe.cfg //内容如下:
# The following examples use hardcoded command arguments...
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
注意:其他命令需要自行添加
也就是check_nrpe 的-c参数可以接的内容,等号(=)后面是实际执行的插件程序(只这与commands.cfg中定义命令的形式十分相似,不过是写在了一行).也就是说check_users就是等号后面/usr/local/nagios/libexec/check_users -w 5 -c 10的简称.
上面这5行定义的命令分别是检测登陆用户数,cpu负载,hda1的容量,僵尸进程,总进程数.各条命令具体的含义见插件用法(执行”插件程序名 –h”)
如:
由于-c后面只能接nrpe.cfg中定义的命令,也就是说现在我们只能用上面定义的这五条命令.可以在本机实验一下.执行
/usr/local/nagios/libexec/check_nrpe -H localhost -c check_users
/usr/local/nagios/libexec/check_nrpe -H localhost -c check_load
/usr/local/nagios/libexec/check_nrpe -H localhost -c check_hda1
/usr/local/nagios/libexec/check_nrpe -H localhost -c check_zombie_procs
/usr/local/nagios/libexec/check_nrpe -H localhost -c check_total_procs
2、 监控主机设置(即nagios服务器)
执行下列命令,如能看到下图输出说明连接正常。
/usr/local/nagios/libexec/check_nrpe -H 192.168.10.101
#vi /usr/local/nagios/etc/objects/commands.cfg 添加如下行
上图含义如下
command_name check_nrpe
定义命令名称为check_nrpe,在services.cfg中要使用这个名称.
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
用$USER1$代替/usr/local/nagios/libexec
这是定义实际运行的插件程序.这个命令行的书写要完全按照check_nrpe这个命令的用法.不知道用法的就用check_nrpe –h查看; -c后面带的$ARG1$参数是传给nrpe daemon执行的检测命令,之前说过了它必须是nrpe.cfg中所定义的那5条命令中的其中一条.
注:比如想要监控mysql主机(192.168.10.101)的SWAP分区,你需要mysql主机的nrpe.cfg面加入
重启xinetd服务。
在监控主机上执行:
如果这里没有定义好,那你在服务器端会报错误:NRPE command ‘check_swap’ not defined
在监控主机(即nagios服务器)的/usr/local/nagios/etc/objects/services.cfg文件中添加要监控的资源,如下图所示:
保存退出并执行下列命令检查是否有错误:
最后重新加载nagios.cfg文件。
通过浏览器访问nagios的web页面,查看新添加的监控资源(swap信息)
在services.cfg中使用check_nrpe的时候要用!带上这个参数
define service{
use generic-service //使用的模板
host_name mysqlhost //被监控的主机名,这里注意必须是linux且运行着nrpe,而且必须是hosts.cfg中定义的
service_description check-disk //监控项目的名称
check_command check_nrpe!check_disk //监控命令是check_nrpe,是在commands.cfg中定义的,带的参数是check_disk,是在nrpe.cfg中定义的
max_check_attempts 5 //最大检测尝试次数
normal_check_interval 3 //正常检测间隔时间
retry_check_interval 2 //重试检测间隔时间
check_period 24x7 //监控周期设置
notification_interval 10 //通知间隔
notification_period 24x7 //通知周期设置
notification_options w,u,c,r //定义什么状态时报警
contact_groups sagroup //报警联系组
访问ngios的web页面:如下所示,能过监控发现MYSQL系统的运行情况。
四:通过邮件发送报警
nagios除了丰富的监控功能外,报警功能相当的强大。对于报警而言,常用的无非就是邮件和短信报警两种方式,本文中主要是写的nagios的邮件报警的功。
邮件报警的配置
我们只需要编辑/usr/local/nagios/etc/object下的contact.cfg文件,在email后添加管理员的邮箱即可。一般而言,如果监控项目的分工不是太细的话就是管理员可以负责所有的监控、并对其进行处理的话,可以直接将一个或者多个管理员的邮件地址写上,使用空格或者逗号隔开。
但是如果监控的内容中服务器有单独的管理员,网络有单独的管理员的话,我们就可以定义多个contact(联系人),然后再用contactgroup(联系组)对各contact进行分组。
例如管理网络的有两人,管理服务器的有两个人,我们就可以定义两个contactgroup,然后定义四个管理员的contact,如下例是当前我正在使用的contact.cfg,服务器管理员有两名,网络管理员有两名
contact.cfg的配置
define contact{
contact_name zhang1
use generic-contact
alias zhang1
service_notification_period 24x7
host_notification_period 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 [email protected]
}
define contact{
contact_name zhang2
alias zhang2
service_notification_commands notify-service-by-email
host_notification_commands notify-host-by-email
email [email protected]
contact_name li1
alias li1
host_notification_period 24x7
host_notification_options d,u,r
email [email protected]
contact_name li2
use generic-contact
alias li2
service_notification_period 24x7
service_notification_options w,u,c,r
email [email protected]
define contactgroup{
contactgroup_name network
alias network
members zhang1,zhang2
contactgroup_name system
alias system
members li1,li2
1、在commands.cfg文件中要定义发邮件的命令(默认就存在)