http://www.cnblogs.com/mchina/archive/2013/02/20/2883404.html
Nagios
Nagios简介
是一个开源软件,可以监控网络服务、网络流量、Linux/Windows主机状态、主机资源,甚至可以监控打印机
它可以运行在Linux上或Windows上
基于浏览器的web界面方面运维人员查看监控项目的状态
支持web界面配置、管理操作
支持短信、邮件通知
可以自定义脚本实现自定义化监控
Nagios官网http://www.nagios.org/
配置Nagios
最重要的4点:
第一:要定义监控哪些主机、主机组(hosts.cfg),服务,服务组(services.cfg)
第二:要定义这个监控项需要通过什么命令实现(commands.cfg)
第三:要定义监控的时间段(timeperiods.cfg)
最后:要定义主机或服务出现问题时要通知的联系人或联系人组(contacts.cfg)
机器基本部署:
echo 'export LC_ALL=C' >>/etc/profile ##解决perl 编译问题:设置字符集;
source /etc/profile ##执行;
/etc/init.d/iptables stop ##关闭防火墙;
chkconfig iptables off ##设置开机不启动;
setenforce 0 临时关闭SElinux;
vi /etc/selinux/config ##编辑selinux的配置文件对selinux进行关闭;
SELINUX=disabled
nagios服务器开始安装:
yum -y install ntp ##下载时间同步服务;
/usr/sbin/ntpdate pool.ntp.org
echo '*/10 * * * * /usr/sbin/ntpdate pool.ntp.org >/dev/null 2>&1' >>/var/spool/cron/root //设置定时任务
基础支持套件:
yum -y install ssl openssl openssl-devel gcc glibc glibc-common gd gd-devel xinetd openssl-devel wget vim libxml2*
yum -y install httpd php*
service httpd start
创建Nagios系统用户和组:
useradd -s /sbin/nologin nagios
mkdir /usr/local/nagios
chown -R nagios.nagios /usr/local/nagios
编译安装Nagios
wget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-3.4.3.tar.gz
tar zxvf nagios-3.4.3.tar.gz -C /usr/local/src
cd nagios
./configure --prefix=/usr/local/nagios
make all
make install
make install-init
make install-commandmode
make install-config
make install-webconf
设置开机自启:
chkconfig --add nagios
chkconfig --level 35 nagios on
chkconfig --list nagios
启动:
service nagios start
启动时提示:Starting nagios:su: warning: cannot change directory to /home/nagios: No such file or directory
解决办法:mkdir -p /home/nagios
启动时提示:Starting nagios:This account is currently not available.
解决办法:
修改/etc/passwd
将/sbin/nologin改成/bin/bash
创建用户认证:
htpasswd -cm /usr/local/nagios/etc/htpasswd.users nagios //用户和密码分别设置为nagios和123456
测试:
http://10.10.10.20/nagios
如果提示not find就重启一下http和nagios
登录之后会有一行红色提示权限不够,需要我们编辑下面这个配置文件
vim /usr/local/nagios/etc/cgi.cfg //定义nagios管理员
:%s/nagiosadmin/nagios/g //末行命令,把默认的管理员nagiosadmin都换成上面创建的认证用户nagios(或者直接在创建用户认证的时候就写成htpasswd -cm /usr/local/nagios/etc/htpasswd.users nagiosadmin)
然后安装nagios-plugin插件
wget http://nagios-plugins.org/download/nagios-plugins-2.0.3.tar.gz
tar zxvf nagios-plugins-2.0.3.tar.gz -C /usr/local/src
cd nagios-plugins-2.0.3
./configure --prefix=/usr/local/nagios
make && make install
登录http://10.10.10.20/nagios监控页面时,其中一项HTTP服务呈黄色,提示:(HTTP WARNING: HTTP/1.1 403 Forbidden - 5159 bytes in 0.010 second response time)页面找不到,这个时候需要cd /var/www/html;echo aaa >index.html 重启service httpd restart 再测试一下elinks http://localhost --dump 会出现刚刚写入的aaa,再进入nagios监控页面刷新一下就由黄色变成绿色啦
再修改vim /etc/httpd/conf/httpd.conf //将原文件的
User apache 改为 User nagios
Group apaceh 改为 Group nagios
再重启:service httpd restart
监控一台虚拟主机 10.10.10.30:
vim /usr/local/nagios/etc/objects/localhost.cfg
#################### host 10.10.10.30
#lijunmin20161021
#lijunmin20161021
define host {
host_name test_30 #主机名
alias first #服务器名称
address 10.10.10.30 #服务器IP
check_period 24x7 #监控时间段
check_interval 1 #单位时间内的监控次数(分钟)
max_check_attempts 2 #对主机的最大检查次数
notification_options d,u,r #监控警报状态(主机d,u,r;服务w,c,u,r)
notification_period 24x7 #主机故障时,发送通知的时间范围
notification_interval 10 #在主机出现异常后,故障一直没有解决,再次对使用者发出通知的时间。单位是分钟
contact_groups admins #指定联系人组,这个“admins”在contacts.cfg文件中定义
check_command check-host-alive #指定检查主机状态的命令,其中“check-host-alive”在commands.cfg文件中定义(必须是一致的)
}
设置完成后重启nagios,再看http://10.10.10.20/nagios这样就监控了一个主机
下面再监控虚拟机10.10.10.30的一个http服务
被监控端需关闭防火墙,安装http并要创建一个文件,重启:
service iptables stop
yum -y install httpd*
touch /var/www/html/index.html
service httpd restart
vim /usr/local/nagios/etc/objects/localhost.cfg
define service {
host_name test_30
service_description apache
check_period 24x7
normal_check_interval 2
retry_check_interval 1
max_check_attempts 3
notification_period 24x7
notification_options w,c,u,r
check_command check_http
}
设置完成后重启nagios,再看http://10.10.10.20/nagios这样就监控了一个http服务
再监控虚拟机10.10.10.30机器上的mysql服务:
被监控虚拟机器10.10.10.30上需要安装mysql,
yum -y install mysql*
service mysqld start
再进入MySQL创建一个可以远程访问的用户
create user 'nagios'@10.10.10.20 identified by '123456';
flush privileges;
nagios服务器上测试连接mysql -h 10.10.10.30 -u nagios -p123456或直接mysql -h 10.10.10.30 -u nagios -p123456 -e "show databeses"
nagios服务器上需要写一个监控mysql的插件,默认没有
cd /usr/local/nagios/libexec
vim check_mysql.sh
#!/bin/bash
mysql_user=nagios
mysql_passwd=123456
mysql_host=10.10.10.30
if mysql -h $mysql_host -u $mysql_user -p$mysql_passwd -e "show databases" &>/dev/null
then
echo "mysql ok"
exit 0
else
echo "mysql error"
exit 2
fi
写完监控插件后chmod 777 check_mysql,并执行是否可行:bash check_mysql
然后去nagios服务器添加mysql命令,添加方法如下:
vim /usr/local/nagios/etc/objects/commands.cfg //最后面添加
define command{
command_name check_mysql
command_line $USER1$/check_mysql
}
然后再去vim /usr/local/nagios/etc/objects/localhost.cfg //添加如下
define service {
host_name test_30
service_description mysql
check_period 24x7
normal_check_interval 2
retry_check_interval 1
max_check_attempts 3
notification_period 24x7
notification_options w,c,u,r
check_command check_mysql
}
设置完成后重启nagios,再看http://10.10.10.20/nagios这样就监控了一个MySQL服务
如果出现(Return code of 127 is out of bounds - plugin may be missing)
执行 tail -100 /usr/local/nagios/var/nagios.log 可以根据看到的错误去检查
再监控自己机器上的内存服务:
同样在nagios服务器上需要写一个监控内容的插件:
cd /usr/local/nagios/libexec
vim check_memory
#!/bin/bash
#取/proc/meminfo中第一行第一列的值和第二行第二列的值,第一行的值减第二行的值乘100除第一行的值,算出内存使用率
MEM_USE=`awk 'NR==1{T=$2}NR==2{F=$2;print (T-F)*100/T}' /proc/meminfo |awk -F. '{print $1}'`
if [ -z $MEM_USE ];then
echo "UNKNOW MEMORY"
exit 3
elif [ $MEM_USE -ge 95 ];then
echo "MEMORY BUSY: free memory is `expr 100 - $MEM_USE`%"
exit 2
elif [ $MEM_USE -ge 80 ];then
echo "MEMORY WARNING: free memory is `expr 100 - $MEM_USE`%"
exit 1
else
echo "MEMORY OK: free memrory is `expr 100 - $MEM_USE`%"
eixt 0
fi
如果内存满了可以用如下命令清除内存:
echo 3 >/proc/sys/vm/drop_caches
写完监控插件后chmod 777 check_memory,并执行是否可行:bash check_memory
然后去nagios服务器添加mysql命令,添加方法如下:
vim /usr/local/nagios/etc/objects/commands.cfg //最后面添加
define command{
command_name check_memory
command_line $USER1$/check_memory -I $HOSTADDRE$ //如果检测其他主机则要在-$USER1$/check_memory后面加上 -I $HOSTADDRE$
}
然后再去vim /usr/local/nagios/etc/objects/localhost.cfg //添加如下
define service {
host_name localhost
service_description memory
check_period 24x7
normal_check_interval 2
retry_check_interval 1
max_check_attempts 3
notification_period 24x7
notification_options w,c,u,r
check_command check_memory
}
设置完成后重启nagios,再看http://10.10.10.20/nagios这样就监控了一个本机的memory服务
再监控虚拟机10.10.10.30机器上的内存服务:
被监控机器需安装 yum -y install ssl openssl openssl-devel gcc glibc glibc-common gd gd-devel xinetd openssl-devel libxml2*
要监控其他机器的内存被监控机器就需要一个间谍软件nrpe
装完nrpe会生成一个临时服务,而Linux上所有的临时服务都有xinetd管理,所以在安装之前用rpm -aq |grep xinetd检查系统是否有xinetd这个包yum -y install xinetd;
安装nrpe
useradd -r nagios //客户端也需要建立一个系统用户,
wget http://nchc.dl.sourceforge.net/project/nagios/nrpe-2.x/nrpe-2.14/nrpe-2.14.tar.gz
tar zxvf nrpe-2.12.tar.gz
cd nrpe-2.14
./configure --prefix=/usr/local/nagios
make all
make install-daemon //安装一个守护进程,生成一个用于启动服务的可执行文件
make install-daemon-config //生成一个临时服务的配置文件
make install-xinetd //关联xinetd
vim /etc/xinetd.d/nrpe //增加监控端的IP
only_from = 127.0.0.1 10.10.10.20
启动nrpe
service xinetd restart
启动之后在下面文件里发现定义的监控插件都在/usr/local/nagios/libexec下,而被监控端并没有这个文件,所以需要去服务端把libexec这个文件传到客户端,用户如下命令:
scp -r /usr/local/nagios/libexec [email protected]:/usr/local/nagios/
然后可客户端配置nrpe.cfg文件如下:
vim /usr/local/nagios/etc/nrpe.cfg //修改allow_hosts如下,并找到如下类似五行再加入一行监控memory
allowed_hosts=127.0.0.1,10.10.10.20
command[check_memory]=/usr/local/nagios/libexec/check_memory
配置完成后重启nrpe:
/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d
默认nagios不能连接nrpe,所以需要在nagios服务器上也安装一个nrpe,nagios用一条命令去调用nrpe
wget http://nchc.dl.sourceforge.net/project/nagios/nrpe-2.x/nrpe-2.14/nrpe-2.14.tar.gz
tar zxvf nrpe-2.12.tar.gz
cd nrpe-2.14
./configure --prefix=/usr/local/nagios
make all
make install-plugin
安装完成后nagios服务端执行调用nrpe的命令测试一下:
cd /usr/local/nagios/libexec
./check_nrpe -H 10.10.10.30 -c check_memory
确认是这样MEMORY OK: free memrory is 26%再进行下一步
如果提示:CHECK_NRPE: Error - Could not complete SSL handshake.
解决方法:
检查客户端vim /usr/local/nagios/etc/nrep.cfg文件,看看是否
allowed_hosts=127.0.0.1,10.10.10.20
检查客户端vim /etc/xinetd.d/nrpe文件,看看是否
only_from = 127.0.0.1 10.10.10.20
并重启service xinetd restart
再检查进程,杀掉再重启
ps -fe |grep nrpe
kill -9 49967
/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d
接着nagios服务端就可以定义一个命令
vim /usr/local/nagios/etc/objects/commands.cfg
define command{
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}
再接着nagios服务端定义一下主机
vim /usr/local/nagios/etc/objects/localhost.cfg
define service {
host_name test_30
service_description memory
check_period 24x7
normal_check_interval 2
retry_check_interval 1
max_check_attempts 3
notification_period 24x7
notification_options w,c,u,r
check_command check_nrpe!check_memory //-c 后面带的$ARG1$ 参数是传给nrpe daemon 执行的检测命令,之前说过了它必须是nrpe.cfg 中所定义的那5条命令中的其中一条。在services.cfg 中使用check_nrpe 的时候要用 “!” 带上这个参数。
}
设置完成后重启nagios,再看http://10.10.10.20/nagios这样就监控了一个虚拟机10.10.10.30的memory服务
最后监控一台真实服务器121.46.4.72 的http服务(如下操作有和监控虚拟机10.10.10.30的memory服务的操作有大量相似的地方如果之前有同样的操作这里可省略)
被监控机器同样需要安装nrpe
yum -y install ssl openssl openssl-devel
装完nrpe会生成一个临时服务,而Linux上所有的临时服务都有xinetd管理,所以在安装之前用rpm -aq |grep xinetd检查系统是否有xinetd这个包yum -y install xinetd;
安装nrpe
useradd -r nagios //客户端也需要建立一个系统用户,
wget http://nchc.dl.sourceforge.net/project/nagios/nrpe-2.x/nrpe-2.14/nrpe-2.14.tar.gz
tar zxvf nrpe-2.12.tar.gz
cd nrpe-2.14
./configure --prefix=/usr/local/nagios
make all
make install-daemon //安装一个守护进程,生成一个用于启动服务的可执行文件
make install-daemon-config //生成一个临时服务的配置文件
make install-xinetd //关联xinetd
vim /etc/xinetd.d/nrpe //增加监控端的IP
only_from = 127.0.0.1 10.10.10.20
启动nrpe
service xinetd restart
启动之后在下面文件里发现定义的监控插件都在/usr/local/nagios/libexec下,而被监控端并没有这个文件,所以需要去服务端把libexec这个文件传到客户端,用户如下命令:
scp -P 59878 -r /usr/local/nagios/libexec [email protected]:/usr/local/nagios/
然后可客户端配置nrpe.cfg文件如下:
vim /usr/local/nagios/etc/nrpe.cfg //修改allow_hosts如下,并找到如下类似五行再加入一行监控http(如果有的监控项在此文件中默认存在就不需再加)
allowed_hosts=127.0.0.1,10.10.10.20
command[check_http]=/usr/local/nagios/libexec/check_http
配置完成后重启nrpe:
/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d
默认nagios不能连接nrpe,所以需要在nagios服务器上也安装一个nrpe,nagios用一条命令去调用nrpe
wget http://nchc.dl.sourceforge.net/project/nagios/nrpe-2.x/nrpe-2.14/nrpe-2.14.tar.gz
tar zxvf nrpe-2.12.tar.gz
cd nrpe-2.14
./configure --prefix=/usr/local/nagios
make all
make install-plugin
接着nagios服务端就可以定义一个命令
vim /usr/local/nagios/etc/objects/commands.cfg
define command{
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ //-c 后面带的$ARG1$ 参数是传给nrpe daemon 执行的检测命令,之前说过了它必须是nrpe.cfg 中所定义的那5条命令中的其中一条。在services.cfg 中使用check_nrpe 的时候要用 “!” 带上这个参数。
}
再接着nagios服务端定义一下主机
vim /usr/local/nagios/etc/objects/localhost.cfg
define service {
host_name 121.46.4.72
service_description memory
check_period 24x7
normal_check_interval 2
retry_check_interval 1
max_check_attempts 3
notification_period 24x7
notification_options w,c,u,r
check_command check_http
}
设置完成后重新加载nagios,再看http://10.10.10.20/nagios这样就监控了一台真是服务器的http服务
报警
停止系统自带的sendmail服务
/etc/init.d/postfix stop
nagios服务器安装sendmail
yum install -y sendmail*
然后重新启动sendmail服务:
service sendmail restart
然后发送测试邮件,验证sendmail的可用性:
echo "Hello World" | mail [email protected]
如果提示-bash: mail: command not found
显然mailx没有安装:
yum -y install mailx
然后whois命令也没有
yum -y install jwhois
测试邮件发送成功之后开始配置commands.cfg文件
vim /usr/local/nagios/etc/objects/commands.cfg //把原有的模板复制一份并把notify-host-by-email改成一个自己的标记notify-host-by-mes
# 'notify-host-by-email' command definition
define command{
command_name notify-host-by-mes
command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /bin/mail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$
}
# 'notify-service-by-email' command definition
define command{
command_name notify-service-by-mes
command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n" | /bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
}
再配置localhosts.cfg文件 //这里只修改contact_groups bennyunwei这一行需要和下面contacts.cfg文件中的组名一致
#################### host 10.10.10.30
#lijunmin20161021
define host {
host_name test_30
alias first
address 10.10.10.30
check_period 24x7
check_interval 1
max_check_attempts 2
notification_options d,u,r
notification_period 24x7
notification_interval 10
contact_groups bennyunwei
check_command check-host-alive
}
配置contacts.cfg文件
vim /usr/local/nagios/etc/objects/contacts.cfg
define contact {
contact_name benn
host_notification_period 24x7
host_notification_options d,u,r
host_notification_commands notify-host-by-mes
service_notification_period 24x7
service_notification_options w,c,u,r
service_notification_commands notify-service-by-mes
email [email protected]
}
define contactgroup {
contactgroup_name bennyunwei
members benn
}
检测nagios配置文件是否正确
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
或service nagios configtest
配置文件正确之后重新加载service nagios reload,并故意停掉某一项服务或关闭某一台机器看看是否能报警。
如果收不到邮件就看看下面两个日志文件:
cat /var/log/maillog
cat /usr/local/nagios/var/nagios.log
关闭Linux服务器的ICMP协议。用根用户登录系统,然后输入命令“echo "1" >/proc/sys/net/ipv4/icmp_echo_ignore_all”编辑配置文件。这里小编要说明的是当前用户必须是root也就是根用户
再次在本地利用ping命令进行测试,发现本机计算机无法再ping通Linux服务器了。
接下来打开Linux服务器ICMP协议。同样在根用户下输入命令“echo "0" >/proc/sys/net/ipv4/icmp_echo_ignore_all”
真实Windows服务器101.198.134.91监控
http://blog.rekfan.com/articles/401.html
利用NSClient++监控远程Windows上的“本地信息”
在Nagios的libexec下有check_nt这个插件,它就是用来检查windows机器的服务的。其功能类似于check_nrpe。不过还需要搭配另外一个软件NSCP 3.0版本以前是NSClient++,它则类似于NRPE。
nscp是windows下nagios监控client的一个合集。其包含check plugins 、check_nt、check_nrpe 、nsca client 、wmi checks 。一般需要的监测项基本都包含在内了 。
一、Windows安装
下载地址: http://nsclient.org/nscp/downloads ,直接下载下来的是msi包,注意系统版本(32位 64位) 。同windows下其他软件的安装一样,直接下一步下一步就好了。
需要配置的一步
Allowed hosts(此处填写 Nagios 监控服务器的ip)
NsClient password
密码可以为空,如果该处设置了密码,监控端就需要加上-s参数加密码认证
勾选前面四项
二、被控端配置相关
默认安装完之后,就可以使用 。如果不能正常使用可以以下几方法检测 。
1、首先用server端的check_nrpe和check_nt插件对被控端的机器进行检测,看是否正常
cmd
[root@Nagios-Server /]# ./check_nt -H 101.198.134.91 -p 12489 -v UPTIME
System Uptime - 23 day(s) 9 hour(s) 57 minute(s)
[root@Nagios-Server /]# ./check_nrpe -H 101.198.134.91
I (0,4,0,172 2014-02-28) seem to be doing fine...
如果能正常输出,表示正常 。需要注意的是check_nt默认检测的端口是 1248 ,而nscp 默认提供的check_nt端口是12489 。
2、如果上面的输出不正常。先在监控端使用下面的命令检测端口监听是否正常 。即确认是否启动 。
netstat -an |find "5666"
netstat -an |find "12489"
如果正常监听,再查看防火墙是否允许通过 防火墙 –> 例外 –> 添加端口 5666/TCP 12489/TCP 。
3、如果端口都未发现监听,就需要手动启下服务 。
cmd -> services.msc –> NSClient++ 属性–> 登录 —> 允许服务与桌面交互 –> 确定
三、nagios server端配置
vim /usr/local/nagios/etc/nagios.cfg
cfg_file=/usr/local/nagios/etc/objects/windows.cfg //去掉这一行的注释
关于nrpe 、nsca块不用新增,一般在检测其他机器时 ,都会事先配置过的 。这里只讲下check_nt ,配置如下:
vim /usr/local/nagios/etc/objects/commands.cfg
define command{
command_name check_nt
command_line $USER1$/check_nt -H $HOSTADDRESS$ -p 12489 -v $ARG1$ $ARG2$
}
如果设置了密码,其中command_line的行,需要换成下面的:
command_line $USER1$/check_nt -H $HOSTADDRESS$ -p 12489 -s 888888 -v $ARG1$ $ARG2$
对主机监测的Windows.cfg配置文件增加下面的内容:(可以在源文件修改)
define host{
use windows-server
host_name nagios-server
alias My Windows Server
address 101.198.134.91
contact_groups admins
notifications_enabled 1
}
define hostgroup{
hostgroup_name windows-servers
alias winserver
members nagios-server
register 1
}
检测nagios配置文件是否正确
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
或service nagios configtest
设置完成后重启nagios,再看http://10.10.10.20/nagios这样就监控了一台真实Windows服务器