人生最大的错误是不断担心会犯错 [登录·注册]

吕滔博客

首页 开发 运维 工具 摄影

第二十二章 使用Nagios搭建监控服务器

linux入门教程 memory 发布于August 13, 2014 标签: none


【关于Nagios】


Nagios是一款用于监控系统和网络的开源应用软件,它的模式是服务器—客户端,也就是说首先要在在一台服务器上(server)部署相应的主要套件,然后在要监控的服务器上部署客户端程序,这样server会和client通信,从而监控client端的各项资源。Nagios功能十分强大几乎所有的项目都可以监控,大到服务器的存活状态,小到服务器上的某一个服务(web)。这些功能都是通过自定义插件(或者叫做脚本)来实现。


当Nagios监控到某项资源发生异常会通知到用户,你可以接入手机短信接口也可以接入邮件接口。我们可以通过web页面来查看Nagios所监控的各项资源,默认搭建的Nagios服务器只能监控简单的几个项目,而其他服务之类的监控项目都是由我们自己开发的插件来实现的。


 


【需要下载的软件】


nagios-3.0.5  


nagios-plugins-1.4.13  


nrpe-2.12.tar.gz


apache-2.2.11   


// 以上软件版本可以不一样


 


【监控中心Server端的配置】


1. 安装apache (略,请参考第16章中相关内容,只需安装,到后边再配置)


 


2. 建立nagios账户


useradd  nagios


 


3. 下载软件


cd  /usr/local/src/


wget  http://syslab.comsenz.com/downloads/linux/nagios-3.0.5.tar.gz


wget  http://syslab.comsenz.com/downloads/linux/nagios-plugins-1.4.13.tar.gz


wget  http://syslab.comsenz.com/downloads/linux/nrpe-2.12.tar.gz


 


4. 编译安装nagios


cd  /usr/local/src/


tar  zxvf  nagios-3.0.5.tar.gz


cd  nagios-3.0.5


./configure  --prefix=/usr/local/nagios


make all


make install


make install-init   10.5pt;font-family:宋体;mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri">把nagios做成一个运行脚本,使nagios随系统开机启动


make install-config  10.5pt;font-family:宋体;mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri">把配置文件样例复制到nagios的安装目录


make install-commandmode
mso-hansi-font-family:Calibri">给外部命令访问nagios配置文件的权限


chown -R nagios:nagios /usr/local/nagios


 


5. 编译安装nagios-plugins


cd  /usr/local/src/


tar zxvf nagios-plugins-1.4.13.tar.gz


cd  nagios-plugins-1.4.13


./configure  --prefix=/usr/local/nagios
--with-nagios-user=nagios --with-nagios-group=nagios


make && make install


查看是否安装成功的方法是:


ls /usr/local/nagios/libexec/


看这个目录下是否有插件文件


 


6. 安装nrpe


cd /usr/local/src/


tar zxvf  nrpe-2.12.tar.gz


cd nrpe-2.12


./configure --enable-ssl --enable-command-args


make all


make install-plugin


make install-daemon


make install-daemon-config


 


7. 配置web接口


vim  /usr/local/apache2/conf/httpd.conf


在最后加入以下内容:


ScriptAlias
/nagios/cgi-bin /usr/local/nagios/sbin


<Directory
"/usr/local/nagios/sbin/">


     AllowOverride
AuthConfig


     Options ExecCGI


     Order allow,deny


     Allow from all


</Directory>


  Alias /nagios/ /usr/local/nagios/share/


<Directory
"/usr/local/nagios/share">


     Options None


     AllowOverride
AuthConfig


     Order allow,deny


     Allow from all


</Directory>


 


8. 配置nagios


cd  /usr/local/nagios/etc/


vim cgi.cfg


把 use_authentication=1  改成  use_authentication=0  意思是不用用户验证


 


9. 启动nagios


在启动前先检测一下:


/usr/local/nagios/bin/nagios -v
/usr/local/nagios/etc/nagios.cfg


如果最后显示如下,则说明配置没有问题了。


Total Warnings:
0


Total
Errors:   0


启动命令:


/etc/init.d/nagios start


或者:


/usr/local/nagios/bin/nagios -d
/usr/local/nagios/etc/nagios.cfg


 


此时,就可以访问web页面的nagios了,在浏览器中输入:


http://IP/nagios/ 看看吧。


 


【在要监控的机器上client部署nagios】


如果你打开了web页面,点击左栏的Host Detail 会在右栏看到一行数据,其中Host 名为 “localhost” ,Status显示为”up”,并且显示为绿色,如果是其他颜色就说明你的localhost出了问题。目前只有一行数据,也就是说只监控了监控中心(localhost)一台主机,那么如何添加其他机器被它监控呢?这就需要在要被监控的机器上也部署nagios软件。


1. 添加账户


useradd nagios


 


2. 安装nrpe


cd /usr/local/src/


wget  http://syslab.comsenz.com/downloads/linux/nrpe-2.12.tar.gz


tar zxvf  nrpe-2.12.tar.gz


cd nrpe-2.12


./configure --enable-ssl
--enable-command-args


make all


make install-plugin


make install-daemon


make install-daemon-config


 


3. 安装nagios-plugin


cd  /usr/local/src/


wget http://syslab.comsenz.com/downloads/linux/nagios-plugins-1.4.13.tar.gz


tar zxvf nagios-plugins-1.4.13.tar.gz


cd  nagios-plugins-1.4.13


./configure  --prefix=/usr/local/nagios
--with-nagios-user=nagios --with-nagios-group=nagios


make && make install


到此就算安装完成了,请查看/usr/local/nagios/目录下是否有四个目录分别为:bin  etc  libexec  share 另外在libexec目录下会有很多check_开头的文件。如果你的机器上没有,就请重新安装吧。


 


4. 配置


vim /usr/local/nagios/etc/nrpe.cfg


找到”allowed_hosts=127.0.0.1” 改成 “allowed_hosts=127.0.0.1,10.0.4.67”


// 后边的IP是server的IP


找到” dont_blame_nrpe=0” 改成 “dont_blame_nrpe=1”


 


5. 启动nrpe


/usr/local/nagios/bin/nrpe -c
/usr/local/nagios/etc/nrpe.cfg -d


 


【在监控中心添加被监控主机】


添加主机当然是要到server端(监控中心)修改配置文件了。


1. 修改主配置文件


cd  /usr/local/nagios/etc/


vim nagios.cfg


增加内容:


cfg_dir=/usr/local/nagios/etc/services   10.5pt;font-family:宋体;mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri">定义一个目录,以后把新增加的主机信息文件全部放到这里


 


2. 添加被监控主机信息


mkdir /usr/local/nagios/etc/services


cd  /usr/local/nagios/etc/services


vim  10.0.4.56.cfg  加入如下内容:


define
host{


        use     linux-server


        host_name       10.0.4.56


        alias           10.0.4.56


        address         10.0.4.56


}


define
service{


        use     generic-service


        host_name       10.0.4.56


        service_description     check_ping


        check_command           check_ping!100.0,20%!200.0,50%


        max_check_attempts 5


        normal_check_interval 1


}


define
service{


        use     generic-service


        host_name       10.0.4.56


        service_description     check_ssh


        check_command           check_ssh


        max_check_attempts 5


        normal_check_interval 1


}


define
service{


        use     generic-service


        host_name       10.0.4.56


        service_description     check_http


        check_command           check_http


        max_check_attempts 5


        normal_check_interval 1


}


// 注意,这里的IP是client端的IP,监控的项目有三个ping, ssh, http。其实这三个项目使用的脚本都为本地脚本,也就是说,即使远程主机没有安装nagios和nrpe同样可以监控这些项目。但是如果想监控load,disk,等等就需要通过nrpe服务来搞定了,道理很简单,load和disk都需要登录到远程主机上去获得信息,而ping,ssh,http都不需要的。这个到远程主机获取相关的信息的过程是由nrpe完成的。如果你的client上没有启动nrpe服务那么我们是无法获取远程主机的load和disk等信息的。下面笔者配置一下使用nrpe来监控远程主机的相关项目。


在server端编辑/usr/local/nagios/etc/objects/commands.cfg


vim  /usr/local/nagios/etc/objects/commands.cfg  10.5pt;font-family:宋体;mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri">在最后面添加如下内容


define
command{


        command_name    check_nrpe


        command_line    $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$


        }


然后编辑10.0.4.56.cfg (还是server上)


cd   /usr/local/nagios/etc/services


vim  10.0.4.56.cfg   10.5pt;font-family:宋体;mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri">加入如下内容:


define
service{


        use     generic-service


        host_name       10.0.4.56


        service_description     check_load


        check_command           check_nrpe!check_load


        max_check_attempts 5


        normal_check_interval 1


}


 


define
service{


        use     generic-service


        host_name       10.0.4.56


        service_description     check_disk_hda1


        check_command           check_nrpe!check_hda1


        max_check_attempts 5


        normal_check_interval 1


}


 


define
service{


        use     generic-service


        host_name       10.0.4.56


        service_description     check_disk_hda2


        check_command           check_nrpe!check_hda2


        max_check_attempts 5


        normal_check_interval
1


}


// 这里需要解释一下相关的”check_command”, 先看这个” check_nrpe!check_load” 这里的check_nrpe就是上面/usr/local/nagios/etc/objects/commands.cfg中刚刚定义的,后面的check_load是在远程主机上定义的一个命令脚本。具体在哪里定义稍后介绍。为什么中间加一个”!”,这个是nagios特有的形式,无需关心。下面需要到远程主机上去定义上面用到的脚本了。


在远程主机上编辑/usr/local/nagios/etc/nrpe.cfg 文件


vim  /usr/local/nagios/etc/nrpe.cfg (client上)


把” command[check_hda1]”那行改成:


command[check_hda1]=/usr/local/nagios/libexec/check_disk
-w 20% -c 10% -p /dev/hda1


然后再增加一行:


command[check_hda2]=/usr/local/nagios/libexec/check_disk
-w 20% -c 10% -p /dev/hda2


// 这里的check_hda1 和 check_hda2 都是自定义的,和server端的定义的service中的check_command对应。也就是说,如果在server端定义了一个service(通过nrpe方式)那么必须要在客户端上的nrpe.cfg中定义相应的脚本。保存这个文件后,需要重新启动一下nrpe服务。


killall nrpe ; /usr/local/nagios/bin/nrpe -c
/usr/local/nagios/etc/nrpe.cfg -d (client上)


 


3. 重启nagios服务


修改了配置需要重启服务才能使添加的监控主机生效。


/etc/init.d/nagios  restart  (server上)


此时再到web页面去观察是否多了一台10.0.4.56


 


【在nagios客户端上自定义监控脚本】


在开始,笔者就讲过,我们可以自定义写监控脚步,从上面的例子中也可以看到监控磁盘状态时,是根据磁盘分区来监控的。这样不免有些麻烦,因为每台主机的磁盘分区状况都不一样(一样还好),而且有多少个分区就需要定义多少个命令。所以笔者就自定义写一个shell脚本来监控所有的磁盘分区:


1. 在客户端上创建脚本/usr/local/nagios/libexec/check_disk.sh


vim  /usr/local/nagios/libexec/check_disk.sh 写入如下内容:(client上)



row=`df
-h -P|wc -l`


status=0


for i in
`seq 2 $row`


do


        spare=`df -h -P|sed -n "$i"p|awk '{print $4}'`


        use_percentage=`df -h -P|sed -n "$i"p|sed -n
"s/\%//"p|awk '{print $5}'`


        spare_percentage=`expr 100 - $use_percentage`


        partition_name=`df -h -P|sed
-n "$i"p|awk '{print $6}'`


        if [
"$spare_percentage" -lt "3"  ];then


                echo -n "$partition_name CRITICAL ${spare_percentage}% $spare  "


                status[$i]=2


        elif
[ "$spare_percentage" -lt "5" ];then


                echo -n  "$partition_name WARNING! ${spare_percentage}% $spare  "


                status[$i]=1


        else


                echo -n  "$partition_name OK ${spare_percentage}% $spare  "


                status[$i]=0


        fi


done


zhuangtai=0


for j in
`seq 2 $row`


do


        if [
"${status[$j]}" -gt "$zhuangtai"  ];then


                zhuangtai=${status[$j]}


        fi


done


exit
$zhuangtai


2. 保存后,修改该脚本的权限


chmod +x  /usr/local/nagios/libexec/check_disk.sh (client上)


3. 然后编辑/usr/local/nagios/etc/nrpe.cfg文件


vim /usr/local/nagios/etc/nrpe.cfg   10.5pt;font-family:宋体;mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri">加入一行:(client上)


command[check_disk]=/usr/local/nagios/libexec/check_disk.sh


保存,重启nrpe服务


killall nrpe ; /usr/local/nagios/bin/nrpe -c
/usr/local/nagios/etc/nrpe.cfg -d (client上)


4. 检测刚才的脚本是否正常运行的方法是,到server端执行如下命令:


/usr/local/nagios/libexec/check_nrpe -H
10.0.4.56 -c check_disk (server上)


如果正常的话,会输出一行磁盘检测的数据,否则可能会报错。


5. 到server上添加相应的service


cd   /usr/local/nagios/etc/services  (server上)


vim  10.0.4.56.cfg   10.5pt;font-family:宋体;mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri">加入如下内容:


define
service{


        use     generic-service


        host_name       10.0.4.56


        service_description     check_disk


        check_command           check_nrpe!check_disk


        max_check_attempts 5


        normal_check_interval 1


}


6. 重启nagios服务


/etc/init.d/nagios restart   (server上)


 


【配置nagios报警邮件】


现在139邮箱有顺便发短信的功能,所以当有报警时,只需发送到你的139邮箱你就同样会收到一条报警短信。这样做的优势就是不用再去买短信网关了,节省了很大一笔钱。


vim
/usr/local/nagios/etc/objects/contacts.cfg


把” email         nagios@localhost”  修改成 “email   你的139邮箱”


vim
/usr/local/nagios/etc/objects/templates.cfg


找到:


define service{


        name                            generic-service


之所以看这一段,是因为在上面添加的10.0.4.56.cfg 定义了很多generic-service所以要关注这段的配置。


define
service{


name     generic-service                


active_checks_enabled          1                             


passive_checks_enabled          1                      


parallelize_check               1                      


obsess_over_service             1                              


check_freshness                 0                     


notifications_enabled           1                             


event_handler_enabled           1                      


flap_detection_enabled          1                      


failure_prediction_enabled      1                      


process_perf_data               1                      


retain_status_information        1                              


retain_nonstatus_information    1                      


is_volatile                     0                      


check_period                    24x7        


max_check_attempts              3                     


normal_check_interval           10                     


retry_check_interval            2                      


ontact_groups                  admins                 


notification_options            w,u,c,r                


notification_interval           60                     


notification_period             24x7                   


register                        0                      


}


其中有几个参数需要你注意:


notifications_enabled
: 是否开启提醒功能。1为开启,0为禁用。一般,这个选项会在主配置文件(nagios.cfg)中定义,效果相同。


notification_interval: 重复发送提醒信息的最短间隔时间。默认间隔时间是60分钟。如果这个值设置为0,将不会发送重复提醒。


notification_period: 发送提醒的时间段。非常重要的主机(服务)我定义为7×24,一般的主机(服务)就定义为上班时间。如果不在定义的时间段内,无论什么问题发生,都不会发送提醒。


notification_options: 这个参数定义了发送提醒包括的情况:d = 状态为DOWN, u = 状态为UNREACHABLE , r = 状态恢复为OK ,  f = flapping。,n=不发送提醒。


要想正确发送邮件,上面的参数得配置合理才行。


 

相关推荐

添加新评论

网站状态

  • 栏目分类:49个
  • 发布文章:1549篇
  • 用户评论:806条
  • 开博至今:4250天

正则速查

[abc] 匹配中括号中的单个字符,如a或b或c
[^abc] 匹配除了a、b、c等字符的其他单个字符
[a-z] 匹配一个字符范围,如a到z
[a-zA-Z] 匹配一个字符范围,如a-z 或 A-Z
^ 匹配行的开始
$ 匹配行的结束
\A 匹配一个字符串的开始
\z 匹配一个字符串的结束
. 匹配任意单个字符
\s 匹配空白字符,如空格,TAB
\S 匹配非空白字符
\d 匹配一个数字
\D 匹配非数字
\w 匹配一个字母
\W 匹配非字母
\b 匹配字符边界
(...) 引用所有括号中的内容
(a|b) a或者b
a? 零个或1个a
a* 零个或多个a
a+ 1个或多个a
a{3} 3次重复的a
a{3,} 3次或3次以上重复的a
a{3,6} 3到6次重复的a

修正符

/g 查找所有可能的匹配
/i 不区分大小写
/m 多行匹配
/s 单行匹配
/x 忽略空白模式
/e 可执行模式,PHP专有
/A 强制从目标字符串开头匹配
/D 使用$限制结尾字符,则不允许结尾有换行
/U 只匹配最近的一个字符串;不重复匹配

最新回复

  • 小云: 打卡
  • 小云: 不错啊,收藏起来先
  • 小云: 收藏,很不错
  • memory: 动态添加没有试过,可能需要绑定事件了
  • 111: 动态添加按钮怎么添加,pick:class名是那个能在具体一点吗...
  • 今日头条: 文章不错非常喜欢
  • memory: 你看一下 gmp-6.1.2 的版本咧,不行换低点的.
  • 大叔: 发现编译出来的包,在 centos6 下运行错误。提示这个:ve...
  • : 感谢,我现在才知道还有快捷键这个东东!!!
  • 1: 天书啊
  • memory: 可以去官方网站找找手册了,好久不玩它了.
  • xiaoyan: 怎么解决的啊
  • 银行建设: 生产环境应该怎么搭建redis集群呢?
  • memory: 好久没折腾WIN了?不确认哟。
  • 虫虫: tomcat apache nginx能装吗
  • 咚咚: 开源的放一个吧
  • memory: 好几年不更新了。。。