天天看點

從零開始編譯安裝LAMP(下)七、Nagios監控軟體搭建八、配置Nagios九、Nagios監控搭建十、Nagios性能分析圖表的安裝十一、Nagios插件的開發與整合

七、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。目前就是需要這麼多,安裝過程中會提示我們需要安裝一些依賴包,到時候在安裝吧。

1.建立nagios使用者群組

# useradd nagios

# mkdir -v /usr/local/nagios

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

2.解壓、編譯、安裝(前面已經寫得非常詳細,這裡我這給出操作步驟和指令,不解釋了)

# cd /usr/local/lampsoft/nagios

# tar xvf nagios-3.2.3.tar.gz 

# cd nagios-3.2.3

# ./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,會提示我們輸入通路頁面的使用者名密碼,輸入以後即可進行檢視,如下圖:

從零開始編譯安裝LAMP(下)七、Nagios監控軟體搭建八、配置Nagios九、Nagios監控搭建十、Nagios性能分析圖表的安裝十一、Nagios插件的開發與整合
從零開始編譯安裝LAMP(下)七、Nagios監控軟體搭建八、配置Nagios九、Nagios監控搭建十、Nagios性能分析圖表的安裝十一、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要好很多。

八、配置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.定義主機或者服務出現問題時要通知的聯系人和聯系人組

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

咱們得有個目标吧,先看下下面這張圖,就先做成這樣吧

從零開始編譯安裝LAMP(下)七、Nagios監控軟體搭建八、配置Nagios九、Nagios監控搭建十、Nagios性能分析圖表的安裝十一、Nagios插件的開發與整合

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                           [email protected]

}

 這樣我就定義了一個聯系人J_Chen,要是有報警資訊就會發送到[email protected]這個郵箱。

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

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 

很開心,配置完全正确,如下:

從零開始編譯安裝LAMP(下)七、Nagios監控軟體搭建八、配置Nagios九、Nagios監控搭建十、Nagios性能分析圖表的安裝十一、Nagios插件的開發與整合

我們重新開機一下nagios試試看。

[root@centos1 objects]# service nagios restart

Running configuration check...done.

Stopping nagios: .done.

Starting nagios: done.

啟動完成,通路一下試試看。

8.使用浏覽器通路一下

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

從零開始編譯安裝LAMP(下)七、Nagios監控軟體搭建八、配置Nagios九、Nagios監控搭建十、Nagios性能分析圖表的安裝十一、Nagios插件的開發與整合
從零開始編譯安裝LAMP(下)七、Nagios監控軟體搭建八、配置Nagios九、Nagios監控搭建十、Nagios性能分析圖表的安裝十一、Nagios插件的開發與整合

好了,nagios最簡單的配置已經完成了。但是有沒有發現我們檢測的隻是本機的服務還有另外一台主機的存活檢測,如果僅是這樣的話,我直接使用一條ping指令就可以完成。當然了,nagios的強大功能才剛剛開始,它不但可以檢測自己的負載量,磁盤使用率,目前登入使用者數等等,也可以檢測别的主機。簡直比木馬還木馬,下次繼續學習nagios的進階監控功能。

九、Nagios監控搭建

今天主要總結一下Nagios監控體系的搭建,上節隻是把Nagios最基本的架構搭建起來,但是這在生成環境中是遠遠不足的。比如我想監控非本機伺服器的磁盤空閑率,CPU使用率,目前登入人數等等,這些都是不能直接擷取的,好在Nagios早已經有了相關的輔助工具來用于遠端主機的監控,其監控原理圖如下(圖檔是我從大神作品上摘取的):

從零開始編譯安裝LAMP(下)七、Nagios監控軟體搭建八、配置Nagios九、Nagios監控搭建十、Nagios性能分析圖表的安裝十一、Nagios插件的開發與整合

這樣就清晰多了,其實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版本資訊,則證明本地之間是可以取得資訊的,後面用同樣的辦法,測試能否取得遠端主機的版本資訊。

[[email protected] 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,就會看到如下圖所示的狀态。

從零開始編譯安裝LAMP(下)七、Nagios監控軟體搭建八、配置Nagios九、Nagios監控搭建十、Nagios性能分析圖表的安裝十一、Nagios插件的開發與整合

等待一會啟動好了就可以了,五分鐘之内應該都是可以正常擷取監控資訊的,我的已經啟動好了,如下:

從零開始編譯安裝LAMP(下)七、Nagios監控軟體搭建八、配置Nagios九、Nagios監控搭建十、Nagios性能分析圖表的安裝十一、Nagios插件的開發與整合

但是我們現在隻能看到實時的監控狀态,如何讓nagios将一段時間的狀态收集起來形成一個統計圖表呢?看下下面這台主機上(192.168.1.215,我的另一台虛拟機伺服器)的監控圖,如下:

從零開始編譯安裝LAMP(下)七、Nagios監控軟體搭建八、配置Nagios九、Nagios監控搭建十、Nagios性能分析圖表的安裝十一、Nagios插件的開發與整合

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

從零開始編譯安裝LAMP(下)七、Nagios監控軟體搭建八、配置Nagios九、Nagios監控搭建十、Nagios性能分析圖表的安裝十一、Nagios插件的開發與整合

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

十、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

再次編譯執行:通過了,如下:

從零開始編譯安裝LAMP(下)七、Nagios監控軟體搭建八、配置Nagios九、Nagios監控搭建十、Nagios性能分析圖表的安裝十一、Nagios插件的開發與整合

編譯通過了,現在開始安裝

# 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,提示如下:

從零開始編譯安裝LAMP(下)七、Nagios監控軟體搭建八、配置Nagios九、Nagios監控搭建十、Nagios性能分析圖表的安裝十一、Nagios插件的開發與整合

# make install

從零開始編譯安裝LAMP(下)七、Nagios監控軟體搭建八、配置Nagios九、Nagios監控搭建十、Nagios性能分析圖表的安裝十一、Nagios插件的開發與整合

安裝完成之後就可以安裝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/

從零開始編譯安裝LAMP(下)七、Nagios監控軟體搭建八、配置Nagios九、Nagios監控搭建十、Nagios性能分析圖表的安裝十一、Nagios插件的開發與整合

# 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

從零開始編譯安裝LAMP(下)七、Nagios監控軟體搭建八、配置Nagios九、Nagios監控搭建十、Nagios性能分析圖表的安裝十一、Nagios插件的開發與整合

然後給每個需要統計圖表資訊的service加上services-pnp繼承

從零開始編譯安裝LAMP(下)七、Nagios監控軟體搭建八、配置Nagios九、Nagios監控搭建十、Nagios性能分析圖表的安裝十一、Nagios插件的開發與整合

修改好以後儲存退出。

現在配置就算完成了,在重新啟動nagios服務之前,我們先檢測一下有沒錯誤:

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

從零開始編譯安裝LAMP(下)七、Nagios監控軟體搭建八、配置Nagios九、Nagios監控搭建十、Nagios性能分析圖表的安裝十一、Nagios插件的開發與整合

一切正常,現在可重新啟動了。

從零開始編譯安裝LAMP(下)七、Nagios監控軟體搭建八、配置Nagios九、Nagios監控搭建十、Nagios性能分析圖表的安裝十一、Nagios插件的開發與整合

小太陽圖示已經出現了,但是能不能正常調用呢,我們點選一下小太陽圖示,發現是有故障的。如下:

從零開始編譯安裝LAMP(下)七、Nagios監控軟體搭建八、配置Nagios九、Nagios監控搭建十、Nagios性能分析圖表的安裝十一、Nagios插件的開發與整合

今天看了一下日志,發現都沒有關于這個錯誤的資訊。圖形不能出來,監控正常,也就是說要麼是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來安裝即可。

現在終于可以正常顯示監控圖檔了,如下:

從零開始編譯安裝LAMP(下)七、Nagios監控軟體搭建八、配置Nagios九、Nagios監控搭建十、Nagios性能分析圖表的安裝十一、Nagios插件的開發與整合

十一、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=1、STATE_CRITICAL=2、STATE_UNKNOWN=3這是nagios能識别的四種狀态碼。

每種狀态定義了顯示在監控頁面的不同顔色,以及是否發送警告資訊等。是以Nagios的插件,必須要首先定義這四

種狀态,且在腳本進行判斷中,必須使用exit傳回相應狀态值。而在exit上面的這句一般是用來顯示目前狀态資訊,

不能太大,預設是4K。

比如我下面就是使用這個腳本來進行本地的連接配接測試,如下圖:

從零開始編譯安裝LAMP(下)七、Nagios監控軟體搭建八、配置Nagios九、Nagios監控搭建十、Nagios性能分析圖表的安裝十一、Nagios插件的開發與整合

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.

版權聲明:本文為CSDN部落客「weixin_34368949」的原創文章,遵循CC 4.0 BY-SA版權協定,轉載請附上原文出處連結及本聲明。

原文連結:https://blog.csdn.net/weixin_34368949/article/details/91893602