技术改变生活

博客园 首页 新随笔 联系 订阅 管理

Nagios运行原理

Nagios的功能是监控服务和主机,但是他自身并不包括这部分功能,所有的监控、检测功能都是通过各种插件来完成的。

启动Nagios后,它会周期性的自动调用插件去检测服务器状态,同时Nagios会维持一个队列,所有插件返回来的状态信息都进入队列,Nagios每次都从队首开始读取信息,并进行处理后,把状态结果通过web显示出来。

Nagios提供了许多插件,利用这些插件可以方便的监控很多服务状态。安装完成后,在nagios主目录下的/libexec里放有nagios自带的可以使用的所有插件,如,check_disk是检查磁盘空间的插件,check_load是检查CPU负载的,等等。每一个插件可以通过运行./check_xxx –h 来查看其使用方法和功能。

 在大规模生产环境中,如果需要浏览历史数据,需要结合db

获取数据的方式:主动发送、NRPE插件、SNMP、NSClient++ 

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 依次读取队列中的信息,再把结果显示出来。

Nagios所需要的软件

LAP环境,不需要mysql

nagios-3.5.1.tar.gz                         #Nagios核心文件,Nagios服务文件,不建议用最新,很多插件没做好

nagios-plugins-2.1.1.tar.gz                #Nagios插件,用于存放脚本和命令

NSCP-0.5.0                             #也就是Nsclient++,用来监控Windows,分为64位、32位版本

nrpe-2.15.tar.gz                          #代理服务,用于监控非Nagios服务器的服务器本地私有信息代理

vautour_style.zip                          #主题包

 

Nagios监控本服务器

配置监控之前,我们需要做一系列的准备工作

(指定主配置文件需要加载的配置文件—定义主机—定义服务 –定义监控命令—检查配置文件—启动Nagios)

 

1:  原理  数据收集,数据呈现

2: Nagios主程序,插件包,nrpe

3:解决依赖(gd-devel)

4:LAP

5:创建Nagios 运行用户和组,加入我们的运行组

6:主程序安装,./configure –with-command-group=nagcmd (make all ,后面所有的的步骤)

7:  htpasswd 创建 web认证用户 并测试登陆

8:安装我们的Nagios-plugins插件

 

 

 

监控任何一台服务器,工作流程是定义主机,定义服务,定义命令

 [root@b objects]# vim /usr/local/nagios/etc/nagios.cfg

# Definitions for monitoring the local (Linux) host

cfg_file=/usr/local/nagios/etc/objects/localhost.cfg          

 #在这两行下面添加下面两行

cfg_file=/usr/local/nagios/etc/objects/hosts.cfg

cfg_file=/usr/local/nagios/etc/objects/service.cfg

 [root@b objects]# vim hosts.cfg

define host{

        use          linux-server            #使用的模板名字

        host_name    b1.cn             #主机名

        address      10.10.10.1             #被监控主机IP地址

}             

 [root@b objects]# vim service.cfg

define service{

        use                    local-service

        host_name              b1.cn

        service_description     MySqlSev

        check_command        check_mysql

}     

 [root@b objects]# vim commands.cfg

define command{

        command_name    check_mysql

        command_line    $USER1$/check_mysql -H $HOSTADDRESS$ -u nagios –p123456 -d nagios

}

[root@b objects]# /usr/local/nagios/libexec/check_mysql -H 10.10.10.1 -u nagios  -p123456 -d nagios

Uptime:1810  Threads:1  Questions:6  Slow queries:0  Opens:15  Flush tables:1  Open tables:8  Queries per second avg:0.3|Connections=4c;;; Open_files=16;;; Open_tables=8;;; Qcache_free_memory=0;;; Qcache_hits=0c;;; Qcache_inserts=0c;;; Qcache_lowmem_prunes=0c;;; Qcache_not_cached=0c;;; Qcache_queries_in_cache=0;;; Queries=6c;;; Questions=6c;;; Table_locks_waited=0c;;; Threads_connected=1;;; Threads_running=1;;; Uptime=1810c;;;

注意:所有的check_command字段中的所使用的命令,必须在command.cfg中定义好才能使用,而command.cfg中的command_line中使用的命令,必须在/usr/local/Nagios/libexec/目录下存在,安装plugins会生成

手动检测command.cfg的命令有效性

 

注意:服务器要安装了mysql客户端软件,然后再重新编译安装下plugins 才会生成check_mysql

 

Nagios监控外部主机私有信息

私有信息,包括默认的硬盘使用,进程数目,SWAP分区等等

私有信息,就是我需要在本机登陆操作登陆的

非私有,就是可以通过远程的方式

只有监控私有信息的时候,才调用NRPE这个插件来通信

nrpe插件

通过NRPE(一个插件)服务可以添加本地信息的监控,将数据发送到我们的Nagios服务器

NRPE两部分组成,一部分是监控机check_nrpe,一部分是被监控机的NRPE守护进程

Nagios 服务器执行check_nrpe 插件并告诉他检查哪个服务,check_nrpe 插件通过SSL 连接方式联系远程服务器上的NRPE守护进程,NRPE守护进程执行相应的插件完成指定的检查,并返回结果。

 

nrpe原理

Nrpe是基于SSL的机制,那么我们需要做的事情就是构建SSL环境,所以需要使用NRPE工作的时候,都需要安装SSL,而且服务端和客户端都需要安装nrpe软件,而我们客户端不需要安装NAGIOS服务端

 

客户端的NRPE安装

       1:安装nagios- plugins插件

       2:安装NRPE( make install-daemon-config  make install-xinetd)

       3:配置我们xinted服务,允许谁来拿数据

       4:启动xinetd

       5:查看端口是否正常启动

 

解决依赖

[root@b ~]#  yum install -y openssl openssl-devel

[root@b1 ~]#  yum install -y openssl openssl-devel

实验所需设备都需要安装SSL的支持

服务端安装NRPE

[root@b Nagios]# tar xvf nrpe-2.15.tar.gz -C /usr/local/src/

[root@b Nagios]# cd /usr/local/src/nrpe-2.15/

[root@b nrpe-2.15]# ./configure && make && make install

[root@b nrpe-2.15]# make install-plugin && make install-daemon     #前者安装插件,后者以守护经常来运行

[root@b nrpe-2.15]# ls /usr/local/nagios/libexec/  

/usr/local/nagios/libexec/check_nrpe    #这个命令需要安装nrpe之后才有

客户端配置

[root@b objects]# cd /root/Nagios/

[root@b Nagios]# scp nagios-plugins-2.1.1.tar.gz nrpe-2.15.tar.gz root@10.10.10.71:/root

[root@b1 ~]# useradd -s /sbin/nologin nagios

[root@b1 ~]# groupadd nagcmd

[root@b1 ~]# usermod -G nagcmd nagios

[root@b1 ]# yum install -y xinetd

[root@b1 ~]# tar xvf nagios-plugins-2.1.1.tar.gz -C /usr/local/src/

[root@b1 ~]# tar xvf nrpe-2.15.tar.gz -C /usr/local/src/

[root@b1 ~]# cd /usr/local/src/nagios-plugins-2.1.1/

[root@b1 nagios-plugins-2.1.1]# ./configure && make && make install

[root@b1 nagios-plugins-2.1.1]# cd ../nrpe-2.15/

[root@b1 nrpe-2.15]# ./configure && make && make install

[root@b1 nrpe-2.15]# make install-daemon-config         //这里是客户端,不用make-install-plugin

[root@b1 nrpe-2.15]# make install-xinetd

[root@b1 ~]# vim /etc/xinetd.d/nrpe

# default: on

# description: NRPE (Nagios Remote Plugin Executor)

service nrpe

{

        flags           = REUSE

        socket_type     = stream

        port            =5666

        wait            = no

        user            = nagios

        group           = nagios

        server          =/usr/local/nagios/bin/nrpe

        server_args     = -c /usr/local/nagios/etc/nrpe.cfg --inetd

        log_on_failure  += USERID

        disable         = no

        only_from       =127.0.0.1 10.10.10.2      # #添加红色 nagios服务器地址, 允许2这台机器来连接自己的nrpe服务,多个IP地址空格分隔

 

}

echo "nrpe        5666/tcp        # NRPE" >> /etc/services               //端口注册

nrpe            5666/tcp                # NRPE

#/etc/services文件的作用:

#作用1:xinet.d来启动服务时他就会在/etc/services找相应服务对应的端口来启动服务。找不到对应端口,将不启动服务。

#作用2: 显示对应端口对应的协议名。

[root@b1 ~]# systemctl restart xinetd

[root@b1 ~]# systemctl enable xinetd

[root@b1 ~]# netstat -antup | grep 5666

tcp        0      0:::5666                     :::*                LISTEN      68667/xinetd 

 

客户端nrpe命令

[root@b1 ~]# vim /usr/local/nagios/etc/nrpe.cfg

command[check_sda1]=/usr/local/nagios/libexec/check_disk -w 38% -c 35% -p /dev/sda1

command[check_sda2]=/usr/local/nagios/libexec/check_disk -w 42% -c 43% -p /dev/sda2

command[check_swap]=/usr/local/nagios/libexec/check_swap -w 20% -c 10%

#-w为警告 -C为告急  sda2中,我们是指占用42%

 [root@b1 ~]# systemctl restart xinetd

服务端手动测试

[root@b libexec]# ./check_nrpe -H 10.10.10.1

NRPE v2.15

[root@b ~]# /usr/local/nagios/libexec/check_nrpe -H 10.10.10.71 -c check_sda1

DISK OK - free space: /boot 2700 MB (98% inode=99%);| /boot=38MB;1790;1877;0;2888

#如果出现以一下错误,说明没有允许10.10.10.2 访问我们的b1服务

#CHECK_NRPE: Error - Could not complete SSL handshake.

#我们需要检查/etc/init.d/nrpe 下面的only from中的有无添加10.10.10.2

 

定义被监控主机

[root@b Nagios]# cd /usr/local/nagios/etc/objects/

[root@b objects]# vim hosts.cfg

define host{

        use              linux-server

        host_name      b1.cn

        address         10.10.10.1

}

#我们现在还是监控的b1,所以信息不用更改

定义需要监控的服务

 [root@b objects]# vim service.cfg

define service{

        use                       local-service

        host_name                b1.cn

        service_description         sda2_Partition

        check_command           check_nrpe!check_sda2          

        }

define service{

        use                       local-service

        host_name                b1.cn

        service_description         Total Processes       

        check_command           check_nrpe!check_total_procs

        }

define service{

        use                       local-service

        host_name                b1.cn

        service_description         Current Load               

        check_command           check_nrpe!check_load

}

#分别是监测分区、进程总数、负载

 

定义NRPE监控命令

 

[root@b objects]# vim commands.cfg

define command{

        command_name    check_nrpe

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

        }

$ARG1$ 表示调用后面的参数。

 

[root@b objects]# /etc/init.d/nagios restart

 

总结一下:

1: 服务端监控(无需NRPE)

定义主机,定义服务,定义命令,测试命令,启动

2:有NRPE的监控

定义主机,定义服务(check_nrpe!check_ping),定义命令(定义的是check_nrpe)

还有一个定义命令(客户端做  command[check_adfadf]) -w –c

安装好之后,是依赖于xinetd服务启动的

 

 

 

posted on 2019-07-13 23:25  小阿峰  阅读(244)  评论(0编辑  收藏  举报