Nagios 监控系统

1、Nagios简介

Nagios是一款开源免费的网路监视工具,可以监控的设备:WindowsLinuxUnixRouterSwitch,具有报警功能,是一个网络监控系统。它可以监视你指定的主机和服务,并在那些设备“变坏”和“变好”的时候通知管理员。

在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知。Nagios Core 原先设计在Linux下运行,当然,它在其他的Unix系统下应该也能进行工作。

Nagios Ain’t Gonna Insist On Sainthood” Sainthood 翻译为圣徒
官方网站:http://www.nagios.org

Nagios运行模式和优点

image-20191116182102720

A.运行模式:数据收集是C/S模式,用户查看监控信息是B/S模式
B.优点:

  1. 监控网络服务(SMTP、POP3、HTTP、PING等);
  2. 监控主机资源(处理器负荷、磁盘利用率等);
  3. 简单地插件设计使得用户可以方便地扩展自己服务的检测方法;
  4. 当服务或主机问题产生与解决时将告警发送给联系人(通过EMail、短信、用户定义方式);
  5. 可以定义一些处理程序,使之能够在服务或者主机发生故障时起到预防作用;
  6. 自动的日志滚动功能;
  7. 可选的WEB界面用于查看当前的网络状态、通知和故障历史、日志文件等;

Nagios工作原理

image-20191116182757831

1)Nagios插件:

nagios-plugins是nagios官方提供的一套插件程序,nagios监控主机的功能其实都是通过执行插件程序来实现的。

nagios本身并没有监控的功能,所有的监控是由插件完成的,插件将监控的结果返回给nagios,nagios分析这些结果以web的方式展现给我们,同时提供相应的报警功能(这个报警的功能也是由插件完成的)。

所有的这些插件是一些实现特定功能的可执行程序,默认安装的路径是/usr/local/nagios/libexec,可以自己查看。

使用NRPE监控LINUX上的”本地信息”

对系统为linux的主机进行如下监控:CPU负载、磁盘容量、登陆用户数、总进程数、僵尸进程数、swap分区使用情况。

对于像磁盘容量,cpu负载这样的”本地信息”,nagios只能监测自己所在的主机,而对其他的机器则显得有点无能为力。毕竟没得到被控主机的适当权限是不可能得到这些信息的。为了解决这个问题,nagios有这样一个附加组件—-NRPE。用它就可以完成对linux类型主机”本地信息”的监控。

2)NRPE总共由两部分组成:

  • check_nrpe 插件,位于在监控主机上
  • NRPE daemon,运行在远程的linux主机上(通常就是被监控机)

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

  1. Nagios会运行check_nrpe这个插件,告诉它要检查什么。
  2. 通过SSL方式,check_nrpe插件会连接到远程的NRPE daemon。
  3. NRPE运行本地的各种插件去检测本地的服务和状态(chenk_disk,..etc)。
  4. NRPE将检查的结果返回给check_nrpe插件,插件再把结果送到Nagios状态队列。
  5. Nagios依次读取队列中的信息,再把结果显示出来。

注意:NRPE daemon需要nagios插件安装在远程的linux主机上,否则,daemon不能做任何的监控。

4)通过NRPE的检测分为两种

  1. 直接检测:检测的对象是运行NRPE的那台linux主机的本地资源。

    被监控机上安装有nrpe,并且还有插件,最终的监控是由这些插件来进行的.当监控主机将监控请求发给nrpe后,nrpe调用插件来完成监控。

  2. 间接检测:当运行nagios的监控主机无法访问到某台被监控机,但是运行NRPE的机器可以访问到时,NRPE就可以充当一个代理,将监控请求发送到被监控机(必须要说明的是,通常被监控机与监控机在同一网络内,所以这样的情况很少)

5)nagios可以做到

  1. 数据报警(报警功能恒强悍)[故障出发,故障恢复都可以]。
  2. 依赖分析报警(发现关键设备故障,相连的设备就不报警)。
  3. 数据采集(采集的数据比较独特,他只关心警戒位,只关心正常与否的状态,状态转换时可以实现报警,所以它采集的数据不需要保存),当然也有插件弥补这个不足,如PNP4Nagios。

6)Nagios所需要的软件

LAMP环境,不需要mysql

组件描述
nagios-3.5.1.tar.gzNagios核心文件,Nagios服务文件,不建议用最新,很多插件没做好
nagios-plugins-2.1.1.tar.gzNagios 插件,用于存放和收集脚本和命令
NSCP-0.5.0也就是Nsclient++,用来监控Windows,分为64位和32位版本
nrpe-2.15.tar.gz代理服务,用于监控非Nagios服务器的服务器本地私有信息代理
vautour_style.zip举例主题包

2、部署Nagios监控服务

2.1 创建Nagios运行用户和用户组

1
2
3
[root@centos1 ~]# useradd -s /sbin/nologin nagios
[root@centos1 ~]# mkdir /usr/local/nagios
[root@centos1 ~]# chown -R nagios:nagios /usr/local/nagios/

2.2 编译安装Nagios

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@centos1 ~]# tar zxf nagios-4.0.1.tar.gz
[root@centos1 ~]# cd nagios-4.0.1
[root@centos1 nagios-4.0.1]# ./configure --prefix=/usr/local/nagios/
[root@centos1 nagios-4.0.1]# make all
[root@centos1 nagios-4.0.1]# make istall
[root@centos1 nagios-4.0.1]# make install-init
//安装生成/etc/rc.d/init.d/nagios 启动脚本
[root@centos1 nagios-4.0.1]# make install-commandmode
//安装生成/usr/local/nagios/etc下的nagios相关配置文件
[root@centos1 nagios-4.0.1]# make install-config
//设定相应nagios工作目录的权限
[root@centos1 nagios-4.0.1]# make install-webconf
//安装Nagios的WEB配置文件到Apache的conf.d目录下到此时,安装过程就结束了
[root@centos1 nagios-4.0.1]# chkconfig --add nagios
[root@centos1 nagios-4.0.1]# chkconfig nagios on

2.33 验证安装是否成功

需要查看/usr/local/nagios目录是否有如下内容:

1
2
[root@centos1 nagios-4.0.1]# ls /usr/local/nagios/
bin etc libexec sbin share var

2.4 安装Nagios插件

Nagios提供的各种监控功能基本上是通过插件来完成的。
下载地址:https://www.nagios-plugins.org/download/nagios-plugins-1.5.tar.gz

1
2
3
4
[root@centos1 ~]# tar zxf nagios-plugins-1.5.tar.gz
[root@centos1 ~]# cd nagios-plugins-1.5
[root@centos1 nagios-plugins-1.5]# ./configure --prefix=/usr/local/nagios/
[root@centos1 nagios-plugins-1.5]# make && make install

2.5 安装NRRE

如果要获取远程主机上的本地资源或属性,如CPU利用率、磁盘利用率等,需要借助外部构件NRRE来完成。
下载地址:https://www.nagios-plugins.org/download/nagios-plugins-1.5.tar.gz
监控端与被监控主机之间使用SSL安全通道,需要首先安装openssl-devel

1
2
3
4
5
[root@centos1 ~]# yum -y install openssl-devel
[root@centos1 ~]# cd nrpe-2.15
[root@centos1 nrpe-2.15]# ./configure
[root@centos1 nrpe-2.15]# make all
[root@centos1 nrpe-2.15]# make install-plugin

2.6 安装与配置Apache和PHP

Apache和PHP不是安装Nagios所必需的,但是Nagios提供了Web监控界面,通过Web监控界面可以清晰地看到被监控主机、资源的运行状态,因此,安装一个Web服务是很有必要的。
需要注意的是,Nagios在Nagios3.1.x版本以后,配置Web监控界面时需要PHP支持。

1
2
[root@centos1 ~]# yum -y instll httpd
[root@centos1 ~]# yum -y instll php mysql-devel

为了安全起见,一般情况下要让Nagios的Web监控页面必须经过授权才能访问,这需要增加验证配置,即在/etc/httpd/conf.d/nagios.conf 配置文件的最后添加如下信息,因为前面安装Nagios时添加了make install-webconf所以以下配置都已经生成好了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
[root@centos1 ~]# cat /etc/httpd/conf.d/nagios.conf
ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin"
<Directory "/usr/local/nagios/sbin">
# SSLRequireSSL
Options ExecCGI
AllowOverride None
Order allow,deny
Allow from all
# Order deny,allow
# Deny from all
# Allow from 127.0.0.1
AuthName "Nagios Access"
AuthType Basic
AuthUserFile /usr/local/nagios/etc/htpasswd.users
Require valid-user
</Directory>

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

<Directory "/usr/local/nagios/share">
# SSLRequireSSL
Options None
AllowOverride None
Order allow,deny
Allow from all
# Order deny,allow
# Deny from all
# Allow from 127.0.0.1
AuthName "Nagios Access"
AuthType Basic
AuthUserFile /usr/local/nagios/etc/htpasswd.users
Require valid-user
</Directory>

2.7 生成nagios网页用户名和密码

1
2
3
4
[root@centos1 ~]# htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadm
New password:
Re-type new password:
Adding password for user nagiosadm

2.8 查看认证文件内容,并启动Web服务

1
2
3
4
5
6
[root@centos1 ~]# cat /usr/local/nagios/etc/htpasswd.users 
nagiosadm:WpsO2JN/pwGsc //因为采用了加密算法,所以密码不是明文
[root@centos1 ~]# service httpd start
Starting httpd: httpd: apr_sockaddr_info_get() failed for centos1.benet.com
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
[ OK ]

2.9 到此就可以访问监控网页了

(别忘了做防火墙入站规则,访问登录页面后输入刚刚创建的登录用户,密码)

1
[root@centos1 etc]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT

image-20191116183725675

3、配置Nagios监控系统

3.1 默认配置文件介绍

接下来配置Nagios,在配置之前我们要了解Nagios配置文件的作用及目录层次结构,Nagios安装完毕之后,默认的配置文件在/usr/local/nagios/etc/目录下

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@centos1 ~]# cd /usr/local/nagios/etc/
cgi.cfg //控制CGI访问的配置文件
nagios.cfg //Nagios主配置文件
resource.cfg //变量定义文件,又称为资源文件,在这此文件中定义变量,以便由其他配置文件引用,如$USER1$
objects // objects是一个目录,在此目录下有很多配置文件模板,用于定义Nagios对象
objects/commands.cfg //定义命令配置文件,其中定义的命令可以被其他配置文件引用
objects/contacts.cfg //定义联系人和联系人组的配置文件
objects/localhost.cfg //定义监控本地主机的配置文件
objects/printer.cfg //定义监控打印机的一个配置文件模板,默认没有启用此文件
objects/switch.cfg //定义监控路由器的一个配置文件模板,默认没有启用些文件
objects/templates.cfg //定义主机和服务的一个模板配置文件,可以在其他配置文件中引用
objects/timeperiods.cfg //定义Nagios监控时间段的配置文件
objects/windows.cfg //定义监控Windows主机的一个配置文件模板,默认没有启用此文件

3.2 配置文件之间的关系

在Nagios的配置过程中涉及的几个定义有主机、主机组、服务、服务组、联系人、联系人组、监控时间和监控命令等。从这些定义可以看出,Nagios各个配置文件之间是互为关联、彼此引用的。成功配置出一台Nagios监控系统,必须要弄清楚每个配置文件之间依赖与被依赖的关系,最重要的有四点。

  • 定义监控哪些主机、主机组、服务和服务组
  • 定义这个监控要用什么命令实现
  • 定义监控的时间段
  • 定义主机或服务出现问题时要通知的联系人和联系人组

3.3 配置Nagios

为了能更清楚地说明问题,同时也为了维护方便,建议将Nagios各个定义对象创建独立的配置文件

  • 创建conf目录来定义host主机
  • 创建hostgroups.cfg文件来定义主机组
  • 用默认的contacts.cfg文件来定义联系人和联系人组
  • 用默认的commands.cfg文件来定义命令
  • 用默认的timeperiods.cfg来定义监控时间段
  • 用默认的templates.cfg文件作为资源引用文件

初步了解Nagios的配置文件后,接下来开始修改配置文件

①编辑主配置文件 (添加红色内容,为需要调用的配置文件)

注:前面数字为行号

1
[root@centos1 etc]# vim /usr/local/nagios/etc/nagios.cfg

29 cfg_file=/usr/local/nagios/etc/objects/commands.cfg
30 cfg_file=/usr/local/nagios/etc/objects/contacts.cfg
31 cfg_file=/usr/local/nagios/etc/objects/timeperiods.cfg
32 cfg_file=/usr/local/nagios/etc/objects/templates.cfg
33 cfg_file=/usr/local/nagios/etc/objects/hostgroups.cfg
34 cfg_dir=/usr/local/nagios/etc/conf //为了把主机配置信息都放置在此文件夹下方便管理,如果想把某个目录下的所有文件都包含进来,中以使用cfg_dir
[root@centos1 etc]# mkdir /usr/local/nagios/etc/conf

②定义一个check_nrpe监控命令(添加以下红色内容)

注:前面数字为行号

1
[root@centos1 etc]# vim /usr/local/nagios/etc/objects/commands.cfg

225 #for chen //添加一个注释名称,以防以后忘记改了哪里
226 define command{
227 command_name check_nrpe
228 command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
229 }
230
231 ###############################################################################
232
233 # ‘process-host-perfdata’ command definition
234 define command{
235 command_name process-host-perfdata
236 command_line /usr/bin/printf “%b” “$LASTHOSTCHECK$\t$HOSTNAME$\t$HOSTSTATE$\t$HOSTATTEMPT$\t$HOSTSTATETYPE$\t $HOSTEXECUTIONTIME$\t$HOSTOUTPUT$\t$HOSTPERFDATA$\n” >> /usr/local/nagios/var/host-perfdata.out
237 }

③定义监控服务联系人(添加以下内容)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@centos1 etc]# vim /usr/local/nagios/etc/objects/contacts.cfg
#for chen
define contact{
contact_name ywgcsz
alias ywgcsz
service_notification_period 24x7
host_notification_period 24x7
service_notification_options w,u,c,r
host_notification_options d,u,r

service_notification_commands notify-service-by-email
host_notification_commands notify-host-by-email

email root@centos1.benet.com
pager 13488886666,13466668888
}
define contactgroup{
contactgroup_name ywgcsz
alias ywgcsz
members ywgcsz
}

注:以上配置中各参数解释如下

配置参数描述
contact_nameywgcsz定义联系人名称
aliasywgcsz别名
service_notification_period24x7监控主机服务7x24小时
host_notification_period24x7监控主机对角色应用服务7x24小时
service_notification_optionsw,u,c,r告警级别参数
host_notification_optionsd,u,r定义主机在什么状态下需要发送通知给使用者,d:down,表示宕机状态;u:unreachable,不可到达状态;r:recovery,表示重新恢复状态
service_notification_commandsnotify-service-by-email调用邮件名称
host_notification_commandsnotify-host-by-email调用飞信名称
emailroot@centos1.benet.com定义用于接收的电子邮箱
pager13488886666,13466668888定义飞信接收手机

④定义主机组(文件需手动创建)

1
2
3
4
5
6
[root@centos1 etc]# vim /usr/local/nagios/etc/objects/hostgroups.cfg
define hostgroup{
hostgroup_name mysql
alias mysql
members 192.168.1.102
}

⑤相应的配置文件已经修改完毕,下面开始具体监控MySQl、HTTP主机的存活,负载、进程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
[root@centos1 etc]# vim /usr/local/nagios/etc/conf/192.168.1.102.cfg
define host{
host_name 192.168.1.102 //定义监控哪台主机
alias 192.168.1.102
address 192.168.1.102
check_command check-host-alive
max_check_attempts 5
check_period 24x7
contact_groups ywgcsz
notification_period 24x7
notification_options d,u,r
}
define service{
host_name 192.168.1.102 //定义监控这台主机的存活
service_description check-host-alive
check_command check-host-alive //监测命令
max_check_attempts 3 //尝试3次
normal_check_interval 2 //间隔2s
retry_check_interval 2 //从度2次
check_period 24x7
notification_interval 10 //通知间隔10分钟
notification_period 24x7
notification_options w,u,c,r
contact_groups ywgcsz
}


define service{
host_name 192.168.1.102
service_description check-procs //监控CPU
check_command check_nrpe!check_total_procs //!为分隔符,表示使用两个插件
max_check_attempts 3
normal_check_interval 2
retry_check_interval 2
check_period 24x7
notification_interval 10
notification_period 24x7
notification_options w,u,c,r
contact_groups ywgcsz
}

define service{
host_name 192.168.1.102
service_description check-load //监控CPU负载
check_command check_nrpe!check_load //!为分隔符,表示使用两个插件

max_check_attempts 3
normal_check_interval 2
retry_check_interval 2
check_period 24x7
notification_interval 10
notification_period 24x7
notification_options w,u,c,r
contact_groups ywgcsz
}

⑥修改/usr/local/nagios/etc/cgi.cfg
将use_authentication=1修改为0即可

1
2
[root@centos1 etc]# vim /usr/local/nagios/etc/cgi.cfg
use_authentication=0

⑦到此需要对nagios作语法检测(如有错,会提示相应的文件、相应的行),确认无误后启动Nagios服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@centos1 etc]# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg 
Checking objects...
Checked 11 services.
Checked 2 hosts.
Checked 2 host groups.
Checked 0 service groups.
Checked 2 contacts.
Checked 2 contact groups.
Checked 25 commands.
Checked 5 time periods.
Checked 0 host escalations.
Checked 0 service escalations.
Checking for circular paths...
Checked 2 hosts
Checked 0 service dependencies
Checked 0 host dependencies
Checked 5 timeperiods
Checking global event handlers...
Checking obsessive compulsive processor commands...
Checking misc settings...

Total Warnings: 0
Total Errors: 0
Things look okay - No serious problems were detected during the pre-flight check
1
2
3
[root@centos1 ~]# service nagios start
nagios is stopped
Starting nagios: [ OK ]

4、配置Nagios被监控端

到此我们需要回到被监控的服务器上安装Nagios插件
①安装所需依赖包并创建运行用户

1
2
[root@centos2 ~]# yum -y install openssl openssl-devel
[root@centos2 ~]# useradd nagios -s /sbin/nologin

②编译安装nagios-plugins

1
2
3
4
5
[root@centos2 ~]# tar zxf nagios-plugins-1.5.tar.gz 
[root@centos2 ~]# cd nagios-plugins-1.5
[root@centos2 nagios-plugins-1.5]# ./configure --prefix=/usr/local/nagios
[root@centos2 nagios-plugins-1.5]# make && make install
[root@centos2 nagios-plugins-1.5]# chown -R nagios:nagios /usr/local/nagios/

③编译安装nrpe

1
2
3
4
5
6
7
8
9
[root@centos2 ~]# tar zxf nrpe-2.15.tar.gz 
[root@centos2 ~]# cd nagios-
bash: cd: nagios-: No such file or directory
[root@centos2 ~]# cd nrpe-2.15
[root@centos2 nrpe-2.15]# ./configure --prefix=/usr/local/nagios/
[root@centos2 nrpe-2.15]# make all
[root@centos2 nrpe-2.15]# make install-plugin
[root@centos2 nrpe-2.15]# make install-daemon
[root@centos2 nrpe-2.15]# make install-daemon-config

④添加监控服务器的IP地址

1
2
[root@centos2 nrpe-2.15]# vim /usr/local/nagios/etc/nrpe.cfg
81 allowed_hosts=127.0.0.1,192.168.1.101

⑤启动nrpe服务

1
2
3
4
[root@centos2 nrpe-2.15]# /usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg –d
[root@centos2 nrpe-2.15]# ss -anptu | grep nrpe
tcp LISTEN 0 5 :::5666 :::* users:(("nrpe",20499,5))
tcp LISTEN 0 5 *:5666 *:* users:(("nrpe",20499,4))

注:如果想重启,只有杀掉进程后再次启动

⑥添加防火墙策略

1
[root@centos2 nrpe-2.15]# iptables -I INPUT -p tcp --dport 5666 -j ACCEP

⑧在监控服务器上测试NRPE运行是否正常

1
2
3
4
[root@centos1 etc]# /usr/local/nagios/libexec/check_nrpe -H 192.168.1.102
connect to address 192.168.1.102 port 5666: No route to host
connect to host 192.168.1.102 port 5666: No route to host[root@centos1 etc]# /usr/local/nagios/libexec/check_nrpe -H 192.168.1.102
NRPE v2.15

⑨查看服务器的监控情况

image-20191116185609656

-------------本文结束感谢您的阅读-------------