近期在做一个Nagios,果然如其名--“难过死”,不过做出来之后,还是蛮爽的,然后感觉不尽兴,就写了两个脚本实现起功能。

  系统环境:centos5.7 x86_64 

  硬件环境:XenServer

  内存3G,一颗双核CPU

    Nagios是一款开源的免费网络监视工具,能有效监控Windows、Linux和Unix的主机状态,交换机路由器等网络设置,打印机等。在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知。

Nagios具有的功能:

  1. 监控网络服务(SMTP、POP3、HTTP、NNTP、PING等);
  2. 监控主机资源(处理器负荷、磁盘利用率等);
  3. 简单地插件设计使得用户可以方便地扩展自己服务的检测方法;
  4. 并行服务检查机制;
  5. 具备定义网络分层结构的能力,用"parent"主机定义来表达网络主机间的关系,这种关系可被用来发现和明晰主机宕机或不可达状态;
  6. 当服务或主机问题产生与解决时将告警发送给联系人(通过EMail、短信、用户定义方式);
  7. 可以定义一些处理程序,使之能够在服务或者主机发生故障时起到预防作用;
  8. 自动的日志滚动功能;
  9. 可以支持并实现对主机的冗余监控;
  10. 可选的WEB界面用于查看当前的网络状态、通知和故障历史、日志文件等;

首先要了解nagios的工作原理,他是通过插件管理的,这些插件均可以自己编写:

 

Nagios+pnp两键轻松搞定_Nagios监控脚本

接下来就是简单的脚本实现Nagios+pnp绘图过程,首先是服务端脚本:

  1. #!/bin/bash 
  2. #:Title:Nagios server install 
  3. #:Synopsis: 
  4. #:Data:2012-07-18 13:36:32 
  5. #:Version:1.1 
  6. #:Author:LuoWei <luoweiro@126.com> 
  7. #:Options: 
  8. #This is an install Nagios's script 
  9.  
  10. Nagios_user=nagios 
  11. Nagios_password=baison 
  12. Pack_path=`pwd` 
  13. Mail=282127408@qq.com 
  14.  
  15. yum -y install httpd gettext mysql mysql-server mysql-devel php53 php53-mysql php-pear  
  16. yum install   perl  perl-DBI perl-DBD-MySQL gcc glibc glibc-common gd gd-devel openssl-devel -y 
  17.  
  18. useradd $Nagios_user && echo $Nagios_password |passwd --stdin $Nagios_user 
  19. usermod -s /sbin/nologin $Nagios_password 
  20. groupadd nagcmd 
  21. usermod -G nagcmd $Nagios_password 
  22. usermod -G nagcmd apache 
  23.  
  24. #install nagios 
  25. cd $Pack_path 
  26.   tar xf nagios-cn-3.2.3.tar.bz2  
  27.   cd  nagios-cn-3.2.3 
  28.   ./configure --prefix=/usr/local/nagios --with-nagios-user=nagios --with-nagios-group=nagios --with-command-group=nagcmd 
  29.   make all  
  30.   make install  
  31.   make install-init 
  32.   make install-commandmode 
  33.   make install-config 
  34.   make install-webconf 
  35.   make install-commandmode 
  36.    
  37. #install nagios-plugins   
  38. cd $Pack_path 
  39.   tar xf nagios-plugins-1.4.15.tar.gz  
  40.   cd nagios-plugins-1.4.15 
  41.   sed -i 's/email.*/email  '$Mail'/'  /usr/local/nagios/etc/objects/contacts.cfg 
  42.   ./configure --with-nagios-user=nagios --with-nagios-group=nagios 
  43.   make && make install 
  44.  
  45. #install nagios-snmp-plugins 
  46. #cd $Pack_path 
  47. #tar xf nagios-snmp-plugins.1.1.1.tgz  
  48. #cd nagios_plugins/ 
  49. ln -sv /usr/local/nagios/bin/nagios /usr/local/bin/ 
  50. sed -i "/^#ServerName/i\ServerName 127.0.0.1:80" /etc/httpd/conf/httpd.conf  
  51.  
  52. chkconfig --add nagios  
  53. chkconfig nagios on  
  54. chkconfig httpd on  
  55. chkconfig mysqld on  
  56. service nagios start 
  57. service httpd start 
  58. service mysqld start 
  59.  
  60. cp /usr/local/nagios/etc/nagios.cfg{,.bak} 
  61. #nrpe install 
  62. cd $Pack_path 
  63.   tar xf nrpe-2.12.tar.gz  
  64.   cd nrpe-2.12 
  65.   ./configure 
  66.   make && make install  
  67.   chown -R nagios:nagios /usr/local/nagios 
  68.  
  69. #install pnp 
  70. cd $Pack_path 
  71.   tar xf rrdtool-1.4.5.tar.gz  
  72.   cd rrdtool-1.4.5 
  73.   yum install -y pango pango-devel freetype freetype-devel libpng libpng-devel gettext gettext-devel libjpeg libjpeg-devel gd gd-devel libxml2 libxml2-devel libiconv libiconv-devel  qpixman qpixman-devel glib glib-devel cairo cairo-devel libart*  php53-gd 
  74.   ./configure --prefix=/usr/local/rrdtool 
  75.   make && make install  
  76.  
  77. cd $Pack_path  
  78.   tar xf pnp4nagios-0.6.6.tar.gz   
  79.   cd pnp4nagios-0.6.6 
  80.   ./configure --prefix=/usr/local/pnp4nagios --with-rrdtool=/usr/local/rrdtool/bin/rrdtool --with-nagios-user=nagios --with-nagios-group=nagcmd 
  81.   make all  
  82.   make install  
  83.   make install-webconf 
  84.   make install-config 
  85.   make install-init 
  86.   make fullinstall 
  87.   cd /usr/local/pnp4nagios/etc/ 
  88.   mv misccommands.cfg-sample misccommands.cfg 
  89.   mv nagios.cfg-sample nagios.cfg 
  90.   mv rra.cfg-sample rra.cfg 
  91.   cd pages/ 
  92.   mv web_traffic.cfg-sample web_traffic.cfg 
  93.   cd ../check_commands/ 
  94.   mv check_all_local_disks.cfg-sample check_all_local_disks.cfg 
  95.   mv check_nrpe.cfg-sample check_nrpe.cfg 
  96.   mv check_nwstat.cfg-sample check_nwstat.cfg 
  97.   cp /usr/local/nagios/etc/nagios.cfg{,.bak} 
  98.   sed -i 's@#host_perfdata_command=process-host-perfdata@host_perfdata_command=process-host-perfdata@' /usr/local/nagios/etc/nagios.cfg  
  99.   sed -i '/cfg_file=.*localhost.cfg/d' /usr/local/nagios/etc/nagios.cfg 
  100.   cp /usr/local/pnp4nagios/libexec/process_perfdata.pl /usr/local/nagios/libexec/ 
  101.   cp /usr/local/src/pnp4nagios-0.6.6/contrib/ssi/status-header.ssi /usr/local/nagios/share/ssi/ 
  102.   cp /usr/local/nagios/etc/objects/commands.cfg{,.bak} 
  103.   sed -i '227,247d' /usr/local/nagios/etc/objects/commands.cfg 
  104.   cat >>/usr/local/nagios/etc/objects/commands.cfg <<EOF 
  105. define command {  
  106.     command_name process-host-perfdata  
  107.     command_line /usr/bin/perl /usr/local/pnp4nagios/libexec/process_perfdata.pl -d HOSTPERFDATA  
  108. }  
  109. define command {  
  110.     command_name process-service-perfdata  
  111.     command_line /usr/bin/perl /usr/local/pnp4nagios/libexec/process_perfdata.pl  
  112. }  
  113. EOF 
  114.  
  115.   cp /usr/local/nagios/etc/objects/templates.cfg{,.bak} 
  116.   cat >>/usr/local/nagios/etc/objects/templates.cfg <<EOF 
  117. define host {  
  118.     name host-pnp  
  119.     register 0  
  120.     action_url /pnp4nagios/index.php?host=\$HOSTNAME\$  
  121. }  
  122. define service {  
  123.     name srv-pnp  
  124.     register 0  
  125.     action_url /pnp4nagios/index.php?host=\$HOSTNAME\$&srv=\$SERVICEDESC\$  
  126. EOF 
  127.  
  128. mv /usr/local/pnp4nagios/share/install.php /usr/local/pnp4nagios/share/install.php.bak  
  129. sed -i  's/use_authentication=1/use_authentication=0/' /usr/local/nagios/etc/cgi.cfg 
  130. mkdir -pv /usr/local/nagios/etc/{hosts,services} 
  131. sed -i "/#cfg_dir.*servers/i\cfg_dir=/usr/local/nagios/etc/hosts" /usr/local/nagios/etc/nagios.cfg 
  132. sed -i "/#cfg_dir.*servers/i\cfg_dir=/usr/local/nagios/etc/services" /usr/local/nagios/etc/nagios.cfg 
  133.  
  134. #config the commands.cfg to supports check_nrpe command 
  135. cat >>/usr/local/nagios/etc/objects/commands.cfg <<EOF 
  136. define command{  
  137.         command_name check_nrpe  
  138.         command_line \$USER1\$/check_nrpe -H \$HOSTADDRESS\$ -c \$ARG1\$  
  139.         } 
  140. EOF 
  141.  
  142. cat >/usr/local/nagios/etc/objects/contacts.cfg <<EOF 
  143. define contact{ 
  144.     contact_name                    nagiosadmin      
  145.     use             generic-contact      
  146.     alias                           Nagios Admin         
  147.     service_notification_period 24x7 
  148.     host_notification_period    24x7 
  149.     service_notification_options    w,u,c,r 
  150.     host_notification_options   d,u,r 
  151.     service_notification_commands   notify-service-by-email,notify-service-by-sms 
  152.     host_notification_commands  notify-host-by-email,notify-host-by-sms 
  153.         email                    $Mail 
  154.         pager                   13524942642 
  155.         } 
  156. define contactgroup{ 
  157.         contactgroup_name       admins 
  158.         alias                   Nagios Administrators 
  159.         members                 nagiosadmin 
  160.         } 
  161. EOF 
  162.  
  163. #install fetion  
  164. cd $Pack_path 
  165. cd fetion/lib64/ 
  166. chmod +x *  
  167. cp *.so *.so.4 /usr/lib/ 
  168. cp fetion /usr/local/bin/ 
  169.  
  170. cd $Pack_path 
  171. tar xf check_mysql_health-2.1.tar.gz  
  172.   cd check_mysql_health-2.1 
  173.   ./configure  
  174.   make  
  175.   make install 
  176. yum install perl-DBD* -y 
  177.  
  178. cat >>/usr/local/nagios/etc/objects/commands.cfg <<EOF 
  179. define command{ 
  180.         command_name    check_mysql_health 
  181.         command_line    \$USER1\$/check_mysql_health --hostname \$ARG1\$ --port \$ARG2\$ --username \$ARG3\$ --password \$ARG4\$ --mode \$ARG5\$ --warning \$ARG6\$ --critical \$ARG7\$ 
  182.         } 
  183. EOF 
  184. htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin  
  185.  
  • 脚本内容很简单,就是简单的命令堆积,然后修改一些配置文件。脚本使用说明:需自行下载所需软件包,放到和脚本同一目录下即可。赋予执行权限直接执行。

 

接下来是客户端脚本:

  1. #!/bin/bash 
  2. #:Title:Nagios client install 
  3. #:Synopsis: 
  4. #:Data:2012-07-18 15:36:32 
  5. #:Version:1.1 
  6. #:Author:LuoWei <luoweiro@126.com> 
  7. #:Options: 
  8. #This is an install Nagios client's scripts 
  9. Pack_path=`pwd` 
  10. ip=192.168.158.219  此处是nagi
  11. yum install openssl-devel gcc -y 
  12. useradd nagios -s /sbin/nologin  
  13.  
  14.  
  15. cd $Pack_path 
  16. tar xf nagios-plugins-1.4.15.tar.gz  
  17. cd nagios-plugins-1.4.15 
  18. ./configure && make && make install 
  19. cd $Pack_path 
  20. tar xf nrpe-2.12.tar.gz  
  21. cd nrpe-2.12 
  22. ./configure  
  23. make && make install 
  24. mkdir /usr/local/nagios/etc 
  25. cp init-script /etc/init.d/nrpe 
  26. chmod +x /etc/init.d/nrpe  
  27. sed -i 's@\(allowed_hosts=127.0.0.1\)@\1,'$ip'@' /usr/local/nagios/etc/nrpe.cfg 
  28. mkdir -pv /usr/local/nagios/bin 
  29. cp src/nrpe /usr/local/nagios/bin/ 
  30. chkconfig nrpe on  
  31. cp /usr/local/src/nrpe-2.12/src/check_nrpe /usr/local/nagios/libexec/ 
  32. chown -R nagios:nagios /usr/local/nagios 
  33. #############monitor  mysql 
  34. mysql -e "grant all on *.* to  nagios@'%' identified by 'nagios';" 
  35. mysql -e "flush privileges;" 
  36. echo  "command[check_mysql_slave]=/usr/local/nrpe/libexec/check_mysql_slave" >> /usr/local/nagios/etc/nrpe.cfg  
  37. /etc/init.d/nrpe restart  
  • 脚本很简单,不需要做太多的详细介绍

希望在各位部署Nagios的时候不会在难过死了,当然在批量添加和删除监控主机也可以写个脚本,本文就不多加介绍了。

提示:

1.可以把监控的服务器的ip地址,服务类型写在一个文件中批量添加。

2.可以定义一个方法,然后类似ipvsadm那样进行添加和删除,此处不做详细介绍,可以根据自己的配置文件进行修改。

当然大家可以把后面的完成,共同探讨一下!希望对你有所帮助!