设为首页 收藏本站
查看: 1610|回复: 0

nagios搭建监控服务

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-11-6 08:28:43 | 显示全部楼层 |阅读模式
Nagios 通过 NRPE 来远端管理服务

1.Nagios 执行安装在它里面的 check_nrpe 插件,并告诉 check_nrpe 去检测哪些服务。

2.通过 SSL,check_nrpe 连接远端机子上的 NRPE daemon

3.NRPE 运行本地的各种插件去检测本地的服务和状态(check_disk,..etc)

4.最后,NRPE 把检测的结果传给主机端的 check_nrpe,check_nrpe 再把结果送到 Nagios状态队列中。

5.Nagios 依次读取队列中的信息,再把结果显示出来。

下面通过一个监控远端服务器 CPU 负载情况的实例,研究如何实现通过 NRPE 来管理远端服务器。假设有一台远端服务器的 IP 是 10.20.0.110,Nagios 服务主机 IP 是:10.20.10.1。它们都已经安装上了 nagios 系统,主机通过 NRPE 检查运行中的服务器 CPU 的负载量,当负载量超过80%是发出警告(WARNING)报告,超过95%时发出紧急(CRITICAL)报告。在Nagios 的插件中存在 check_load -w $ARG1$ -c $ARG2$插件,通过查看其帮助,当 Nagios 调用它时,就会去检查对象主机的CPU负载,达到$ARG1$指定的数值时就会发出警告(WARNING),达到$ARG2$时发出紧急报告(CRITICAL)。

首先是在远端服务器上的修改:

1.让 Nagios 用户拥有对如下文件的所用权:

chown nagios.nagios /usr/local/nagios chown –R nagios.nagios /usr/local/nagios/libexec 然后如果没有安装 xinetd,则先安装 xinetd。

2.按照 Nagios 文档安装好 nrpe 插件。

3.修改文件/etc/xinetd.d/nrpe:

only_from = 127.0.0.1 10.20.10.1(这个是 Nagios 主机的 IP)

nrpe 允许以上 IP 的机器通过 nrpe 查询服务

4.在/etc/service 文件里添加:

nrpe 5666/tcp #nrpe 然后 service xinetd restart

5.执行:netstat –at | grep nrpe

如果出现:tcp 0 0 *:nrpe *:* LISTEN 说明NRPE监听已经成功启动了

6.执行 /usr/local/nagios/libexec/check_nrpe –H localhost

出现 NRPE v 2.8.1 则安装成功。

7.确认本地防火墙允许远端服务器访问 NRPE daemon:

iptables -IRH-Firewall-1-INPUT -p tcp -m tcp –dport 5666 -j ACCEPT service iptables save 8.打开/usr/local/nagios/etc/commands.cfg,找到 check_load 服务,修改如下:

define command { command_name check_server_load command_line $USER1$/check_load -w 80% -c 95% } 9.打开 /usr/local/nagios/etc/nrpe.cfg 可以看到里面已经默认定义了一些检测服务,如:

/usr/local/nagios/libexec/check_nrpe -H localhost -c check_users /usr/local/nagios /libexec/check_nrpe -H localhost -c check_load /usr /local/nagios/libexec/check_nrpe -H localhost -c check_hda1 注释掉除 check_load 外的其它服务定义。



最后是 Nagios 主机上的修改:

1在 Nagios 主机上安装 nrpe 插件。

2打开/usr/local/nagios/etc/command.cfg添加如下行:

define command{ command_name check_nrpe command_line $USER1$/check_nrpe –H 10.20.0.110 -c $ARG1$ 3再在对象定义的配置文件里(host.cfg 文件),修改 host 为要检测的主机的 IP 地址,然后在服务中添加要检测的命令:

define service { use linux-service service_description remote_CPU_Load check_command check_nrpe!check_load } 4在 nagios.cfg 主配置文件中,cfg_file 值为 host.cfg,运行

/usr/local/nagios/bin/nagios –v /usr/local/nagios/etc/nagios.cfg 如果没有错就启动 nagios:

service nagios start(restart,stop) 5打开浏览器:http://主机 IP/nagios

可以看到所监控的远端机器的这个信息了(check_server_load的返回结果),参看图2.正常状态用绿色表示,一旦远端服务器负载超过 80%,状态信息就会变成红色警告管理员。



【关于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 (略)



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/downlo ... ugins-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  # 把nagios做成一个运行脚本,使nagios随系统开机启动

make install-config  # 把配置文件样例复制到nagios的安装目录

make install-commandmode # 给外部命令访问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/downlo ... ugins-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   ##定义一个目录,以后把新增加的主机信息文件全部放到这里



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  # 在最后面添加如下内容

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   # 加入如下内容:

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上)

#!/bin/bash

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  # 加入一行:(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   # 加入如下内容:

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=不发送提醒。

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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-27188-1-1.html 上篇帖子: /nagios/cgi-bin/cmd.cgi无法打开 下篇帖子: Nagios&Cacti篇八:搭建Nagios服务器 监控
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表