Nagios工作原理

Nagios的功能起监控服务和主机。但是其自身井不包括这部分功能。 所有的监控、检测功能都是通过各种插件来完成的。启动Nagios后,它会周期性地自动调用捶件去检测服务器状态,同时Nagios会维持一个队列, 所有插件返回来的状态信息都进入队列,Nagios每次都从队首读取信息,进行处理后,再把状态结果通过Web显示出来。这就是所谓的被动模式,经常用于监控主机的系统资源,比如系统负载、磁盘使用率、内存使用率、网络状态、系统进程数等等。另一种是主动模式,主要是Nagios服务器主动去获取数据,常用于探测URL的监控和服务的状态监控。相比于主动模式中服务器主动去被监控机上轮询获取监控数据的方式,这样做的一个很大优势就是将除去数据处理的其他工作都放在了被监控机上面(包括数据的传输),就避免了被监控机数量大时,一次轮询时间过长而导致监控反应延迟,这也是被动模式能承担更大监控量的关键。Nagios提供了许多插件,利用这些插件可以方便地监控很多服务状态。安装完成后,在Nagios主日录下的/libexec里放有Nagios自带的可以使用的所有插件,如check_disk是检查磁盘空间的插件,check_load是检查CPU负载的插件,等等。每一个插件都可以通过运行./check_xxx -h命令来查看其使用方法和功能。

Nagios四种监控状态

Nagios可以识别四种状态返回信息:0(OK)表示状态正常/绿色。1(WARNING)表示出现警告/×××,2(CRITCAL)表示出现非常严重的错误/红色,3(UNKNOWN)表示未知错误/深×××。Nagios根据插件返回的值,来判断监控对象的状态,并通过Web显示出来,以供管理员及时发现故障。

Nagios 通过nrpe插件来远程管理服务

  • Nagios执行安装在它里面的check_nrpe 插件,并告诉check_nrpe去检测哪些服务。
  • 通过SSL,check_nrpe连接远端机器上的NRPE daemon。
  • NRPE运行本地的各种插件去检测本地的服务和状态(check_disk,..etc)。
  • NRPE把检测的结果传给主机端的check_nrpe, check_nrpe 再把结果送到Nagios状态队列中。
  • Nagios依次读取队列中的信息,再把结果显示出来。

案例环境

监控主机:192.168.10.128
被控主机:192.168.10.142

案例实施

搭建Nagios监控系统
1、关闭防火墙和SElinux
systemctl stop firewalld.service
setenforce 0
2、安装相关软件包
yum install -y gcc glibc glibc-common gd gd-devel xinetd openssl-devel
3、创建nagios用户和用户组
useradd -s /sbin/nologin nagios
4、创建工作目录,设置属主属组
mkdir /usr/local/nagios
chown -R nagios.nagios /usr/local/nagios
ll -d /usr/local/nagios/      //查看权限
5、编译安装Nagios
tar -zxvf nagios-4.0.1.tar.gz -C /opt
cd /opt/nagios-4.0.1
./configure --prefix=/usr/local/nagios       //指定安装目录
make all
make install
make install-init
make install-commandmode
make install-config

chkconfig --add /etc/rc.d/init.d/nagios
chkconfig --level 35 nagios on
chkconfig --list nagios

cd /usr/local/nagios        //检查是否存在etc、bin、sbin、share、var 这五个目录
6、安装Nagios插件

Nagios提供的各种监控功能基本上都是通过插件来完成的

tar xvzf nagios-plugins-1.5.tar.gz -C /opt
cd /opt/nagios-plugins-1.5
./configure --prefix=/usr/local/nagios       //指定安装目录
make && make install
7、安装LAMP

建议手工编译安装LAMP,这里我为节省时间用yum安装

yum install -y httpd* mysql* php
8、修改httpd配置文件
vim /etc/httpd/conf/httpd.conf 

找到:
User apache 
Group apache 
修改为 
User nagios 
Group nagios 

然后找到 
<IfModule dir_module> 
  DirectoryIndex index.html 
</IfModule> 
修改为 
<IfModule dir_module> 
  DirectoryIndex index.html index.php 
</IfModule> 

接着增加如下内容: 
AddType application/x-httpd-php .php 

为了安全起见,一般情况下要让nagios的web监控页面必须经过授权才能访问,这需要增加验证配置,即在httpd.conf 文件最后添加如下信息:

#setting for nagios 
ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin" 
<Directory "/usr/local/nagios/sbin"> 
     AuthType Basic 
     Options ExecCGI 
     AllowOverride None 
     Order allow,deny 
     Allow from all 
     AuthName "Nagios Access" 
     AuthUserFile /usr/local/nagios/etc/htpasswd              
     Require valid-user 
</Directory> 
Alias /nagios "/usr/local/nagios/share" 
<Directory "/usr/local/nagios/share"> 
     AuthType Basic 
     Options None 
     AllowOverride None 
     Order allow,deny 
     Allow from all 
     AuthName "nagios Access" 
     AuthUserFile /usr/local/nagios/etc/htpasswd 
     Require valid-user 
</Directory>
9、创建访问认证文件
htpasswd -c /usr/local/nagios/etc/htpasswd jack
#用户名:jack          密码:123123     (自行定义)
cat /usr/local/nagios/etc/htpasswd   //查看文件信息,密码为加密信息
10、启动httpd服务
systemctl start httpd.service
配置Nagios监控系统

Nagios安装完毕后,默认的配置文件在/usr/local/nagios/etc/目录下

配置文件介绍及修改
cd /usr/local/nagios/etc/

nagios监控URL nagios监控硬盘_配置文件


nagios监控URL nagios监控硬盘_nagios监控URL_02

1.objects/templates.cfg
主要用于监控主机资源以及服务,在nagios配置中称为对象,为了不必重复定义一些监控对象,Nagios引入了一个模板配置文件,
将一些共性的属性定义成模板,以便于多次引用。

vim objects/templates.cfg

contact_groups  联系组属性改成 ts,ts将在后面的contacts.cfg文件中定义
2.resource.cfg文件
resource.cfg是nagios的变量定义文件 一般无需更改
$USER1$=/usr/local/nagios/libexec
3.objects/commands.cfg文件
此文件默认是存在的,无需修改即可使用,当然如果有新的命令需要加入时,在此文件进行添加即可
4. objects/hosts.cfg文件
此文件默认不存在,需要手动创建,hosts.cfg主要用来指定被监控的主机地址以及相关属性信息(不能有任何空格)

vim objects/hosts.cfg

define host{   
        use                     linux-server       #引用主机linux-server的属性信息,linux-server主机在templates.cfg文件中进行了定义。
        host_name               Nagios-Linux     #主机名
        alias                   Nagios-Linux     #主机别名
        address                 192.168.10.142     #被监控的主机地址,这个地址可以是ip,也可以是域名。
        }   

#定义一个主机组   
define hostgroup{      
        hostgroup_name          bsmart-servers     #主机组名称,可以随意指定。
        alias                   bsmart servers     #主机组别名
        members                 Nagios-Linux    #主机组成员,其中“Nagios-Linux”就是上面定义的主机。     
        }

nagios监控URL nagios监控硬盘_nagios监控URL_03

5.objects/localhost.cfg文件

用来监控本机 一般无需更改

6.objects/windows.cfg文件

用来监控windows 这里无需使用

7.objects/services.cfg文件

此文件默认也不存在,需要手动创建,主要用于定义监控的服务和主机资源

define service{  
        use                     local-service      #引用local-service服务的属性值,local-service在templates.cfg文件中进行了定义。
        host_name               Nagios-Linux      #指定要监控哪个主机上的服务,“Nagios-Server”在hosts.cfg文件中进行了定义。
        service_description     check-host-alive      #对监控服务内容的描述,以供维护人员参考。
        check_command           check-host-alive      #指定检查的命令。
        }

nagios监控URL nagios监控硬盘_配置文件_04

8.objects/contacts.cfg文件

contacts.cfg是一个定义联系人和联系人组的配置文件(不能有空格)

define contact{
        contact_name                    jack     #联系人的名称,这个地方不要有空格
        use                             generic-contact     #引用generic-contact的属性信息,其中“generic-contact”在templates.cfg文件中进行定义
        alias                           Nagios Admin
        email                           1483445936@qq.com
        }
define contactgroup{
        contactgroup_name       ts     #联系人组的名称,同样不能空格
        alias                   Technical Support     #联系人组描述
        members                 jack    #联系人组成员,其中“jack”就是上面定义的联系人,如果有多个联系人则以逗号相隔
        }

nagios监控URL nagios监控硬盘_php_05

9.cgi.cfg文件

此文件用来控制相关cgi脚本,由于nagios的web监控界面验证用户为jack,所以只需在cgi.cfg文件中添加此用户的执行权限,在最后加入

default_user_name=jack
authorized_for_system_information=nagiosadmin,jack  
authorized_for_configuration_information=nagiosadmin,jack  
authorized_for_system_commands=jack
authorized_for_all_services=nagiosadmin,jack  
authorized_for_all_hosts=nagiosadmin,jack
authorized_for_all_service_commands=nagiosadmin,jack  
authorized_for_all_host_commands=nagiosadmin,jack

nagios监控URL nagios监控硬盘_配置文件_06

10. nagios.cfg文件

Nagios主配置文件,将对象配置文件在Nagios.cfg文件中进行引用

cfg_file=/usr/local/nagios/etc/objects/hosts.cfg
cfg_file=/usr/local/nagios/etc/objects/services.cfg
command_check_interval=10s       //该变量用于设置nagios对外部命令检测的时间间隔

nagios监控URL nagios监控硬盘_nagios监控URL_07

11.检查配置文件
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg         //验证配置文件

nagios监控URL nagios监控硬盘_ios_08

登录Nagios
systemctl restart httpd.service

浏览器输入
http://192.168.10.128/nagios/

使用开始设置好的jack用户及123123密码进行登录

nagios监控URL nagios监控硬盘_配置文件_09


登录进来的页面

nagios监控URL nagios监控硬盘_ios_10


查看被监控的主机,本机及Nagios-Linux

nagios监控URL nagios监控硬盘_配置文件_11


查看被监控主机上的服务

nagios监控URL nagios监控硬盘_ios_12


查看被监控主机的具体状态信息

nagios监控URL nagios监控硬盘_配置文件_13


转载于:https://blog.51cto.com/13641879/2165748