從零開始編譯安裝LAMP(下)

7、Nagios監控軟件搭建

Nagios官網:https://www.nagios.org/,以前使用的最新版本的nagios,發現一大堆問題,後面又從新使用以前的版本。這裏講解的也是比較成熟的版本,且有中文插件包,方便朋友發現解決問題。咱們使用的nagios版本爲:nagios-3.2.3.tar.gz。主要使用的軟件有:nagios-3.2.3.tar.gz , nagios-plugins-2.0.3.tar.gz  pnp-0.4.13.tar.gz,nagios-cn-3.2.3.tar.bz2  ,nrpe-2.12.tar.gz ,rrdtool-1.4.5.tar.gz。目前就是須要這麼多,安裝過程當中會提示咱們須要安裝一些依賴包,到時候在安裝吧。php

1.建立nagios用戶和組linux

# useradd nagiosios

# mkdir -v /usr/local/nagiosapache

# chown -R nagios:nagios /usr/local/nagios/centos

 

2.解壓、編譯、安裝(前面已經寫得很是詳細,這裏我這給出操做步驟和命令,不解釋了)瀏覽器

# cd /usr/local/lampsoft/nagiostomcat

# tar xvf nagios-3.2.3.tar.gz 安全

# cd nagios-3.2.3bash

# ./configure --prefix=/usr/local/nagios/服務器

# make all

#make install

#make install-init

#make install-commandmode

# make install-config

 

3.安裝nagios插件,插件版本和nagios版本不必定要相同的,能夠去官網下載最新插件,也是能用的。咱們使用nagios-plugins-2.0.3.tar.gz

# tar xvf nagios-plugins-2.0.3.tar.gz

# cd nagios-plugins-2.0.3

# ./configure --prefix=/usr/local/nagios/

# make && make install

 

4.安裝nagios中文插件

# tar xvf nagios-cn-3.2.3.tar.bz2 

# cd nagios-cn-3.2.3

#./configure 

# make all

# make install

# make install-init

# make install-commandmode

# make install-config

 

5.修改apache的配置文件,讓其能夠支持nagios,也是爲了保證nagios的安全。要修改兩處:

第一處:修改apache運行用戶,原來是deamon,修改成nagios,即:

User nagios
Group nagios

第二處:在配置文件末尾,增長nagios安全驗證機制。

ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin"

        <Directory "/usr/local/nagios/sbin">

            AuthType Basic

            Options ExecCGI

            AllowOverride None

            Order allow,deny

            Allow from all

            AuthName "Nagios Access"

            AuthUserFile /usr/local/nagios/etc/.htpasswd

            Require valid-user

        </Directory>
 

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

        <Directory "/usr/local/nagios/share">

            AuthType Basic

            Options None

            AllowOverride None

            Order allow,deny

            Allow from all

            AuthName "nagios Access"

            AuthUserFile /usr/local/nagios/etc/.htpasswd

            Require valid-user

        </Directory>

 

6.建立Apache驗證用戶

# /usr/local/apache/bin/htpasswd -c /usr/local/nagios/etc/.htpasswd nagios

而後輸入兩次密碼便可。

注意:第一次建立密碼文件須要添加-c參數,之後都不須要再加。刪除的話,使用-D參數,指定密碼配置文件,指定用戶名便可刪除對應用戶。另外,建立的時候可使用-m參數,指定MD5加密。如今就能夠重啓apache,讓配置文件生效了。可是重啓以前,咱們最好作一次apache配置文件的語法檢測,即apachectl -t看下是否提示syntax OK。而後再進行重啓。

 

7.重啓apache,啓動nagios

8.經過瀏覽器進行訪問IP/nagios,會提示咱們輸入訪問頁面的用戶名密碼,輸入之後便可進行查看,以下圖:

注意!當咱們試圖點擊nagios左側的菜單時,發現老是提示咱們下載文件,這是由於沒有打開apache的cgj模塊。修改apache配置文件,找到LoadModule actions_module modules/mod_actions.so 去掉前面的註釋,另外若是你的apache是prefork模式,則將

<IfModule mpm_prefork_module>
        #LoadModule cgi_module modules/mod_cgi.so
</IfModule>

前面的#去掉,若是不是呢,則把

<IfModule !mpm_prefork_module>
        #LoadModule cgid_module modules/mod_cgid.so
</IfModule>

前面的#去掉便可。

 

那怎麼看apache工做在什麼模塊下呢?使用httpd -M查看,看下mpm後面接的是什麼,如:個人是 mpm_event_module (shared),那麼個人是工做在event模式下。apache在2.4之後,默認都是工做在event模塊下,由於這個性能比prefork要好不少。

 

8、配置Nagios

首先,看下nagios有哪些目錄:bin、etc、include、libexec、sbin、share、var,其中bin主要是nagios的一些可執行文件,sbin則存放nagios的cgi腳本,include則是nagios的頭文件,libexec存放nagios監控插件,share存放一些網頁文件,動態生成文件等。var則存放nagios的鎖文件,日誌文件等等。

其次,咱們說下nagios監控的執行過程。首先在nagios.cfg中定義配置文件路徑,其次添加配置文件,而後對配置文件進行調用。這些配置文件包括時間配置,命令配置,主機配置,服務配置等。也就是說,nagios的監控系統,須要注意四點:

a.定義監控哪些主機、主機組、服務、服務組

b.定義這個監控要用什麼命令實現

c.定義監控的時間段

d.定義主機或者服務出現問題時要通知的聯繫人和聯繫人組

接下來就開始真正進行服務監控的實施。

我們得有個目標吧,先看下下面這張圖,就先作成這樣吧

http://img.blog.csdn.net/20150731164401878?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

1.修改nagios的主配置文件——nagios.cfg

第一處:添加以下三行代碼:

cfg_file=/usr/local/nagios/etc/objects/services.cfg
cfg_file=/usr/local/nagios/etc/objects/hosts.cfg
cfg_file=/usr/local/nagios/etc/objects/contactgroups.cfg

第二處:改變檢查時間間隔

command_check_interval=10s  通常設置10s就能夠了,也能夠根據實際狀況進行設置。

好了,先保存退出。

注意:最好註釋掉cfg_file=/usr/local/nagios/etc/objects/localhost.cfg這行代碼,否則後面咱們測試的時候,會發現莫名其妙出現不少主機和服務檢測。

2.修改 CGI的配置文件——cgi.cfg

首先確認一下,use_authentication=1是否爲1,爲1表示啓用cgi腳本調用驗證,最好要啓用,這樣會安全不少。這裏須要添加一下可以調用cgi腳本權限的用戶

第一處:啓用默認用戶名,將#去掉,將guest改成nagios,即:

default_user_name=nagios

第二處:則是給予nagios用戶一些調用其餘腳本的權限。主要修改的代碼行以下,將nagios用戶添加進去,注意多用戶之間用逗號隔開就能夠了。

authorized_for_system_information=nagiosadmin,nagios

authorized_for_configuration_information=nagiosadmin,nagios

authorized_for_system_commands=nagiosadmin,nagios

authorized_for_all_services=nagiosadmin,nagios

authorized_for_all_hosts=nagiosadmin,nagios

authorized_for_all_service_commands=nagiosadmin,nagios

authorized_for_all_host_commands=nagiosadmin,nagios

就是這幾個,保存退出吧。

3.查看一下時間模板配置文件——timeperiods.cfg

生成環境常用的是24x7的這個,固然你也能夠定義本身的時間模板:

define timeperiod{
        timeperiod_name 24x7
        alias           24 Hours A Day, 7 Days A Week
        sunday          00:00-24:00
        monday          00:00-24:00
        tuesday          00:00-24:00
        wednesday        00:00-24:00
        thursday          00:00-24:00
        friday            00:00-24:00
        saturday          00:00-24:00
        }

之後咱們調用監控時間就是用24x7這個名字了,因此你要是定義本身所須要的時間段,這個名字要記好,否則是沒法調用的。
時間模板暫時不用修改,那接下來咱們要定義聯繫人模板了。

 

4.聯繫人模板是存在的,就是contacts.cfg,可是裏面沒有咱們所需的信息,因此咱們不妨模仿着本身定義一個,能夠在最後添加以下信息

############ Add for Nagios Monitor ##############################################
define contact{
        contact_name                     J_Chen
        alias                           J_Chen_admin
        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                           315688082@qq.com
}
 這樣我就定義了一個聯繫人J_Chen,要是有報警信息就會發送到315688082@qq.com這個郵箱。

下面解釋一下各參數的意義:

contact_name    聯繫人姓名,之後定義服務出現問題聯繫人的時候,就能夠直接調用這個名字了。alias是別名,沒有太大意義,更多的用於方便操做。

service_notification_period  服務監控時間段,後面的24x7就是以前timeperiods.cfg裏面定義的。

host_notification_period 主機監控時間段,也是24x7,成天不間斷監控

service_notification_options 服務監控報警選項,即當出現這四中狀況時,發郵件通知聯繫人。即:w-報警(warning),u-未知(unknown),c-嚴重(critical),或者r-從異常恢復正常(recovery)

host_notification_options 和上面相似,主機監控報警選項。d-宕機(down),u-不可達(unreachable),r-從故障恢復正常(recovery)。

service_notification_commands  服務出現情況通知命令使用notify-service-by-email(這天命令實在commands.cfg中定義的)

host_notification_commands 和上面的很是相似,不解釋了

email  即聯繫人郵件

 

若是咱們有多個管理員,能夠定義多個聯繫人,而後將這些聯繫人放到一個組中,而後在監控到故障的時候,直接通知這些組。假如我再建立一個用戶tomcat,基本上上面的用戶定義同樣,改下名字,聯繫方式就好了。以下:

define contact{
        contact_name                     Tomcat
        alias                           Tomcat_admin
        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                           tomcat@localhost
}

5.定義聯繫人組Superman(我給聯繫人組起的名字),聯繫人組這個文件是不存在的,咱們手動建立一下。

# vi /usr/local/nagios/etc/objects/contactgroups.cfg

添加以下內容

define contactgroup{
        contactgroup_name               Superman
        alias                           Super_admin
        members                         J_Chen,Tomcat

(多個聯繫人之間使用逗號分開就能夠了)
}

 

6.建立監控主機文件hosts.cfg

vi /usr/local/nagios/etc/objects/hosts.cfg  (定義兩臺主機:一個是nagios服務,另外一個監控內部一臺測試服務器,地址192.168.1.51)

define host{
        host_name                       nagios-server
        alias                           nagios server
        address                         192.168.1.214
        check_command                   check-host-alive
        max_check_attempts               5
        check_period                     24x7
        contact_groups                   Superman
        notification_interval           300
        notification_period             24x7
        notification_options             d,u,r
}


define host{
        host_name                     51-server
        alias                           51 server
        address                         192.168.1.51
        check_command                   check-host-alive
        max_check_attempts               5
        check_period                     24x7
        contact_groups                   Superman
        notification_interval           300
        notification_period             24x7
        notification_options             d,u,r
}

保存退出。

注意:check-host-alive這個命令是在command.cfg中定義過的。

 

7.如今定義監控服務services.cfg(先簡單定義了兩個服務)以下:

# vi /usr/local/nagios/etc/objects/services.cfg

define service{
        host_name                       nagios-server
        service_description             check-host-alive
        check_command                   check-host-alive
        max_check_attempts               5
        normal_check_interval           3
        retry_check_interval             2
        check_period                     24x7
        notification_interval           10
        notification_period             24x7
        notification_options             w,u,c,r
        contact_groups                   Superman
}


define service{
        host_name                       51-server
        service_description             check-host-alive
        check_command                   check-host-alive
        max_check_attempts               5
        normal_check_interval           3
        retry_check_interval             2
        check_period                     24x7
        notification_interval           10
        notification_period             24x7
        notification_options             w,u,c,r
        contact_groups                   Superman
}

注意:這裏的host_name就是咱們以前在hosts.cfg文件中定義的。

簡單的配置到此就結束了,咱們先來看一下能不能正常啓動。nagios給咱們提供了檢測腳本,執行以下命令:

# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg 

很開心,配置徹底正確,以下:

http://img.blog.csdn.net/20150731181311782?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

咱們重啓一下nagios試試看。

[root@centos1 objects]# service nagios restart
Running configuration check...done.
Stopping nagios: .done.
Starting nagios: done.

啓動完成,訪問一下試試看。

 

8.使用瀏覽器訪問一下

點擊左側的主機、服務均可以正常顯示,正是以前定的。

好了,nagios最簡單的配置已經完成了。可是有沒有發現咱們檢測的只是本機的服務還有另一臺主機的存活檢測,若是僅是這樣的話,我直接使用一條ping命令就能夠完成。固然了,nagios的強大功能纔剛剛開始,它不但能夠檢測本身的負載量,磁盤使用率,當前登陸用戶數等等,也能夠檢測別的主機。簡直比木馬還木馬,下次繼續學習nagios的高級監控功能。

 

9、Nagios監控搭建

今天主要總結一下Nagios監控體系的搭建,上節只是把Nagios最基本的框架搭建起來,可是這在生成環境中是遠遠不足的。好比我想監控非本機服務器的磁盤空閒率,CPU利用率,當前登陸人數等等,這些都是不能直接獲取的,好在Nagios早已經有了相關的輔助工具來用於遠程主機的監控,其監控原理圖以下(圖片是我從大神做品上摘取的):

http://img.blog.csdn.net/20150803085000166?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

這樣就清晰多了,其實Nagios監控遠程主機主要是依靠這個附加組件——NRPE。

NRPE主要由兩部分組成:check_nrpe、NRPE ,前者位於監控主機上,後者位於被監控主機上。遠程監控的原理大概就是這樣:當Nagios須要監控某個遠程主機的服務或者資源時,Nagios會先運行check_nrpe這個插件,告訴它我須要檢測什麼。check_nrpe取得指令後就立刻鏈接到遠程的NRPE上,使用的方式是SSL,遠程NRPE在收到check_nrpe的調取指令後,就會利用nagios插件對服務進行監控(這就是爲何被監控主機上也要安裝nagios插件的緣由),插件將取得的狀態值返回給NRPE,NRPE返回給check_nrpe,以後check_nrpe就將這一狀態信息講給nagios去處理,繼而完成了Nagios對遠程主機的監控。這樣一來咱們能夠作個比較形象的比喻,Nagios至關於皇上,check_nrpe則是宰相,負責爲皇上處理收集平常事務,那麼NRPE則就至關於遠赴其餘國家的節度使,去完成丞相交代下來的命令,實際上是皇上發出的,只不過是經過丞相轉述出去的。

 

熟悉了大概原理以後,就須要進行實踐了。假設我須要監控內網51服務器上面的服務,須要在192.168.1.51上面執行如下操做:

1.增長nagios用戶

# useradd nagios

# passwd nagios

2.安裝nagios插件

# tar xvf nagios-plugins-2.0.3.tar.gz

# cd nagios-plugins-2.0.3

# ./configure

# make

# make install

這步完成以後就會在/usr/local/nagios下生成兩個目錄libexec和share

3.修改目錄權限

# chown -R nagios:nagios /usr/local/nagios

 

4.安裝nrpe

# tar xvf nrpe-2.12.tar.gz

# cd nrpe-2.12

# ./configure

編譯完成後能夠看到NRPE的一些信息

 

 General Options:

 -------------------------

 NRPE port:   5666

 NRPE user:   nagios

 NRPE group:  nagios

 Nagios user: nagios

 Nagios group: nagios

Review theoptions above for accuracy.  If they lookokay,

type 'make all'to compile the NRPE daemon and client.

能夠看到NRPE的端口是5666,下一步是make all

# make all

# make install-plugin (這步其實能夠不須要,可是爲了本地測試方便,咱們仍是建議安裝)

#make install-daemon

#make install-daemon-config

如今查看一下nagios目錄下面,會發現已經有四個目錄文件了:bin,etc,share,libexec

 

5.根據官方文檔,NRPE deamon是做爲xinetd下的一個服務運行的,這就須要實現安裝好xinetd,通常系統已經默認安裝好了。沒有安裝的話使用yum安裝便可。yum install xinetd -y,確保安裝好之後,來安裝xinetd腳本

# make install-xinetd而後編輯這個腳本,腳本位置能夠從輸出信息查看,通常會是/etc/xinetd.d/nrpe,編輯這個腳本

# vi /etc/xinetd.d/nrpe須要修改only_from行,後面能夠接IP地址,也能夠接IP地址段,使用空格間隔,表示從哪臺主機上來的check_nrpe請求本機會做出相應。咱們在51上作的修改,固然是容許如今這臺nagios監控主機了。即修改成:

only_from= 127.0.0.1 192.168.1.214

6.編輯/etc/services文件,增長NRPE服務

# vi /etc/services 增長一行代碼

#Local services

nrpe 5666/tcp#nrpe

 

7.重啓xinetd服務

#service xinetd restart

 

8.查看NRPE服務是否啓動,還記得nrpe的端口號嗎?5666

#netstat  -nltp | grep 5666

tcp        0      0 0.0.0.0:5666                0.0.0.0:*                   LISTEN   

已結啓動成功了。

9.測試NRPE可否正常工做,如今本機上測試一下:有個很是簡單的命令

# /usr/local/nagios/libexec/check_nrpe -H localhost

即check_nrpe可以解析出-H指定的主機上的nrpe版本信息,則證實本地之間是能夠取得信息的,後面用一樣的辦法,測試可否取得遠程主機的版本信息。

[nagios@Exp51 libexec]$ ./check_nrpe -H localhost
NRPE v2.12

--------是能夠的。另外須要注意的是,本地防火牆須要將5666端口打開,是的外部監控主機能夠訪問。

 

10.如今說一下,如何實用check_nrpe來讀取監控信息。相比較而言,check_nrpe可以接受的參數很少,以下:

Usage: check_nrpe -H <host> [-n] [-u] [-p <port>] [-t <timeout>] [-c <command>] [-a <arglist...>]

下面是對各個選項的解釋,咱們主要使用到的其實就是-H和-c參數:
Options:
 -n         = Do no use SSL
 -u         = Make socket timeouts return an UNKNOWN state instead of CRITICAL
 <host>     = The address of the host running the NRPE daemon
 [port]     = The port on which the daemon is running (default=5666)
 [timeout]  = Number of seconds before connection times out (default=10)
 [command]  = The name of the command that the remote daemon should run
 [arglist]  = Optional arguments that should be passed to the command.  Multiple
              arguments should be separated by a space.  If provided, this must be
              the last option supplied on the command line.

 

注意:-c只能解釋命令名稱,這個命令必定是在nrpe.cfg中定義過的。這個至關於監控主機上的commands.cfg文件,只有它裏面定義過的命令纔是合法的,固然這裏面的命令基本上都是基於插件去定義的,nrpe.cfg也不例外。(nrpe.cfg文件位於/usr/local/nagios/etc目錄下)如今來查看一下nrpe.cfg默認定義了哪些命令(有些是我本身定義的):

command[check_users]=/usr/local/nagios/libexec/check_users -w 4 -c 10
command[check_load]=/usr/local/nagios/libexec/check_load -w 15,10,5 -c 30,25,20
command[check_hda1]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/hda1
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 200 -c 250 
command[check_disk]=/usr/local/nagios/libexec/check_disk -w 20 -c 10 -p /
command[check_swap]=/usr/local/nagios/libexec/check_disk -w 40 -c 20
command[check_Internet]=/usr/local/nagios/libexec/check_ping -H www.baidu.com -w 3000.0,80% -c 5000.0,100% -p 5

其中紅色字體就是咱們定義的命令,也是check_nrpe -c後惟一能接的參數,咱們如今就能夠先使用check_nrpe -H localhost -c [command]來檢測一下,正常之後就能夠在監控主機上進行測試了。

 

11.如今在nagios監控主機上安裝check_nrpe插件

# tar xvf nrpe-2.12.tar.gz

# cd nrpe-2.12

# ./configure

# make all

# make install-plugin (監控主機上只要安裝這個就好了)

如今就能夠測試和51主機是否可以正常通訊了

# /usr/local/nagios/libexec//check_nrpe -H 192.168.1.51
NRPE v2.12

測試經過。如今就能夠在監控主機上對check_nrpe命令進行定義了

 

12.增長commands.cfg上對於check_nrpe的命令定義

define command{
        command_name            check_nrpe
        command_line            $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}

注意:$HOSTADDRESS$會默認爲你定義的服務或者主機的IP地址,在service或者host中定義時,-H IP 就看省略掉了

如今就能夠在監控主機上定義要監控的遠程主機的某些服務資源了。以下:咱們定義了監控51主機上登陸人數監控:

define service{
        use                              services-pnp
        host_name                       51_server
        service_description             check-users
        check_command                 check_nrpe!check_users
        max_check_attempts          5
        normal_check_interval        3
        retry_check_interval             2
        check_period                      24x7
        notification_interval             10
        notification_period              24x7
        notification_options            w,u,c,r
        contact_groups                   superman
}

注意:check_nrpe後面接的check_users就是在遠程主機nrpe.cfg上定義過的。咱們依次在將nrpe.cfg中定義的其餘的命令加進來,完成後重啓一下nagios,就會看到以下圖所示的狀態。

http://img.blog.csdn.net/20150803114646508?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

等待一會啓動好了就能夠了,五分鐘以內應該都是能夠正常獲取監控信息的,個人已經啓動好了,以下:

http://img.blog.csdn.net/20150803115006881?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

可是咱們如今只能看到實時的監控狀態,如何讓nagios將一段時間的狀態收集起來造成一個統計圖表呢?看下下面這臺主機上(192.168.1.215,個人另外一臺虛擬機服務器)的監控圖,以下:

http://img.blog.csdn.net/20150803115121722?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

其實安裝好之後是沒有小太陽標識的,這是我安裝了一個繪圖抓圖插件,能夠看到一段時間主機或者服務的監控狀態繪圖。咱們點開小太陽標識,出現以下圖表:

http://img.blog.csdn.net/20150803115248610?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

下節來總結一下nagios的圖形化監控,也很簡單。

 

10、Nagios性能分析圖表的安裝

這裏咱們引入一個新的開源軟件包——PNP,它基於PHP和PERL,PNP利用rrdtool工具將採集的數據繪製成相關的圖表,而後顯示出主機或者服務在一段時間內的運行狀況。PNP官網:http://www.pnp4nagios.org,目前官網最新版本是pnp4nagios-0.6.25.tar.gz。安裝PNP須要提早配置好安裝環境,PNP須要的環境支撐有:

1.整合後的apache和PHP環境,而且可以支撐GD/zlib/jpeg等圖片的解析與展示,這些咱們在編譯PHP的時候已經考慮進來的,因此這點事知足的。

2.安裝rrdtool工具(這是一個圖標生成工具,pnp就是利用它來生成相關監控圖表的)

3.安裝perl

如今就先來安裝rrdtool(這裏我使用rrdtool-1.4.5.tar.gz,一直用的這個,原本想用新的試試,結果官網一直打不開,官方給出的最新下載地址(http://oss.oetiker.ch/rrdtool/pub/rrdtool.tar.gz)):

# tar xvf rrdtool-1.4.5.tar.gz

# cd rrdtool-1.4.5

# ./configure --prefix=/usr/local/rrdtool

報錯:

configure: WARNING:
----------------------------------------------------------------------------
* I could not find a working copy of pangocairo. Check config.log for hints on why
  this is the case. Maybe you need to set LDFLAGS and CPPFLAGS appropriately
  so that compiler and the linker can find libpangocairo-1.0 and its header files. If
  you have not installed pangocairo, you can get it either from its original home on
     http://ftp.gnome.org/pub/GNOME/sources/pango/1.17
  You can find also find an archive copy on
     http://oss.oetiker.ch/rrdtool/pub/libs
  The last tested version of pangocairo is 1.17.
       LIBS=-lm 
   LDFLAGS=
  CPPFLAGS=
----------------------------------------------------------------------------            
checking for xmlParseFile in -lxml2... yes
checking libxml/parser.h usability... yes
checking libxml/parser.h presence... yes
checking for libxml/parser.h... yes
configure: error: Please fix the library issues listed above and try again.

經過對編譯出來的信息分析,包括一些警告信息,主要是由於缺乏相應的庫文件,解決辦法:

# yum install pango* -y

再次編譯執行:經過了,以下:

http://img.blog.csdn.net/20150803160618701?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

編譯經過了,如今開始安裝

# make

編譯有報錯:

Can't locate ExtUtils/MakeMaker.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at Makefile.PL line 1.
BEGIN failed--compilation aborted at Makefile.PL line 1.
make[3]: *** [perl-piped/Makefile] Error 2
make[3]: Leaving directory `/usr/local/lampsoft/nagios/rrdtool-1.4.5/bindings'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/usr/local/lampsoft/nagios/rrdtool-1.4.5/bindings'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/usr/local/lampsoft/nagios/rrdtool-1.4.5'
make: *** [all] Error 2

解決辦法:yum -y install perl-ExtUtils-MakeMaker

而後從新make,提示以下:

# make install

http://img.blog.csdn.net/20150803163216952?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

安裝完成以後就能夠安裝pnp了。

 

+++++++++++++++++++++++++++++++++++++++++++++++  分隔線  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

安裝pnp,這裏我使用的版本是pnp-0.4.13,

# tar xvf pnp-0.4.13.tar.gz

# cd pnp-0.4.13

# ./configure --with-nagios-user=nagios --with-nagios-group=nagios --with-rrdtool=/usr/local/rrdtool/bin/rrdtool --with-perfdata-dir=/usr/local/nagios/share/perfdata

有個警告信息,提示咱們找不到RRDs Perl的模塊,這個其實咱們已經安裝好了,只是系統沒有找到,configure有個選項是--with-perl_lib_path=能夠用來指定模塊路徑。

*** Configuration summary for pnp 0.4.13 02-19-2009 ***

  General Options:
  -------------------------         -------------------
  Nagios user/group:                nagios nagios
  Install directory:                /usr/local/nagios
  HTML Dir:                         /usr/local/nagios/share/pnp
  Config Dir:                       /usr/local/nagios/etc/pnp
  Path to rrdtool:                  /usr/local/rrdtool/bin/rrdtool (Version 1.4.5)
  RRDs Perl Modules:                *** NOT FOUND ***
  RRD Files stored in:              /usr/local/nagios/share/perfdata
  process_perfdata.pl Logfile:      /usr/local/nagios/var/perfdata.log
  Perfdata files (NPCD) stored in:  /usr/local/nagios/var/spool/perfdata/
  Review the options above for accuracy.  If they look okay,
  type 'make all' to compile.
  WARNING: The RRDs Perl Modules are not found on your System
           Using RRDs will speedup things in larger Installtions.

----------------------------------------------------------------------------------------------

咱們指定perl的模塊路徑再從新編譯一下:

# ./configure --with-nagios-user=nagios --with-nagios-group=nagios --with-rrdtool=/usr/local/rrdtool/bin/rrdtool --with-perfdata-dir=/usr/local/nagios/share/perfdata --with-perl_lib_path=/usr/local/rrdtool/lib/perl/5.10.1/x86_64-linux-thread-multi/
http://img.blog.csdn.net/20150803163909149?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

# make all

# make install

# make install-config

# make install-init

 

如今開始配置PNP

1.建立默認配置文件

# cd /usr/local/nagios/etc/pnp/

# cp process_perfdata.cfg-sample process_perfdata.cfg

# cp npcd.cfg-sample npcd.cfg

# cp rra.cfg-sample rra.cfg

# chown -R nagios:nagios *

2.修改process_perfdata.cfg文件

# vi /usr/local/nagios/etc/pnp/process_perfdata.cfg

將LOG_LEVEL = 0改爲LOG_LEVEL = 2,即調成debug模式。

 

3.修改nagios配置文件

增長小太陽標示:

修改templates.cfg,增長一個定義PNP的hosts和services

# vi /usr/local/nagios/etc/objects/templates.cfg

 

define host {
        name                   hosts-pnp
        register               0
        action_url               /nagios/pnp/index.php?host=$HOSTNAME$
        process_perf_data     1
}


define service {
        name                     services-pnp
        register                 0
        action_url               /nagios/pnp/index.php?host=$HOSTNAME$&srv=$SERVICEDESC$
        process_perf_data     1
}

 

4.修改nagios的主配置文件,nagios.cfg

去掉host_perfdata_command=process-host-perfdata前面的註釋,即保證:

# vi /usr/local/nagios/etc/nagios.cfg

 

process_performance_data=1

host_perfdata_command=process-host-perfdata

service_perfdata_command=process-service-perfdata

保存退出。

 

5.修改commands.cfg文件,定義process-host-perfdata命令(注意process-host-perfdata、process-service-perfdata在commands.cfg中原來是定義好的,須要先註釋掉)

# vi /usr/local/nagios/etc/objects/commands.cfg

 

define command{
        command_name             process-host-perfdata
        command_line             /usr/local/nagios/libexec/process_perfdata.pl
}


define command{
        command_name             process-service-perfdata
        command_line           /usr/local/nagios/libexec/process_perfdata.pl
}

好了之後保存退出。

 

6.修改hosts.cfg和services.cfg文件,給每一個主機和服務增長小太陽標識。只須要使用use命令繼承一下便可。以下:

# vi /usr/local/nagios/etc/objects/hosts.cfg

而後給每一個須要統計圖表信息的service加上services-pnp繼承

修改好之後保存退出。

如今配置就算完成了,在從新啓動nagios服務以前,咱們先檢測一下有沒錯誤:

# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

http://img.blog.csdn.net/20150803172026088?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

一切正常,如今可從新啓動了。

小太陽圖標已經出現了,可是能不能正常調用呢,咱們點擊一下小太陽圖標,發現是有故障的。以下:

http://img.blog.csdn.net/20150803174901597?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

今天看了一下日誌,發現都沒有關於這個錯誤的信息。圖形不能出來,監控正常,也就是說要麼是Nagios和pnp之間出了問題,要門就是PNP以及rrdtool等出了問題。先來檢查一下:

# /usr/local/nagios/libexec/process_perfdata.pl

提示:BEGIN failed--compilation aborted at ./process_perfdata.pl

這是提示須要安裝一個perl-Time-HiRes擴展包,來支持二者之間的交互,使用yum來安裝

#yum install perl-Time-HiRes

而後再從新測試一下:

# /usr/local/nagios/libexec/process_perfdata.pl

提示:dont try this as root

這就沒有什麼問題了。可是發現圖像依然出不來,仍是跟以前同樣。因而從新編譯安裝一下pnp,重啓nagios搞定。

 

另外須要注意的一點,咱們安裝好之後,可能nagios界面全是亂碼,這個頗有多是apache的cgj模塊沒有啓動。若是啓動以後仍是有亂碼,則根據報錯信息,若是提示是timezone設置不對,則能夠在php的配置文件中指定一下時間域。通常只要修改成:data.timezone = PRC就行了。

 

還有,若是其餘正常,可是圖像不顯示,都是方塊同樣亂碼,這是由於缺乏rrdtool-perl組件,使用yum來安裝便可。

 

如今終於能夠正常顯示監控圖片了,以下:

http://img.blog.csdn.net/20150804134153865?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

 

11、Nagios插件的開發與整合

         原本LAMP+Nagios架構已經寫完,可是以爲仍是有些內容沒有寫完整,內心一直糾結啊。確實,關於nagios還有最重要的一點,手動開發插件,這樣對於之後的生產使用會是事半功倍的。因此我以爲仍是要把插件開發的相關內容好好研究一下,可能不能精通,可是至少也要入門。最近今天比較忙,因此也就沒來得及補充。這兩天在學cacti進階課程,本想先把cacti總結整理之後再寫Nagios,可是不想文章標題中堅被打斷,強烈的完美主義。因此,先留個標題,我把cacti總結好之後再來寫這個。

這裏使用了「寫代碼的小孩——nagios插件開發demo版」的開發腳本爲示例

  1. #!/bin/bash  
  2. STATE_OK=0  
  3. STATE_WARNING=1  
  4. STATE_CRITICAL=2  
  5. STATE_UNKNOWN=3  
  6. TOTAL=`/bin/netstat -n | awk '/^tcp/ {++S[$NF]}END {for(a in S) print a, S[a]}' 
  7. |grep "ESTABLISHED" | awk '{print$NF}'`  
  8. if [ $TOTAL -lt 100 ];then  
  9.     echo "TEST OK : The established status id $TOTAL"  
  10.     exit $STATE_OK  
  11. elif [ $TOTAL -gt 100 -a $total -lt 200];then  
  12.     echo "TEST WARNING : The established status id $TOTAL"  
  13.     exit $STATE_WARNING  
  14. elif [ $TOTAL -gt 201 ];then  
  15.     echo "TEST CRITICAL : The established status id $TOTAL"  
  16.     exit $STATE_CRITICAL  
  17. else  
  18.     echo "UNKNOWN STATE"  
  19.     exit $STATE_UNKNOWN  
  20. fi  

 

STATE_OK=0、STATE_WARNING=一、STATE_CRITICAL=二、STATE_UNKNOWN=3這是nagios能識別的四種狀態碼。

每種狀態定義了顯示在監控頁面的不一樣顏色,以及是否發送警告信息等。所以Nagios的插件,必需要首先定義這四

種狀態,且在腳本進行判斷中,必須使用exit返回相應狀態值。而在exit上面的這句通常是用來顯示當前狀態信息,

不能太大,默認是4K。

好比我下面就是使用這個腳原本進行本地的鏈接測試,以下圖:

Nagios插件開發的語法其實就是這麼簡單,難點仍是在於腳本的開發上,如何能實現腳本的健壯性、穩定性等特色,就是長期積累的結果了。

另外還有一點須要注意:

腳本在開發完成以後,可能有些是須要root權限才能正常執行的,而咱們又不想nagios的執行用戶擁有root權限,所以可使用sudo命令,固然這裏必須使用sudo的 免密碼特徵,並且只給固定的執行某條命令(例如:smartctl)的權限,即只有在執行該條命令的時候是以root身份執行的,且不須要輸入執行用戶密碼來實現用戶切換,須要在visudo中修改一行,以下:

 

nagios  ALL=(ALL)       NOPASSWD:/usr/sbin/smartctl -H /dev/sda (這比網上的好多教程,直接把第三段改爲ALL安全多了)

 

這樣就保證了執行該條語句的時候,只要這樣寫就能夠了:$ sudo smartctl -H /dev/sda

若是執行其餘命令,則會提示:Sorry, user nagios is not allowed to execute '/usr/sbin/smartctl -H /dev/sdb' as root on centos3.

相關文章
相關標籤/搜索