剖析开源监控Nagios故障
剖析开源监控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
# 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
# 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找到:
User daemon Group daemon
修改为:
User nagios Group nagcmd
2)修改Apache默认索引页面,添加index.php,找到如下代码结果为:
<IfModule dir_module> DirectoryIndex index.html index.php </IfModule>
3)在Apache配置文件中增加如下行
AddType application/x-httpd-php .php
和
Include conf.d/*.conf
4)创建conf.d目录:
# mkdir /usr/local/apache/conf.d
5)配置Apache加载CGI模块:
找到
# LoadModulecgid_module modules/mod_cgid.so # LoadModule cgi_module modules/mod_cgi.so
将注释#去掉
6)启动Apache服务,使得新的配置生效
# /usr/local/apache/bin/apachectl start
2、登录Nagios后,点击“Map”和“Trends”显示“无法找到该网页,404未找到”,如下图:
问题原因与解决方法:
查看了下Apache的错误日志,提示:
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的内容:
# 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依赖软件包
# 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库文件所在的路径添加到该文件中
# cat /etc/ld.so.conf include ld.so.conf.d/*.conf /usr/local/gd/lib # ldconfig -v
3)创建运行nagios所需要的用户和组
# useradd -m nagios -s /sbin/nologin # groupadd nagcmd # usermod -a -G nagcmd Nagios
4)安装Nagios
# 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认证
# /usr/local/apache/bin/htpasswd -c/usr/local/nagios/etc/htpasswd.users nagiosadmin
6)重新启动Apache服务,使得新的配置生效
# /usr/local/apache/bin/apachectl restart
再次查看/usr/local/nagios/sbin目录的内容,发现statusmap.cgi 文件,该问题解决。
# 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.”如下图:
[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文件中搜索到需要的库文件的信息,
必须进行如下操作:
# cat /etc/ld.so.conf include ld.so.conf.d/*.conf /usr/local/gd/lib
2)执行ldconfig 命令,使系统升级ld.so.cache 文件,将/usr/local/gd/lib目录下的库文件添加到搜索中。
#ldconfig -v
总结:
1) 查看日志,是整个配置过程中的重中之重,日志可以帮助我们分析错误的原因
2) 借助搜索引擎,使用好的关键字搜索也是门艺术,慢慢的试着搜索,或许你会发现意想不到的结果。
欢迎使用微信关注“云运维联盟”公众号,第一时间了解本博客动态!