剖析开源监控Nagios安装故障
Nagios是一款功能强大、优秀的开源免费监控系统,主要由Nagios系统核心(Nagios Core)和众多的插件(例如:Nagios Plugins)组成。Nagios系统核心,包含核心监测引擎和一个基本的web界面;通过Nagios各种插件,实现其强大的监控功能。
Nagios的部署过程并不是十分的顺利,从最初的版本到目前的nagios-4.0.8版本。虽然部署过程相比之前变得越来越方便,可以说可以摘掉"难够死"的帽子了,但是对于初次部署的同行或者是不熟悉Linux的朋友,可以说安装的过程中还会遇到这样或那样的问题。本文主要介绍Nagios安装过程中可能遇到的问题和解决方法,由于篇幅的限制,本文只能作为您解决问题的参考,可能无法解决您的问题,那就感到十分抱歉。
一、基本环境介绍
本文中使用操作系统和软件版本如下表:
类型 |
版本 |
操作系统 |
Red Hat Enterprise Linux 6.5 x86_64 |
Nagios Core |
libgd-2.1.1.tar.gz nagios-4.0.8.tar.gz |
Nagios Plugins |
nagios-plugins-2.0.3.tar.gz |
Apache and PHP |
apr-1.5.1.tar.gz apr-util-1.5.4.tar.gz pcre-8.36.tar.gz httpd-2.4.10.tar.bz2 php-5.6.4.tar.gz |
二、安装过程的问题与解决方法
2.1 关于安装httpd的报错与解决
1、编译安装httpd,执行“configure(配置)”过程中,提示“ configure: error: APR not found. Please read the documentation”错误,如下图:
问题分析与解决方法:
从错误提示上可以看出是apr没有找到,首先想到的是apr这个软件包是否安装,执行rpm–q apr命令后发现RHEL6.5安装的是apr-1.3.9版本,但是为什么还提示没有安装?后来看了下configure脚本后,发现httpd-2.4版本依赖的apr版本要高于apr-1.4,所以下载安装高于1.4版本的apr,本文下载的是源码包1.5.1版本。
2、编译安装apr,执行“configure(配置)”过程中提示“configure: error: no acceptable C compiler found in $PATH”错误,如下图:
问题分析与解决方法:
从错误提示上可以看出是没有C编译器,使用rpm或yum命令安装Linux下的C编译器的软件包gcc,由于rpm软件包具有软件的依赖关系,而gcc依赖关系复杂,推荐使用yum install gcc -y 命令安装gcc。
3、编译安装httpd,执行“configure(配置)”过程中,提示“configure: error: APR-util not found. Please read the documentation.”错误,如下图:
问题分析与解决方法:
这个问题和第一个问题相似,不在分析其原因,直接下载源码apr-util-1.5.4安装。
4、编译安装apr-util,执行“configure(配置)”过程中提示“configure: error: APR could not be located. Please use the--with-apr option.”错误,如下图:
问题分析与解决方法:
按照错误提示显示,由于我们没有指定--with-apr选项导致,没有找到apr,使用--with-apr=/usr/local/apr指定apr的安装位置。具体命令为:./configure--prefix=/usr/local/apr-util --with-apr=/usr/local/apr。同理安装源码httpd的时候也需要指定apr和apr-util的位置,具体命令不清楚的话使用./configure –help|grep apr获取。
5、编译安装httpd,执行“configure(配置)”过程中,提示“configure: error: pcre-config for libpcre not found. PCRE isrequired and available from http://pcre.org/”错误,如下图:
问题原因与解决方法:
按照提示显示pcre的库文件没有找到,如果使用的是RPM软件包一般是-devel的包中包含的程序的库文件,安装pcre-devel这个软件包,我这里安装的是源码的pcre。安装后执行./configure –prefix=/usr/local/apache --with-apr=/usr/local/apr--with-apr-util=/usr/local/apr-util/ --with-pcre=/usr/local/pcre。
6、编译安装pcre,执行“configure(配置)”过程中,提示“configure:error: You need a C++ compiler for C++ support”错误,如下图:
问题原因与解决方法:
从错误提示上可以看出是没有C++编译器,使用rpm或yum命令安装Linux下的C++编译器的软件包gcc-c++,使用yum installgcc-c++ -y 命令安装gcc-c++。
总结:
1) 只要你明白Linux软件包具有依赖性关系,也就是我们要使用A 软件时,它会使用B 软件的某些文件(一般都是库文件),如果要使用A 软件,那么就必须要先安装B 软件。主要是由于开发人员为了加快和避免重复的撰写相同的代码,编写代码的过程中使用了“动态加载函数库”;导致了软件包的依赖关系。
2) 源码安装软件的步骤分为配置编译选项(configure)、编译(make)、安装(make install)几个关键步骤。configure 脚本可以使用一些选项指定编译时的选项,在执行完成后,会根据执行的选项和系统的配置生成一个编译规则文件Makefile,make则是将源代码按照编译规则文件生成二进制的可执行文件,make install则是将二进制文件拷贝到安装目录。
3) 掌握了Linux软件的源码安装方式和与计算机交互是安装软件的重点。说道这个想起了盲打,有的人盲打是看着显示器不看键盘,牛人的盲打则是看着键盘不看显示器。
2.2 关于Nagios的错误
1、安装Nagios后使用http://IP/nagios输入用户名和密码后显示“NagiosCore Not running”如下图所示:
问题原因与解决方法:
从错误提示上说Nagios Core核心没有运行,首先想到的是难道是忘记启动nagios服务了,使用ps –ef|grep nagios命令查看结果如下图:
结果表明nagios服务已经启动,查看了下Apache的访问日志,发现Apache使用了CGI,执行了/nagios/cgi-bin/statusjson.cgi?query=programstatus这个CGI脚本,忽然想到是不是Apache安装的过程中,没有启用CGI。于是有了下面的操作:
(1)重新编译安装Apache
1
2
3
4
5
|
# rm -rf /usr/local/apache # tar -zxf httpd-2.4.10.tar.gz # cd httpd-2.4.10 # ./configure --prefix=/usr/local/apache --with-apr=/usr/local/apr--with-apr-util=/usr/local/apr-util --with-pcre=/usr/local/pcre --enable-cgi --enable-so --enable-rewrite # make && make install |
(2)重新编译PHP
1
2
3
4
|
# tar -zxf php-5.6.4.tar.gz # cd php-5.6.4 # ./configure --prefix=/usr/local/php--with-apxs2=/usr/local/apache/bin/apxs # make && make install |
(3)配置Apache
1)修改运行Apache服务的用户为nagios,在Apache配置文件/usr/local/apache2/conf/httpd.conf找到:
1
2
|
User daemon Group daemon |
修改为:
1
2
|
User nagios Group nagcmd |
2)修改Apache默认索引页面,添加index.php,找到如下代码结果为:
1
2
3
|
< IfModule dir_module>
DirectoryIndex index.html index.php
</ IfModule >
|
3)在Apache配置文件中增加如下行
1
|
AddType application/x-httpd-php .php |
和
1
|
Include conf.d/*.conf |
4)创建conf.d目录:
1
|
# mkdir /usr/local/apache/conf.d |
5)配置Apache加载CGI模块:
找到
1
2
|
# LoadModulecgid_module modules/mod_cgid.so
# LoadModule cgi_module modules/mod_cgi.so
|
将注释#去掉
6)启动Apache服务,使得新的配置生效
1
|
# /usr/local/apache/bin/apachectl start |
2、登录Nagios后,点击“Map”和“Trends”显示“无法找到该网页,404未找到”,如下图:
问题原因与解决方法:
查看了下Apache的错误日志,提示:
1
2
|
AH02811:script not found or unable to stat: /usr/local/nagios/sbin/statusmap.cgi,referer: http://10.1.1.188/nagios/side.php |
按照提示查看/usr/local/nagios/sbin的内容:
1
2
3
4
5
|
# ls /usr/local/nagios/sbin/ archivejson.cgi extinfo.cgi outages.cgi statuswml.cgi avail.cgi history.cgi showlog.cgi statuswrl.cgi cmd.cgi notifications.cgi status.cgi summary.cgi config.cgi objectjson.cgi statusjson.cgi tac.cgi |
这下真没有任何思路了,搜了一下,解决方法让先安装gd、gd-devel、libpng、libpng-devel、libjpeg、libjpeg-devel、zlib、zlib-devel这些软件包,原来在安装Nagios之前没有安装gd库导致,由于使用的是RHEL6.5 X86_64的操作系统,没有gd-devel这个包,所以使用源码gd编译安装,具体步骤如下:
1)安装nagios依赖软件包
1
2
3
4
5
|
# yum install libpng-devel libjpeg-turbo-devel freetype-devel libXpm-devel # tar -zxf libgd-2.1.1.tar.gz # cd libgd-2.1.1 # ./configure --prefix=/usr/local/gd # make && makeinstall |
2)修改/etc/ld.so.conf 文件,将gd库文件所在的路径添加到该文件中
1
2
3
4
|
# cat /etc/ld.so.conf include ld.so.conf.d/*.conf /usr/local/gd/lib # ldconfig -v |
3)创建运行nagios所需要的用户和组
1
2
3
|
# useradd -m nagios -s /sbin/nologin # groupadd nagcmd # usermod -a -G nagcmd Nagios |
4)安装Nagios
1
2
3
4
5
6
7
8
9
|
# tar -zxf nagios-4.0.8.tar.gz # cd nagios-4.0.8 #./configure --prefix=/usr/local/nagios --with-command-group=nagcmd--with-nagios-group=nagcmd --with-httpd-conf=/usr/local/apache/conf.d--with-gd-lib=/usr/local/gd/lib --with-gd-inc=/usr/local/gd/include/ # make all # make install # make install-init # make install-commandmode # make install-config # make install-webconf |
5)为nagiosadmin用户配置Apache认证
1
|
# /usr/local/apache/bin/htpasswd -c/usr/local/nagios/etc/htpasswd.users nagiosadmin |
6)重新启动Apache服务,使得新的配置生效
1
|
# /usr/local/apache/bin/apachectl restart |
再次查看/usr/local/nagios/sbin目录的内容,发现statusmap.cgi 文件,该问题解决。
1
2
3
4
5
6
|
# ls /usr/local/nagios/sbin/ archivejson.cgi histogram.cgi showlog.cgi statuswrl.cgi avail.cgi history.cgi status.cgi summary.cgi cmd.cgi notifications.cgi statusjson.cgi tac.cgi config.cgi objectjson.cgi statusmap.cgi trends.cgi extinfo.cgi outages.cgi statuswml.cgi |
3.登录Nagios后,点击“Map”和“Trends”显示“
The server encountered an internal error or misconfiguration and wasunable to complete your request.”如下图:
1
2
3
4
5
|
[Sun Jun 14 03:44:17.607156 2015] [cgi:error] [pid 28815:tid 140550646785792] [client 10.1.1.205 :55742] AH01215: /usr/local/nagios/sbin/trends.cgi: error while loading shared libraries: libgd.so.3:
cannot open shared object file: No such file or directory: /usr/local/nagios/sbin/trends.cgi,
eferer: http://10.1.1.188/nagios/side.php
|
从错误可以看出没有找到libgd.so.3这个库文件,使用ls /usr/local/gd/lib查看明明有libgd.so.3这个库文件,为什么提示没有找到呢?
因为,在Linux系统中,默认动态函数库搜索路径为/usr/lib和/lib,而libgd.so.3这个文件的路径不在其搜索的范围,所以会有该提示。就是说在执行trends.cgi文件的时候,调用了libgd.so.3函数库文件中的函数,只要我们让它找到libgd.so.3函数库文件问题就能解决。
Linux系统通过两种方法来寻找函数库文件:
(1)通过缓存文件/etc/ld.so.cache;
(2)通过环境变量LD_LIBRARY_PATH。
这里我使用第一种方法“将库文件添加到ld.so.cache中”,让系统在执行程序时,可从ld.so.cache文件中搜索到需要的库文件的信息,
必须进行如要操作:
1)要让系统在执行程序时,可从ld.so.cache文件中搜索到需要的库文件的信息,
必须进行如下操作:
1
2
3
|
# cat /etc/ld.so.conf include ld.so.conf.d/*.conf /usr/local/gd/lib |
2)执行ldconfig 命令,使系统升级ld.so.cache 文件,将/usr/local/gd/lib目录下的库文件添加到搜索中。
1
|
#ldconfig -v |
总结:
1) 查看日志,是整个配置过程中的重中之重,日志可以帮助我们分析错误的原因
2) 借助搜索引擎,使用好的关键字搜索也是门艺术,慢慢的试着搜索,或许你会发现意想不到的结果。