Nagios是常用的系统监控工具,提供了很多基本服务的监控脚本,如HTTP,MYSQL等,同时具有不错的可扩展性,自己可定制针对特定参数的监控脚本以及报警的方式。但Nagios的配置相当复杂,本文总结了我最近在Ubuntu Server上搭建Nagios的过程,以方便大家将来更加快速的安装搭建监控系统。
sudo apt-get install apache2 nagios3 nagios-nrpe-plugin
sudo apt-get install nagios3-doc
sudo apt-get install nagios-nrpe-server
不管是nagios server还是被监控机器,默认的监控脚本配置会安装在/etc/nagios-plugin/config下,监控脚本都在/usr/lib/nagios/plugins下。
define command{ command_name notify-service-by-email 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$" | /usr/bin/sendEmail -f <[email protected]> -t <[email protected]> -u "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" -s <SMTP_SERVER> -xu <EMAIL_USER_NAME> -xp <EMAIL_USER_PASSWORD> }
# this command runs a program $ARG1$ with arguments $ARG2$ define command { command_name check_nrpe command_line /usr/lib/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ -a $ARG2$ } # this command runs a program $ARG1$ with no arguments define command { command_name check_nrpe_1arg command_line /usr/lib/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ }
分别配置了带一个参数和带两个参数的nrpe命令,command name是check_nrpe_1arg的命令带一个参数,command name是check_nrpe的带两个参数。比如我配置的脚本想查看目标机上的load,command line就需配置成check_nrpe_1arg!check_load,该命令会调用nrpe server上的check_load命令。
/usr/lib/nagios/plugins/check_http --help
可输出check_http的使用说明。
define service { hostgroup_name http-servers
service_description HTTP check_command check_http use generic-service notification_interval 0 ; set > 0 if you want to be renotified }
比较合理的配置方法是,在service_nagios2.cfg里为每类server配置service,然后在hosts.cfg和hostgroup_nagios2.cfg,配置相应的server和该server的类别。这样,在server地址或server上的服务发生变化的情况下,只需要修改host.cfg和hostgroup_nagios2.cfg即可。
#server_address=127.0.0.1
默认是只有本机才能访问,多IP地址的情况下也不知道用的哪个IP,通常情况下会配成内网的地址;
allowed_hosts=127.0.0.1
容许访问nrpe的机器,多个主机用','分隔,注意不要留空格,“127.0.0.1, 192.168.1.12”是不工作的,必须是"127.0.0.1,192.168.1.12";
command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10 command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20 command[check_hda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/hda1
这样在nagios server上可通过/usr/lib/nagios/plugins/check_nrpe -H <被监控机器> -c check_load来调用被监控机上的check_load;又参见/etc/nagios-plugin/config/check_nrpe.cfg,需要配置的command line应为check_nrpe_1arg!check_load。我就是在这里写成了check_nrpe!check_load导致服务unknown的。
rm /var/cache/nagios3/*