剖析開源監控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”錯誤,如下圖:                    wKiom1WECvTiqjiWAAMV5N54Qy4020.jpg

問題分析與解決方法:

從錯誤提示上可以看出是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”錯誤,如下圖:

wKiom1WEC3uCJ8_kAAMNP-QQGLg918.jpg

問題分析與解決方法:

    從錯誤提示上可以看出是沒有C編譯器,使用rpmyum命令安裝Linux下的C編譯器的軟件包gcc,由於rpm軟件包具有軟件的依賴關係,而gcc依賴關係複雜,推薦使用yum install gcc -y 命令安裝gcc

3、編譯安裝httpd,執行“configure(配置)”過程中,提示“configure: error: APR-util not found.  Please read the documentation.”錯誤,如下圖:

wKiom1WEC7HRkoCrAAEmazJscVw455.jpg

問題分析與解決方法:

    這個問題和第一個問題相似,不在分析其原因,直接下載源碼apr-util-1.5.4安裝。

4、編譯安裝apr-util,執行“configure(配置)”過程中提示“configure: error: APR could not be located. Please use the--with-apr option.”錯誤,如下圖:

wKiom1WEC-Siz4T-AAFYv0BA5w4669.jpg

問題分析與解決方法:

    按照錯誤提示顯示,由於我們沒有指定--with-apr選項導致,沒有找到apr,使用--with-apr=/usr/local/apr指定apr的安裝位置。具體命令爲:./configure--prefix=/usr/local/apr-util --with-apr=/usr/local/apr。同理安裝源碼httpd的時候也需要指定aprapr-util的位置,具體命令不清楚的話使用./configure –help|grep apr獲取。

5、編譯安裝httpd,執行“configure(配置)”過程中,提示“configure: error: pcre-config for libpcre not found. PCRE isrequired and available from http://pcre.org/”錯誤,如下圖:

wKioL1WEDbmzckOfAADexl5CUsQ143.jpg

問題原因與解決方法:

    按照提示顯示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”錯誤,如下圖:

wKiom1WEDCnw5mLwAACLJzajCE4790.jpg

問題原因與解決方法:

    從錯誤提示上可以看出是沒有C++編譯器,使用rpmyum命令安裝Linux下的C++編譯器的軟件包gcc-c++,使用yum installgcc-c++ -y 命令安裝gcc-c++

總結:

1)   只要你明白Linux軟件包具有依賴性關係,也就是我們要使用A 軟件時,它會使用B 軟件的某些文件(一般都是庫文件),如果要使用A 軟件,那麼就必須要先安裝B 軟件。主要是由於開發人員爲了加快和避免重複的撰寫相同的代碼,編寫代碼的過程中使用了“動態加載函數庫”;導致了軟件包的依賴關係。

2)   源碼安裝軟件的步驟分爲配置編譯選項(configure)、編譯(make)、安裝(make install)幾個關鍵步驟。configure 腳本可以使用一些選項指定編譯時的選項,在執行完成後,會根據執行的選項和系統的配置生成一個編譯規則文件Makefilemake則是將源代碼按照編譯規則文件生成二進制的可執行文件,make install則是將二進制文件拷貝到安裝目錄。

3)   掌握了Linux軟件的源碼安裝方式和與計算機交互是安裝軟件的重點。說道這個想起了盲打,有的人盲打是看着顯示器不看鍵盤,牛人的盲打則是看着鍵盤不看顯示器。

2.2  關於Nagios的錯誤

1、安裝Nagios後使用http://IP/nagios輸入用戶名和密碼後顯示“NagiosCore Not running”如下圖所示:

wKioL1WEDhuzAqYaAAbeHOHW7dA924.jpg

問題原因與解決方法:

    從錯誤提示上說Nagios Core核心沒有運行,首先想到的是難道是忘記啓動nagios服務了,使用ps –ef|grep nagios命令查看結果如下圖:

wKiom1WEDI7Du2PYAAO8WuEWT58750.jpg

    結果表明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未找到”,如下圖:

wKiom1WEDbjDN9R7AAOp-B3_Rv8105.jpg

問題原因與解決方法:

    查看了下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

    這下真沒有任何思路了,搜了一下,解決方法讓先安裝gdgd-devellibpnglibpng-devellibjpeglibjpeg-develzlibzlib-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.”如下圖:

wKioL1WEo0uCphwKAANUrosHQjQ361.jpg再次查看Apache的錯誤日誌,錯誤提示如下所示:

[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)   藉助搜索引擎,使用好的關鍵字搜索也是門藝術,慢慢的試着搜索,或許你會發現意想不到的結果。

歡迎使用微信關注“雲運維聯盟”公衆號,第一時間瞭解本博客動態!



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章