前言
Nagios是一款很强大的开源监控平台,一直想去玩玩是什么个东西,但是由于很多原因没有能够去安装操作,这两天工作不算紧张,把这个监控平台搭建了起来,并简单得做了些监控,感受了一把它的魅力,前段时间在广州参加了关于xx产品xx的培训,一点感受:如果把开源的软件用Linux作代表,那么xx就相当于Windows了,虽然功能强大,但是设计相当臃肿,而且只准使用,基本不准自行改进,加上其价格,对于用户来说,不适合中小型企业使用,从技术人员来说,如果做这样的产品,技术道路将会越走越窄,没啥牛的。曾经崇拜过xx,但是今年这么多次的接触xx的产品,越来越对其不感兴趣,也不再崇拜!开源软件的流行是趋势,虽然现在是资本主义市场,不管以后开源软件的道路如何,但对于技术人员来说,从开源软件入手不会错,以后就算商业巨头公司把诸如Mysql此类牛X的产品全部收购了,我们走投无路需要做商业商品,我们也会对他们的产品理解程度将如庖丁解牛一般,用的游刃有余。
本文档还是具体的讲述如何搭建出完整的Nagios监控平台,Nagios貌似没有非常完整的官方文档,文档写的也比较简陋,网上的资料层出不穷,东凑西平,没有验证的东西也拿出来发表,所以笔者将自己在这两天做的步骤以及遇到的问题全部记录下来,以便以后真的遇上这样的需求,不至于手忙脚乱,虽然现在用不着,不过做人以及做工作都需要有忧患意识,学无止尽!生于忧患而死于安乐,不学无术啊!
操作参考:田逸老师的《互联网运营智慧--高可用可扩展网站技术实战》,这本书绝对是一本难得好书!
一.工作原理
图 0 Nagios监控原理图
在网上找到这张图片最能说明Nagios的工作原理了。这段语言也是用的人家的,真正的要去理解这个监控原理,通过自己的实践就会慢慢了解的。
Nagios软件需要安装在一台独立的服务器上运行,这台服务器称为监控中心,这个监控中心服务器可以采用Linux或者Unix操作系统。每一台需要监视的硬件主机或者服务都运行一个与监控中心服务器进行通信的Nagios软件后台程序。监控中心服务器根据读取配置文件中的指令与远程的守护程序进行通信,并且指示远程的守护程序进行必要的检查。
虽然nagios软件必须在Linux或者Unix操作系统上运行,但是,远程被监控的机器可以是任何能够与其进行通信的主机。根据远程主机返回的应答,Nagios将根据配置以合适的行动进行回应。接着,Nagios将通过本地的机器进行测试。如果检查返回的值不正确,Nagios将通过一种或者多种方式报警。这也是根据事先的配置而采取的行动。
二.安装准备
1.安装说明:该平台的搭建主要安装组件:
Apache : web服务器
PHP :从nagios3.0之后需要PHP支持
Nagios :Nagios核心服务
Nagios-plugin:Nagios插件,提供真正服务
NRPE :远程主机监控插件
2. 系统环境
操作系统:CentOS6.2 64bit
内存: 1G
系统相关前期配置:
(1)设置主机名
1
2
3
4
5
|
[root@nagios ~]
# more /etc/sysconfig/network
NETWORKING=
yes
HOSTNAME=nagios.clovem.com
[root@nagios ~]
# more /etc/hosts |grep 192.168.3.103
192.168.3.103 nagios.clovem.com
|
(1)设置网络
1
2
3
4
5
6
7
8
|
[root@nagios ~]
# more /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=
"eth0"
HWADDR=
"E2:13:79:41:B4:50"
NM_CONTROLLED=
"yes"
ONBOOT=
"yes"
IPADDR=192.168.3.103
NETMASK=255.255.255.0
GATEWAY=192.168.3.1
|
(2)设置yum源:此处设置的为HTTP源,也可以设置为本地或者FTP等其他源路径
1
2
3
4
5
6
|
[root@nagios ~]
# more/etc/yum.repos.d/CentOS-Base.repo
[core]
name=centos
baseurl=http:
//192
.168.3.12
/centos6
.2
enabled=1
gpgcheck=0
|
[root@nagios~]# yum clean all ; yum list //清空之前源信息,列出新的软件列表
(3)关闭防火墙
1
2
3
4
5
|
[root@nagios ~]
# serviceiptables stop //停止防火墙服务
iptables: Flushing firewall rules: [ OK ]
iptables: Setting chains to policy ACCEPT:filter [ OK ]
iptables: Unloading modules: [ OK ]
[root@nagios ~]
# chkconfigiptables off //设置iptables开机不启动
|
(4)设置selinux模式为disabled
1
2
3
4
5
|
[root@nagios ~]
# getenforce //查看当前selinux状态为:Enforcing
Enforcing
[root@nagios ~]
# setenforce 0 //临时设置selinux状态关闭
[root@nagios ~]
# getenforce
Permissive
|
为了成功搭建平台,建议修改配置文件关闭selinux服务
1
2
3
4
5
|
[root@nagios ~]
# cat/etc/selinux/config |grep Enforcing |grep -v '^#'
SELINUX=Enforcing
[root@nagios~]
# sed -i 's/Enforcing/disabled/g'/etc/selinux/config
[root@nagios ~]
# cat/etc/selinux/config |grep disabled |grep -v '^#'
SELINUX=disabled
|
3. 安装过程中需要安装很多操作系统环境软件,如gcc等等,其中gd-devel包在本地镜像文件中不存在,我们可以从网络上面进行下载,也可以直接使用此处提供的软件包
三.平台搭建
1.安装系统依赖包
1
2
3
4
|
[root@nagios ~]
# yum install gcc gcc-c++ makeperl openssh-clients \
libtermcap-devel openssl-devel mysql-devel –y
[root@nagios ~]
#yum install gdgd-devel-2.0.35-10.el6.x86_64.rpm \
zlib zlib-devel libjpeg libjpeg-devel libpnglibpng-devel –y
|
##说明:以上的所有依赖包都需要安装,不然在后面的操作中会遇到一些列的麻烦,一些问题将会在问题集锦中列出,以便解决一些常见问题。其中gd-devel-2.0.35-10.el6.x86_64.rpm这个软件包我们之前提到了,本地镜像文件中没有提供此类安装包,故下载进行安装,由于跟该软件包相关的依赖关系很多,通过yum install安装来解决依赖性。
2.安装配置Apache
软件包列表:
apr-1.4.6.tar.gz
apr-util-1.4.1.tar.gz
pcre-8.20.tar.bz2
httpd-2.4.2.tar.gz
【1】安装Apache源码包
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
|
[root@nagios~]
# tar zxvf apr-1.4.6.tar.gz
[root@nagios ~]
#cd apr-1.4.6
[root@nagios~]
#./configure --prefix=/usr/local/apr ;make ; make install
[root@nagios~]
#cd ..
[root@nagios~]
#rm -rf apr-1.4.6
[root@nagios~]
#tar zxvf apr-util-1.4.1.tar.gz
[root@nagios~]
#cd apr-util-1.4.1
[root@nagios~]
# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/
[root@nagios~]
#make ; make install
[root@nagios~]
#cd ..
[root@nagios~]
#rm -rf apr-util-1.4.1
[root@nagios~]
#tar jxvf pcre-8.20.tar.bz2
[root@nagios~]
#cd pcre-8.20
[root@nagios~]
#./configure --prefix=/usr/local/pcre ;make ;make install
[root@nagios~]
#cd ..
[root@nagios~]
#rm -rf pcre-8.20
[root@nagios~]
#tar zxvf httpd-2.4.2.tar.gz
[root@nagios~]
#cd httpd-2.4.2
[root@nagios ~]
#./configure \
--prefix=
/usr/local/apache
--with-apr=
/usr/local/apr
\
--with-apr-util=
/usr/local/apr-util/--with-pcre
=
/usr/local/pcre/
\
--
enable
-so --
enable
-rewrite--with-mpm=worker
[root@nagios~]
#make ; make install
[root@nagios~]
#cd ..
[root@nagios~]
#rm -rf httpd-2.4.2
|
【2】配置Apache
至此,Apache以及其依赖包已经全部通过源码包安装完成,接下来需要对配置文件做小小的配置,注意这个配置虽然非常简单,但是非常重要,因为如果使用yum install http之类的操作安装Apache的话是不存在这个问题的。那就是将Apache支持的CGI模块功能开启下来,否则在后期监控界面中点击所有的CGI文件,都会提示下载,而不是显示其功能。
1
2
|
[root@nagios ~]
# more/usr/local/apache/conf/httpd.conf |grep mod_cgid
#LoadModulecgid_module modules/mod_cgid.so
|
默认情况下面,Apache是关闭该模块功能的,将其注释去掉即可,也可以通过sed操作。
1
|
[root@nagios ~]
#sed -i '/mod_cgid.so/a\ LoadModule cgid_module modules/mod_cgid.so' /usr/local/apache/conf/httpd.conf
|
其他的操作在PHP安装完成之后再进行相关配置。
3.安装配置PHP
软件列表:
libxml2-2.6.30.tar.gz
php-5.4.1.tar.bz2
【1】安装php源码包
1
2
3
4
5
6
7
8
9
10
|
[root@nagios ~]
#tar zxvf libxml2-2.6.30.tar.gz
[root@nagios ~]
#cd libxml2-2.6.30;./configure --prefix=/usr/local/libxml2
[root@nagios ~]
#make ; makeinstall
[root@nagios ~]
#cd ..
[root@nagios ~]
# rm -rf libxml2-2.6.30
[root@nagios ~]
#tar jxvf php-5.4.1.tar.bz2
[root@nagios ~]
#cd php-5.4.1
[root@nagios ~]
#./configure --prefix=/usr/local/php \
--with-apxs2=
/usr/local/apache/bin/apxs--with-libxml-dir
=
/usr/local/libxml2
;
[root@nagios ~]
#make ; makeinstall
|
【2】整合PHP和APACHE
//将php的配置文件拷贝至安装目录
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
[root@nagios ~]
#cpphp.ini-production /usr/local/php/lib/php.ini
[root@nagios ~]
#cd .. ;rm -rfphp-5.4.1
//
添加php页面支持
[root@nagios ~]
#sed -i \
'
/application
\
/x-compress
.Z
/a
\AddType application
/x-httpd-php
.php'
/usr/local/apache/conf/httpd
.conf
[root@nagios ~]
#sed -i \
's/index.html/index.html\index.php/g'
/usr/local/apache/conf/httpd
.conf
//
将apache管理用户改为nagios
[root@nagios ~]
#sed -i \
's/User daemon/Usernagios/g'
/usr/local/apache/conf/httpd
.conf
//
将apache管理用户组改为nagios
[root@nagios ~]
#sed -i \
's/Group daemon/Groupnagios/g'
/usr/local/apache/conf/httpd
.conf
|
4.安装Nagios核心服务
软件包列表:nagios-3.4.1.tar.gz
【1】安装Nagios核心
1
2
3
4
5
6
|
[root@nagiosnagios]
#useradd nogios
[root@nagios]
# tar zxvfnagios-3.4.1.tar.gz
[root@nagios]
#cd nagios
[root@nagios]
#./configure --prefix=/usr/local/nagios \
--with-nagios-user=nagios--with-nagios-group=nagios \
--with-gd-lib=
/usr/lib--with-gd-inc
=
/usr/include/
|
//编译、安装、安装初始化命令、生成配置文件
1
|
[root@nagios nagios]
# make all ; make install ;make install-init ; make install-commandmode ; make install-config
|
##说明:因为nagios核心服务有命令生成与httpd.conf结合的配置文件,但是默认生成目录为/etc/httpd/conf.d/中,所以先创建该目录
1
|
[root@nagios nagios]
# mkdir-p /etc/httpd/conf.d/
|
//通过命令生成配置文件
1
2
|
[root@nagios nagios]
# makeinstall-webconf
[root@nagios nagios]
#cd ..;rm –rf nagios
|
【2】配置Apache文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
[root@nagios ~]
# more/etc/httpd/conf.d/nagios.conf |grep -v'^#' |grep -v '^$'
ScriptAlias
/nagios/cgi-bin
"/usr/local/nagios/sbin"
<Directory
"/usr/local/nagios/sbin"
>
Options ExecCGI
AllowOverride None
Order allow,deny
Allow from all
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"
>
Options None
AllowOverride None
Order allow,deny
Allow from all
AuthName
"Nagios Access"
AuthType Basic
AuthUserFile
/usr/local/nagios/etc/htpasswd
.
users
Require valid-user
<
/Directory
>
|
//将配置文件追加至apache的配置文件
1
2
|
[root@nagios ~]
# cat/etc/httpd/conf.d/nagios.conf \
>>
/usr/local/apache/conf/httpd
.conf
|
//生成验证用户
1
2
|
[root@nagios ~]
# /usr/local/apache/bin/htpasswd\
-c
/usr/local/nagios/etc/htpasswd
.usersnagiosadmin
|
5.安装Nagios插件
软件列表:nagios-plugins-1.4.15.tar.gz
【1】安装Nagios-Plugin
1
2
3
4
5
|
[root@nagios ~]
# tar zxvf nagios-plugins-1.4.15.tar.gz
[root@nagios ~]
# cdnagios-plugins-1.4.15
[root@nagios ~]
# ./configure--prefix=/usr/local/nagios/
[root@nagios ~]
# make ; makeinstall;
[root@nagios ~]
#cd .. ; rm-rf nagios-plugins-1.4.15
|
//检查插件是否安装成功
1
|
[root@nagios ~]
# ls/usr/local/nagios/libexec/ |wc –l
|
【2】启动Apache于Nagios服务
//检查Apache语法,启动Apache
1
2
3
|
[root@nagios ~]
#/usr/local/apache/bin/apachectl -t
Syntax OK
[root@nagios ~]
#/usr/local/apache/bin/apachectl start
|
//检查配置文件并启动Nagios
1
2
3
4
5
|
[root@nagios ~]
# chown -R nagios:nagios /usr/local/nagios/
[root@nagios ~]
#/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
[root@nagios ~]
#servicenagios start
[root@nagios ~]
# ps -ef |grep nagios
nagios 1881 1 0 16:38 ? 00:00:08
/usr/local/nagios/bin/nagios
-d
/usr/local/nagios//etc/nagios
.cfg
|
通过浏览器访问:http://192.168.3.103/nagios/
图1 验证用户
图2 Nagios 界面
图3 Localhost状态
进入Web终端,可以点击不同条目进行相关信息的查看。
四.监控本地服务
1.安装Sendmail
[root@nagios~]# yum install sendmail mailx –y
//测试发送邮件
1
2
3
4
|
[root@nagios ~]
# mail -s "clovem test sendmail" clovem.feng@gmail.com
hello ,this is a
test
email from nagios server!
.
EOT
|
图4 邮件验证成功
2.修改配置文件
【1】主配置文件nagios.cfg ,红色加粗部分为修改部分
[root@nagios~]# cat /usr/local/nagios/etc/nagios.cfg |grep -v '^#' |grep -v '^$'
将localhost.cfg的那行注释掉,不使用localhost.cfg文件
………………………………………
1
2
3
4
5
|
cfg_file=
/usr/local/nagios/etc/hosts
.cfg
cfg_file=
/usr/local/nagios/etc/hostgroups
.cfg
cfg_file=
/usr/local/nagios/etc/contacts
.cfg
cfg_file=
/usr/local/nagios/etc/contactgroups
.cfg
cfg_file=
/usr/local/nagios/etc/services
.cfg
|
…………………………………………
【2】修改配置文件cgi.cfg,红色加粗部分为需要修改部分
[root@nagios~]# cat /usr/local/nagios/etc/cgi.cfg |grep -v '^#' |grep -v '^$'
………………………………
1
2
3
4
5
6
7
|
authorized_for_system_information=nagiosadmin
authorized_for_configuration_information=nagiosadmin
authorized_for_system_commands=nagiosadmin
authorized_for_all_services=nagiosadmin
authorized_for_all_hosts=nagiosadmin
authorized_for_all_service_commands=nagiosadmin
authorized_for_all_host_commands=nagiosadmin
|
……………………………………..
在该文件中添加验证用户,nagiosadmin,该用户即上文定义的用户,用于在浏览器中的Nagios服务。
【3】修改command.cfg(/usr/local/nagios/etc/objects/commands.cfg)文件,红色加粗部分为需要修改部分
(1)修改notify-host-by-email ->host-notify-by-email
(2)修改notify-service-by-email ->service-notify-by-email
(3)添加如下内容:
1
2
3
4
|
definecommand {
command_name check_nrpe
command_line /$USER1$
/check_nrpe
-H$HOSTADDRESS$ -c $ARG1$
}
|
【4】主机配置文件hosts.cfg
1
2
3
4
5
6
7
8
9
10
11
12
|
[root@nagios ~]
# more /usr/local/nagios/etc/hosts.cfg
define host {
host_name nagios-server
alias
nagios server monitor
address 192.168.3.103
contact_groups admingroup
check_commandcheck-host-alive
max_check_attempts 5
notification_interval 10
notification_period 24x7
notification_options d,u,r
}
|
【5】主机组配置文件hostgroup-cfg
1
2
3
4
5
6
|
[root@nagios ~]
# more /usr/local/nagios/etc/hostgroups.cfg
define hostgroup {
hostgroup_name admin-servers
alias
admin server
members nagios-server
}
|
【6】联系人配置文件contacts.cfg
1
2
3
4
5
6
7
8
9
10
11
12
|
[root@nagios ~]
# more /usr/local/nagios/etc/contacts.cfg
define contact {
contact_name nagiosadmin
alias
system admin
service_notification_period24x7
host_notification_period 24x7
service_notification_optionsw,u,c,r
host_notification_optionsd,u,r
service_notification_commandsservice-notify-by-email
host_notification_commandshost-notify-by-email
emailfengyingcong1991@163.com
}
|
【7】联系组配置文件contactgroups.cfg
1
2
3
4
5
6
|
[root@nagios ~]
# more /usr/local/nagios/etc/contactgroups.cfg
define contactgroup {
contactgroup_name admingroup
alias
system admin group
members nagiosadmin
}
|
【8】服务配置文件services.cfg
说明:
1.主机名 host_name,必须是主机配置文件hosts.cfg中定义的主机。
2.检查用的命令 check_command,在命令配置文件中定义或在nrpe配置文件中有定义。
3.最大重试次数 max_check_attempts 一般设置为3-4次比较好,这样不会因为网络闪断片刻而发生误报。
4.检查间隔和重试检查间隔的单位是分钟。
5.通知间隔指探测到故障以后,每隔多少时间发送一次报警信息。它的单位是分钟。
6.通知选项跟服务定义配置文件相同。
7.联系组contact_groups由配置文件contactgroup.cfg定义。
8.检查主机资源需要安装和配置nrpe,这个过程在后面完成
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
define service {
host_name nagios-server
service_description check-host-alive
check_period 24x7
max_check_attempts 4
normal_check_interval 3
retry_check_interval 2
contact_groups admingroup
notification_interval 10
notification_period 24x7
notification_options w,u,c,r
check_command check-host-alive
}
define service {
host_name nagios-server
service_description check_tcp 80
check_period 24x7
max_check_attempts 4
normal_check_interval 3
retry_check_interval 2
contact_groups admingroup
notification_interval 10
notification_period 24x7
notification_options w,u,c,r
check_command check_tcp!80
}
define service {
host_name nagios-server
service_description check-disk
check_period 24x7
max_check_attempts 4
normal_check_interval 3
retry_check_interval 2
contact_groups admingroup
notification_interval 10
notification_period 24x7
notification_options w,u,c,r
check_command check_nrpe!check_df
}
define service {
host_name nagios-server
service_description check-load
check_period 24x7
max_check_attempts 4
normal_check_interval 3
retry_check_interval 2
contact_groups admingroup
notification_interval 10
notification_period 24x7
notification_options w,u,c,r
check_commandcheck_nrpe!check_load
}
define service {
host_name nagios-server
service_description total_procs
check_period 24x7
max_check_attempts 4
normal_check_interval 3
retry_check_interval 2
contact_groups admingroup
notification_interval 10
notification_period 24x7
notification_options w,u,c,r
check_commandcheck_nrpe!check_total_procs
}
define service {
host_name nagios-server
service_description ip_conn
check_period 24x7
max_check_attempts 4
normal_check_interval 3
retry_check_interval 2
contact_groups admingroup
notification_interval 10
notification_period 24x7
notification_options w,u,c,r
check_commandcheck_nrpe!check_ips
}
defineservice {
host_name nagios-server,mysql-master
service_description ip_conn
check_period 24x7
max_check_attempts 4
normal_check_interval 3
retry_check_interval 2
contact_groups admingroup
notification_interval 10
notification_period 24x7
notification_options w,u,c,r
check_commandcheck_nrpe!check_ips
}
define service{
host_name nagios-server
service_description check-
users
check_period 24x7
max_check_attempts 4
normal_check_interval 3
retry_check_interval 2
contact_groups admingroup
notification_interval 10
notification_period 24x7
notification_options w,u,c,r
check_commandcheck_nrpe!check_users
}
|
3.安装NRPE
软件包列表:nrpe-2.13.tar.gz
【1】安装nrpe源码包
1
2
3
4
5
|
[root@nagios ~]
# tar zxvfnrpe-2.13
[root@nagios~]
# ./configure--with-nagios-user=nagios --with-nagios-group=nagios
[root@nagios~]
#make ; makeinstall
[root@nagios ~]
# ll/usr/local/nagios/libexec/check_nrpe
-rwxrwxr-x. 1 nagios nagios75436 Jun 14 13:57
/usr/local/nagios/libexec/check_nrpe
|
【2】配置NRPE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
[root@nagios ~]
# cpnagios/nagios-packages/nrpe-2.13/sample-config/nrpe.cfg/usr/local/nagios/etc/nrpe.cfg
[root@nagios ~]
# more/usr/local/nagios/etc/nrpe.cfg |grep -v'^#' |grep -v '^$'
……………………………
server_address=192.168.3.103
nrpe_user=nagios
nrpe_group=nagios
allowed_hosts=127.0.0.1,192.168.3.103
………………………….
command
[check_users]=
/usr/local/nagios/libexec/check_users-w
5 -c 10
command
[check_load]=
/usr/local/nagios/libexec/check_load-w
15,10,5 -c 30,25,20
#command[check_hda1]=/usr/local/nrpe/libexec/check_disk-w 20 -c 10 -p /dev/hda1
command
[check_df]=
/usr/local/nagios/libexec/check_disk-w
20 -c 10
command
[check_zombie_procs]=
/usr/local/nagios/libexec/check_procs-w
5 -c 10 -s Z
command
[check_total_procs]=
/usr/local/nagios/libexec/check_procs-w
150 -c 200
command
[check_ips]=
/usr/local/nagios/libexec/ip_conn
.sh 8000 10000
|
如下为 ip_conn.sh内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
[root@nagios ~]
# more /usr/local/nagios/libexec/ip_conn.sh
#!/bin/sh
ip_conns=`
netstat
-an |
grep
tcp |
grep
EST |
wc
-l`
if
[ $ip_conns -lt $1 ]
then
echo
"OK -connect counts is $ip_conns"
exit
0
fi
if
[ $ip_conns -gt $1 -a $ip_conns -lt $2 ]
then
echo
"Warning -connect counts is $ip_conns"
exit
1
fi
if
[ $ip_conns -gt $2 ]
then
echo
"Critical -connectcounts is $ip_conns"
exit
2
fi
|
【3】启动NRPE
1
2
3
4
5
6
7
8
9
|
[root@nagios ~]
# /usr/local/nagios/bin/nrpe-c /usr/local/nagios/etc/nrpe.cfg –d
[root@nagios ~]
# ps -ef |grepnrpe |grep –v grep
nagios 991 1 0 15:59 ? 00:00:01
/usr/local/nagios/bin/nrpe
-c
/usr/local/nagios/etc/nrpe
.cfg –d
[root@nagios ~]
# netstat -nltup |grep 5666
tcp 0 0 192.168.3.103:5666 0.0.0.0:* LISTEN 991
/nrpe
[root@nagios ~]
# tail -f/var/log/messages
Jun 14 22:25:13 nagiosnrpe[8723]: Starting up daemon
Jun 14 22:25:13 nagiosnrpe[8723]: Listening
for
connections on port 5666
Jun 14 22:25:13 nagiosnrpe[8723]: Allowing connections from: 127.0.0.1,192.168.3.103
|
【4】检查NRPE
1
2
3
4
5
6
7
8
9
10
11
12
|
[root@nagios ~]
#/usr/local/nagios/libexec/check_nrpe -H192.168.3.103
NRPE v2.13
[root@nagios ~]
#/usr/local/nagios/libexec/check_nrpe -H192.168.3.103 -c check_df
DISK OK -
free
space: / 15463MB (92% inode=95%);
/dev/shm
496 MB (100% inode=99%);
/boot
428 MB (93%inode=99%);| /=1316MB;17657;17667;0;17677
/dev/shm
=0MB;476;486;0;496
/boot
=30MB;464;474;0;484
[root@nagios ~]
#/usr/local/nagios/libexec/check_nrpe -H192.168.3.103 -c check_load
OK - load average: 0.00,0.00, 0.00|load1=0.000;15.000;30.000;0; load5=0.000;10.000;25.000;0; load15=0.000;5.000;20.000;0;
[root@nagios ~]
#/usr/local/nagios/libexec/check_nrpe -H192.168.3.103 -c check_users
USERS OK - 1
users
currentlylogged
in
|
users
=1;5;10;0
[root@nagios ~]
#/usr/local/nagios/libexec/check_nrpe -H192.168.3.103 -c check_total_procs
PROCS OK: 73 processes
[root@nagios ~]
#/usr/local/nagios/libexec/check_nrpe -H192.168.3.103 -c check_ips
OK- connect counts is 4
|
【5】浏览器界面查看
图5 查看监控状态OK
【6】测试故障邮件通知
将系统设置为禁止被Ping通
[root@nagios~]# echo "1" >/proc/sys/net/ipv4/icmp_echo_ignore_all
查看网页界面,check_host_alive状态显示为:Critical
图6 故障出现,主机不能ping通
查看邮件:邮件描述了通知类型以及故障原因。
图7 收到故障邮件
将Ping功能恢复,再次查看监控状态:发现163邮件立马收到故障恢复邮件,由于页面的刷新时间没有达到,web界面上面该主机该服务状态仍然显示为Critical
图8 故障恢复
等待片刻,web界面该状态同样恢复为OK状态
图9 web界面监控OK
五.远程主机添加
上述内容完成了Nagios对本地机器相关服务的监控,下面将对一台新加入的Linux系统的Mysql服务器[ip=192.168.4.100]进行状态监控,除了以上的几点监控,另外加入对mysql服务的监控。
在新加入的系统上面我们只需要安装NRPE,并且进行简单的配置即可。在服务器器端的操作同上述相似。
【1】远程主机上面安装NRPE服务,此处指定安装路径/usr/local/nrpe,默认安装为/usr/local/nagios目录
1
2
3
4
5
6
7
8
9
|
[root@mysqlmaster~]
# useradd nagios
[root@mysqlmaster~]
# tar zxvfnrpe-2.13
[root@mysqlmaster~]
#./configure –prefix=/usr./local/nrpe \
--with-nagios-user=nagios--with-nagios-group=nagios
[root@mysqlmaster~]
#make ;make install
[root@mysqlmaster~]
# ls/usr/local/nrpe/libexec/check_nrpe
/usr/local/nrpe/libexec/check_nrpe
[root@mysqlmaster~]
# ls/usr/local/nrpe/libexec/
check_disk check_load check_mysql check_nrpe check_users
|
从Nagios-Server上面将需要的所有插件全部拷贝至该目录下面,使用下面脚本也行。
1
2
3
4
5
6
7
8
9
|
[root@mysqlmaster ~]
# for i in disk load mysql users procs;\
do
scp
192.168.3.103:$sourcedir
/check_
$i $targetdir;
done
check_disk 100% 409KB 408.8KB
/s
00:00
check_load 100% 104KB 104.1KB
/s
00:00
check_mysql 100% 127KB 126.5KB
/s
00:00
check_users 100% 101KB 101.5KB
/s
00:00
check_procs 100% 387KB 387.4KB
/s
00:00
[root@mysqlmaster ~]
# scp 192.168.3.103:$sourcedir/ip_conn.sh $targetdir
ip_conn.sh 100% 327 0.3KB
/s
00:00
|
【2】远程主机修改nrpe.cfg文件
拷贝Nagios-Server主机上面的nrpe.cfg文件,修改server_address为:
server_address=192.168.4.100
将所有插件的路径从/usr/local/nagios/换成正确路径.此处为/usr/local/nrpe/即可
【3】远程主机上创建Mysql用户nagios
1
2
3
4
5
|
[root@mysqlmaster ~]
#mysql-uroot -p -e "create database nagdb;grant select on nagdb.* tonagios@'%'"
//
用插件检查配置
[root@mysqlmaster ~]
#/usr/local/nrpe/libexec/check_mysql \
-H 192.168.4.100 -unagios -dnagdb
Uptime: 70404 Threads: 2 Questions: 27806 Slow queries:0 Opens: 736 Flush tables: 1 Open tables: 10 Queries per second avg: 0.394
|
【4】在Nagios-Server上面的操作
//在Nagios-Server上面进行配置检查
1
2
3
|
[root@nagios ~]
#/usr/local/nagios/libexec/check_mysql \
-H 192.168.4.100 -unagios -dnagdb
Uptime: 70563 Threads: 2 Questions: 27810 Slow queries:0 Opens: 736 Flush tables: 1 Open tables: 10 Queries per second avg: 0.394
|
修改配置文件:
1.修改hosts.cfg,定义新主机: mysql-master
1
2
3
4
5
6
7
8
9
10
11
|
define host {
host_name mysql-master
alias
mysql master
address 192.168.4.100
contact_groups dbgroup
check_command check-host-alive
max_check_attempts 5
notification_interval 10
notification_period 24x7
notification_options d,u,r
}
|
2.修改hostgroup.cfg,加入新的主机组:db-servers
1
2
3
4
5
|
define hostgroup {
hostgroup_name db-servers
alias
database server
members mysql-master
}
|
3.修改contacts.cfg,加入新的联系人mysql-dbadmin
1
2
3
4
5
6
7
8
9
10
11
|
define contact {
contact_name mysql-dbadmin
alias
mysql db admin
service_notification_period 24x7
host_notification_period 24x7
service_notification_options w,u,c,r
host_notification_options d,u,r
service_notification_commandsservice-notify-by-email
host_notification_commands host-notify-by-email
email fengyingcong1991@163.com
}
|
4.修改contactgroup.cfg,加入新的联系组dbgroup
1
2
3
4
5
|
define contactgroup {
contactgroup_name dbgroup
alias
system database group
members mysql-dbadmin
}
|
5.修改services.cfg,加入对mysql的服务监控
1
2
3
4
5
6
7
8
9
10
11
12
13
|
define service {
host_name mysql-master
service_description check_mysql
check_period 24x7
max_check_attempts 4
normal_check_interval 3
retry_check_interval 2
contact_groups admingroup
notification_interval 10
notification_period 24x7
notification_options w,u,c,r
check_command check_mysql
}
|
在其他服务项的host_name 项后面添加mysql-master,用逗号隔开,如check_user服务
1
2
3
4
5
6
7
8
9
10
11
12
13
|
define service {
host_name nagios-server,mysql-master
service_description check-
users
check_period 24x7
max_check_attempts 4
normal_check_interval 3
retry_check_interval 2
contact_groups admingroup
notification_interval 10
notification_period 24x7
notification_options w,u,c,r
check_command check_nrpe!check_users
}
|
6.修改command.cfg,加入检查mysql的定义
1
2
3
4
5
|
[root@nagios ~]
# tail /usr/local/nagios/etc/objects/commands.cfg
define
command
{
command_name check_mysql
command_line $USER1$
/check_mysql
-H$HOSTADDRESS$ -u nagios -d nagdb
}
|
7.检查并启动Nagios
1
2
3
4
5
6
7
8
9
|
[root@nagios ~]
#/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
………………
Total Warnings: 0
Total Errors: 0
……………
[root@nagios ~]
# service nagios restart
Running configuration check...
done
.
Stopping nagios:
done
.
Startingnagios:
done
.
|
8.增加Apahce验证帐号mysql-dbadmin(此处的帐号务必跟contacts.cfg中定义的一致)
1
|
[root@nagios ~]
#/usr/local/apache/bin/htpasswd /usr/local/nagios/etc/htpasswd.users mysql-dbadmin
|
9.清空浏览器缓存,登录web界面http://192.168.3.103/nagios
图10 通过mysql-dbadmin登录管理界面
图11 mysql-master主机状态
##其中check_tcp_80状态为Critical,因为Mysql服务器上面没有安装web服务器,没有开启80端口而已。将该服务取消即可。在该文件中将host_name后面的mysql-master去掉即可。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
define service {
host_name nagios-server
service_description check_tcp 80
check_period 24x7
max_check_attempts 4
normal_check_interval 3
retry_check_interval 2
contact_groups admingroup
notification_interval 10
notification_period 24x7
notification_options w,u,c,r
check_command check_tcp!80
}
//
重启nagios服务
[root@nagios ~]
# service nagios restart
Running configuration check...
done
.
Stopping nagios:
done
.
Starting nagios:
done
.
|
图12 mysql-master监控OK
10.通过cgi.cfg中定义的系统管理用户nagiosadmin登录界面可以查看所有的主机状态。
图 13 通过nagioadmin进行监控查看
至此搭建平台,简单完成linux系统的相关监控,如果需要手机可以接受邮件,也同样建议使用139邮箱进行服务状态的接受,可以直接转发到手机信息,非常方便,测试了一下几款邮箱的接受速率,163排名第一,基本上服务一旦出现问题,立马收到邮件,其他的邮箱都有不同程度的接受延迟现象,如果是特别重要的监控,还是采用短信直接接受,不过好像要花钱来着,暂时不研究。
六.故障集锦
每次在自己摸索着做一件事情的时候总会遇到非常多的问题,我们总是首先想到百度,对于我们这行来说,百度一下,啥都没有,只有谷歌有点作用,但是很多时候来个服务器故障,不过很多问题确实可以找到答案,但是其实很多时候问题是需要自己思考解决的,这里列出几个问题,供以后参考。我就从自己搭建平台的流程开始整理
【1】无法访问Apache
安装完成Apache后不能够访问http://192.168.3.103/跟http://192.168.3.103/nagios
原因:iptables没有关闭
解决:关闭防火墙,service iptables stop即可访问。
【2】没有开启cgi功能
问题描述:进入监控界面之后,点击左侧的条目,提示下载cgi文件
图14 提示下载cgi文件
这个问题如果在安装http的时候,采取yuminstall http是不存在的,但是通过源码包安装就会存在。
原因:Apache支持cgi的模块功能没有开启
解决:将httpd.conf中的#LoadModulecgid_module modules/mod_cgid.so 这行注释去掉,重启apache即可。
【3】无法读取信息
Error: Could not read host and service status information!
图15 不能够读取信息
原因:nagios服务没有开启
解决:service nagios start 即可
【4】启动nagios失败
[root@nagios~]# service nagios start
Starting nagios:This accountis currently not available.
done.
原因:nagios不可用,在创建的时候,指定其shell为/sbin/nologin
解决:将其shell改为/bin/bash,再次启动。
nagios:x:500:500::/home/nagios:/bin/bash
【5】缺少cgi文件
问题描述:缺少statusmap.cgi trends.cgi等文件
图16 statusmap.cgi缺失
原因:系统gd ,gd-devel没有安装
解决:
1.yum install gd gd-devel –y
2.进入nagios核心目录
执行:./configure --with-gd-lib=/usr/lib--with-gd-inc=/usr/include/
然后执行:./configure --prefix=/usr/local/nagios \
--with-nagios-user=nagios--with-nagios-group=nagios \
最后执行:make all ; make install
再次查看/usr/local/nagios/sbin中就会包含这几个插件了。
【6】缺少perl,openssl组件
安装nrpe执行:./configure出现
………………….
/configure: line 7946: perl: command not found
checking for SSL headers... configure: error: Cannot find sslheaders
………………………………..
原因:没有安装perl跟openssl-devel
解决:安装即可
yum install perl -y
yum install openssl openssl-devel –y
【7】提示缺少插件
Return code of 127 is out ofbounds - plugin may be missing)
图17 所有用到check_nrpe插件的服务全部监控失败
原因:这个原因主要是系统没有检测到check_nrpe这个插件。
解决:从配置文件入手,去寻找定义了check_nrpe的所有内容,因为很多时候在本地测试的时候如:
/usr/local/nagios/libexec/check_nrpe–H 192.168.3.103 –c check_df 等一系列命令都是OK的,但是到了web界面就是不行,说明功能都是没问题的,问题出在系统调用配置文件的时候没有找到check_nrpe这个路径,在nagios命令检查配置文件的时候也没有出现问题,但是笔者的问题恰恰出在commands.cfg文件中,将宏$USER1$写错为$USER$,这个宏用于定义路径,所以check_nrpe在配置文件里面的路径错了,系统自然提醒找不到了,而这个问题在配置文件检查的时候是不会提醒的,所以遇到这个问题的时候,如果本地测试也是通过的,请到配置文件里面查找问题,跟网络上面说的什么权限没有什么关系,有人说chmod 777 –R /usr/loca/nagios这样的做法本身在安全上面来说就是不可取的。所以从本人的这次错误来看,大部分问题出在命令的路径没有配置正确。把check_nrpe路径修改正确之后,重启nagios服务即可。
图18 逐一恢复服务
图19 故障失败-恢复的邮件列表
图20 服务全部恢复正常
【8】NRPE: Unable to read output
图21 NRPE: Unable to read output
原因:该命令在commands.cfg中进行了定义,但是缺少相关插件,如此处的check_procs在插件目录中不存在。
解决:将该插件从nagios-server的插件目录中拷贝来即可。
【9】缺少check_mysql插件
问题描述:在监控mysql服务器的时候,需要用到check_mysql,但是发现这个插件在插件目录中不存在
原因:系统在安装nagios插件之前,没有安装mysql-devel开发包
解决:
1.yuminstall mysql-devel –y
2.回到nagios插件目录中,重新执行配置,编译,安装操作,执行完成之后即可发现该插件会出现。
【10】验证用户无法查看主机状态
问题描述:
添加了apache用户之后,登录之后没有权限查看监控主机的状态
图22 无权限查看监控信息
这个问题一般是由这个原因造成:
联系人配置文件contacts.cfg中的联系人跟apache验证用户不一致,也就是说如果创建的apache验证用户是任意的,登录进去之后都会看到这个界面,如果验证用户跟联系人一致,就可以看到自己可以监控的机器相关信息。
这个问题的解决方法绝对不是网上转载来转载去的将cgi.cfg文件中的
user_authentication=1改为user_authentication=0 ,这绝对是瞎说,误导人,想想都不可能通过这种方法进行问题的解决,这种解决方法就像前面所说的不管三七二十一,把关于nagios的所有文件全部设置为nagios用户跟用户组,甚至设置为777权限,胡扯!如果这么改了,就不能够进行用户访问控制了,所有的apache验证用户都可以查看所有主机的信息,这绝对是不对的!
如果需要将用户设置为全局管理员,可以将该联系人追加在cgi.cfg中的这几项后面,逗号隔开如
authorized_for_system_information=nagiosadmin,mysql-dbadmin
authorized_for_configuration_information=nagiosadmin
authorized_for_system_commands=nagiosadmin
authorized_for_all_services=nagiosadmin
authorized_for_all_hosts=nagiosadmin
authorized_for_all_service_commands=nagiosadmin
authorized_for_all_host_commands=nagiosadmin
总结语:至此,Nagios的相关问题暂时告一段落,但是需要学习的东西还是很多很多的,把当前工作上面的问题解决之后还是会继续进行相关的学习,不管怎样,Nagios,我也玩了一把,。后期我会把公司的所有主机全部监控起来,也会把这个工具进行深入探讨的!