linux nagios监控

版权声明:QQ:1009002494 https://blog.csdn.net/Doudou_Mylove/article/details/83181640

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服务器

猜你喜欢

转载自blog.csdn.net/Doudou_Mylove/article/details/83181640