Nagiosis an open source host, service and network monitoring program.
Whouses it? Lots of people, including many big companies and organizations.
Nagios是一个用来监视系统和网络的开源应用软件,它通常运行于一个主服务器上,这个服务器运行Liunx 或 Unix 操作系统。Nagios利用其众多的插件实现对本机和远端服务的监控,当被监控对象出现异常,Nagios就会及时给管理人员告警。它是一个基于TCP/IP协议的软件包,包含有nagios主程序和它的各个插件,配置非常灵活,可以监视的项目很多,也可以通 过自定义shell脚本进行监控服务,非常适合各类企业的网络应用。
Nagios功能非常强大,它可以监控服务和主机,但是他自身并不包括这部分功能的代码,所有的监控、检测功能都是有插件来完成的。再说报警功能,如果监控系统发现问题不能报警那就没有意义了,所以报警也是nagios很重要的功能之一。但是,同样的,nagios自身也没有报警部分的代码,甚至没有插件,而是交给用户或者其他相关开源项目组去完成。
配置必要的用户
# useradd nagios -s /sbin/nologin -M
安装服务端(NAGIOS CORE和NAGIOS PLUGIN)
1、nagios core
#wget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-3.2.3.tar.gz
#tar zxvf nagios-3.2.3.tar.gz
#cd nagios-3.2.3
#./configure --prefix=/usr/local/nagios
#make all
#make install
#make install-init
#make install-commandmode
#make install-config
2.NAGIOS插件(nagios-plusin)
# wgethttp://prdownloads.sourceforge.net/sourceforge/nagiosplug/nagios-plugins-1.4.15.tar.gz
#tar zxvf nagios-plugins-1.4.15.tar.gz
#cd nagios-plugins-1.4.15
#./configure --prefix=/usr/local/nagios
#make
#make install
//注意这里要确保mysql-devel安装,否则无法产生这个check_mysql插件
#ls -l /usr/local/nagios/libexec/check_mysql
-rwxr-xr-x 1 root root 4325734 Apr 8 15:17 /usr/local/nagios/libexec/check_mysql
整合APACHE (可选)
生成密码文件
/usr/local/apache/bin/htpasswd-c /usr/local/nagios/etc/nagiospwd zachaway
输入2次密码:zach123
修改httpd.conf,加入:
ScriptAlias/nagios/cgi-bin /usr/local/nagios/sbin
<Directory"/usr/local/nagios/sbin">
AuthTypeBasic
OptionsExecCGI
AllowOverrideNone
Orderallow,deny
Allowfrom all
AuthName"Nagios Access"
AuthUserFile/usr/local/nagios/etc/nagiospwd
Requirevalid-user
</Directory>
Alias/nagios /usr/local/nagios/share
<Directory"/usr/local/nagios/share">
AuthTypeBasic
OptionsNone
AllowOverrideNone
Orderallow,deny
Allowfrom all
AuthName"nagios Access"
AuthUserFile/usr/local/nagios/etc/nagiospwd
Requirevalid-user
</Directory>
检查
检查nagios服务器是否存在配置错误
/usr/local/nagios/bin/nagios-v /usr/local/nagios/etc/nagios.cfg
加入自启动
#/etc/init.d/nagios start
# 把nagios服务增加到服务清单中并设置开机自启动
#chkconfig --add nagios
#chkconfig --level 345 nagios on
在浏览器中输入http://IP/nagios/,测试nagios服务器是否已经能正确安装。
会提示输入2次用户名和密码,一个是cgi的,一个是nagios的,我们设置的是一样的
输入用户名zachaway,密码zach123后,就出来了NAGIOS的主界面
安装到此完成,之后就可以做troubleshooting了
=======================================================================
Nagios Addon( 使用常用的 NRPE)
什么是NRPE
NRPE是nagios的一个扩展,它被用于被监控的服务器上,向nagios监控平台提供该服务器的一些本地的情况。例如,cpu负载、内存使用、硬盘使用等等。NRPE可以称为nagios的for linux 客户端。
为什么要使用这个客户端呢?在nagios的插件中,有一个名为“check_ssh”的插件,它也可以实现对于远程服务器中local信息的监控。但是,相对NRPE,“check_ssh”占用的系统资源就略多了一点。
监控少量的服务时可能不会察觉,但是如果监控对象比较多,那么差距就非常明显了。但是还有一点要说明,虽然NRPE也是使用SSL安全通道,但是“check_ssh”的安全性要高于NRPE,安全性总是和易用性成反比的。
NRPE总共由两部分组成:
(1)check_nrpe:它是运行在监控主机上
(2)NRPE daemon:它是运行在远程的linux主机上(通常就是被监控机)
在nagios服务器端安装NRPE
#wget http://prdownloads.sourceforge.net/sourceforge/nagios/nrpe-2.12.tar.gz
#tar zxvf nrpe-2.12.tar.gz
#cd nrpe-2.12
#./configure --enable-ssl --with-ssl-lib (前提是已经安装了openssl与openssl-devel)
注释:NRPE默认是装在/usr/local/nagios目录下,服务器端我特别设置了一个不一样的目录
#make all
#make install-plugin
#make install-daemon
#make install-daemon-config
配置nrpe
#在commands.cfg中定义nrpe这个外部构件
vi/usr/local/nagios/etc/objects/commands.cfg,增加如下一行
#checknrpe
definecommand{
command_namecheck_nrpe
command_line$USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}
配置nrpe,在commands.cfg中定义nrpe这个外部构件
vi/usr/local/nagios/etc/objects/commands.cfg,增加如下一行
#checknrpe
definecommand{
command_namecheck_nrpe
command_line$USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}
再次检查nagios服务器是否存在配置错误
/usr/local/nagios/bin/nagios-v /usr/local/nagios/etc/nagios.cfg
启动NRPE
#/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d
#netstat -an|grep 5666
tcp 0 0 0.0.0.0:5666 0.0.0.0:* LISTEN
在客户端端安装NRPE
useraddnagios -s /sbin/nologin -M
##先安装nagios插件
# wget http://prdownloads.sourceforge.net/sourceforge/nagiosplug/nagios-plugins-1.4.15.tar.gz
#tar -zxzf nagios-plugins-1.4.15.tar.gz
#cd nagios-plugins-1.4.15
#./configure--prefix=/usr/local/nagios --with-nagios-user=nagios --with-nagios-group=nagios
#make && make install
#chown nagios.nagios /usr/local/nagios/
#chown -R nagios.nagios /usr/local/nagios/libexec/
##再安装NRPE
#tar -zxvf nrpe-2.12.tar.gz
#cd nrpe-2.12
#./configure --enable-ssl --with-ssl-lib(前提是已经安装了openssl与openssl-devel)
#make all && make install-plugin && make install-daemon&& make install-daemon-config
此时什么都不要改,先启动NRPE
/usr/local/nagios/bin/nrpe-c /usr/local/nagios/etc/nrpe.cfg -d
#netstat -an|grep 5666
tcp 0 0 0.0.0.0:5666 0.0.0.0:* LISTEN
###cat"/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d">> /etc/rc.local
###可以把以上命令写入rc.local,开机自动启动,注意,如果有iptable的话,要开放5666端口
监控
在Nagios服务器的 /usr/local/nagios/etc/ 下新建servers目录,在该目录下新建一个被监控端主机的配置文件mylinux.cfg
mkdir/usr/local/nagios/etc/server
vi/usr/local/nagios/etc/nagios.cfg
在cfg_file=/usr/local/nagios/etc/objects/templates.cfg下添加一行
cfg_file=/usr/local/nagios/etc/mylinux.cfg
文件位置并不重要,也可以放在/etc/object/下,注意要和nagios.cfg里面的路径一致即可
复制如下配置文件到此文件中
vi/usr/local/nagios/etc/mylinux.cfg
definehost{
uselinux-server
host_namemytest237
aliasmytest237
address10.0.3.237
max_check_attempts5
}
defineservice{
usegeneric-service
host_namemytest237
service_descriptionHTTP
check_commandcheck_http
}
改变文件属组为nagios
chown nagios.nagios /usr/local/nagios/etc/mylinux.cfg
重新启动NAGIOS
/etc/init.d/nagiosrestart
到web页面查看效果
如果监控更多的服务如httpd ssh等等的话,只需要在配置文件中做相应的添加即可
Nagios报警邮件设置-1
以我的公司邮件账户为例
#vi /usr/local/nagios/etc/objects/contacts.cfg
修改这一段为实际收件人,只修改email对应的邮件地址即可,其他无需修改,红字加粗的部分
definecontact{
contact_name nagiosadmin ; Short name of user
use generic-contact ; Inherit default values fromgeneric-contact template (defined above)
alias Nagios Admin ; Full name of user
email zachaway@×××.com ; <<***** CHANGE THIS TO YOUR EMAILADDRESS ******
}
安装一个叫sendEmail的软件
说明:sendEmail是一个十分小巧的通过命令来发smtp邮件的程序
# wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz
#tar zxvf sendEmail-v1.56.tar.gz
#cp -a sendEmail-v1.56/sendEmail /usr/local/bin/
#chmod +x /usr/local/bin/sendEmail
sendEmail使用范例:
/usr/local/bin/sendEmail -f zachaway@163.com -t zachaway@×××.com -s smtp.163.com -u "nagios testemail" -xu ***@163.com -xp ****** -m happy
解释:
-f 表示发送者的邮箱
-t 表示接收者的邮箱
-s 表示SMTP服务器的域名或者ip
-u 表示邮件的主题
-xu表示SMTP验证的用户名
-xp表示SMTP验证的密码(注意,这个密码貌似有限制,例如我用d!5neyland就不能被正确识别)
-m 表示邮件的内容
如果你不带-m参数的话,就会提示你自行输入
当然我们也可以将一个文件的内容作为邮件的正文发出去的
那么就可以使用:
cat文件名 | /usr/local/bin/sendEmail-f zachaway@163.com -t zachaway@×××.com -s smtp.163.com -u "nagios testemail" -xuzachaway@163.com -xpzachaway123
修改commands.cfg中关于发邮件的命令的定义,使用sendEmail来发邮件
#vi /usr/local/nagios/etc/objects/commands.cfg
修改notify-host-by-email和notify-service-by-email这2个段的mail命令
红字加粗的部分
#'notify-host-by-email' command definition
definecommand{
command_name notify-host-by-email
command_line /usr/bin/printf "%b" "*****Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost:$HOSTNAME$\nState:
$HOSTSTATE$\nAddress:$HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" |/usr/local/bin/sendEmail-fzachaway@163.com -t $CONTACTEMAIL$ -s smtp.163.com -u "**$NOTIFICATIONTYPE$ Host A lert: $HOSTNAME$ is $HOSTSTATE$ **"-xu zachaway@163.com -xp zachaway163
}
#'notify-service-by-email' command definition
definecommand{
command_name notify-service-by-email
command_line /usr/bin/printf "%b" "*****Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService:$SERVICEDESC$\
$HOSTSTATE$\nAddress:$HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" |/usr/local/bin/sendEmail-fzachaway@163.com -t $CONTACTEMAIL$ -s smtp.163.com -u "**$NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$**" -xuzachaway@163.com -xpzachaway163
}
PS:注册了一个163,为专发nagios报警邮件的公用账户,信息为
zachaway@163.com
密码: zachaway163(此为杜撰,并不存在)