Nagios監控系統部署(源碼)

1. 概述

Nagios是一款很是優秀的監控報警信息。其設計思想很先進,以Nagios Core + Nagios Plugin的方式來實現核心功能和功能擴展。
同時其按照監控和報警的本質,即監測,控制,報警,通知四部分,把各個部分的對象經過配置文件顆粒化,而後相互引用,並最終造成對主機或者服務的動做執行,如報警,通知,入庫,展現,處理等操做爲落地配置。
Nagios Core的功能,應該是解析配置文件和配置文件邏輯,而Nagios Plugin則負責收集監控對象的狀態。
Nagios包括可選的Web前端。Nagios command模式是默認的。php

2. 部署Nagios

2.1 建立Nagios用戶組

本篇博客主要在虛擬機console上進行Nagios監控系統部署。須要提早爲Nagios建立全局系統用戶nagios和nagcmd用戶,用於運行nagios後臺進程等。
執行命令:
useradd -m -s /sbin/nologin -u 603 nagcmd
useradd -m -s /sbin/nologin -u 604 nagioshtml

注:此處有錯誤,-m爲不建立家目錄,這裏應該是-M。-s /sbin/nagios,此項執行會形成nagios啓動報錯。前端

執行命令,將nagios添加至nagcmd組;將nagcmd和nagios添加至apache組
usermod -a -G nagcmd nagios
usermod -a -G nagcmd,nagios apachenode

2.2 下載Nagios和Nagios-plugin源碼

下載最新版本的naigos和nagios-plugin
wget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-4.4.1.tar.gz --no-check-certificate
wget http://nagios-plugins.org/download/nagios-plugins-2.1.2.tar.gzlinux

2.3 編譯安裝

解壓ios

tar -zxvf nagios-4.4.1.tar.gz -C /tmp
tar -zxvf nagios-plugins-2.1.2.tar.gz -C /tmpweb

配置configure數據庫

./configure \
--prefix=/usr/local/globle/softs/monitor/nagios/4.4.1 \
--sysconfdir=/usr/local/globle/softs/monitor/nagios/4.4.1/etc \
--localstatedir=/usr/local/globle/softs/monitor/nagios/4.4.1/var/ \
--with-opsys=linux \
--with-dist-type=systemd \
--with-inetd-type=systemd \
--enable-event-broker \
--enable-debugging \
--with-webdir=/usr/local/globle/softs/monitor/nagios/4.4.1/share \
--with-pluginsdir=/usr/local/globle/softs/monitor/nagios/4.4.1/plugins \
--with-brokersdir=/usr/local/globle/softs/monitor/nagios/4.4.1/brokers \
--with-cgibindir=/usr/local/globle/softs/monitor/nagios/4.4.1/cgibin \
--with-logdir=/usr/local/globle/softs/monitor/nagios/4.4.1/log \
--with-initdir=/usr/local/globle/softs/monitor/nagios/4.4.1/init.d \
--with-checkresult-dir=/usr/local/globle/softs/monitor/nagios/4.4.1/var/spool/checkresults \
--with-nagios-user=nagios \
--with-nagios-group=nagios \
--with-command-user=nagcmd \
--with-command-group=nagcmd \
--with-mail=/bin/mail \
--with-httpd-conf=/etc/httpd/conf.d/ \
--with-temp-dir=/tmp \
--with-iobroker=epoll \

編譯apache

執行一下命令:
make all 所有編譯
make install 安裝nagios的基本功能
make install-init 安裝nagios的啓動腳本
make install-commandmode 安裝nagios的命令模式
make install-config 安裝nagios配置模板
make install-webconfig 安裝naigios的http配置文件vim

拷貝啓動腳本

在上面的編譯過程當中,將nagios啓動腳本放在了全局文件系統上。此時若是想經過service nagios start的方式啓動nagios,須要執行一下命令:
ln -fs /usr/local/globle/softs/monitor/nagios/4.4.1/init.d/nagios /etc/init.d/

啓動
在啓動過程當中出現報錯,具體報錯信息和解決方式參見:
筆記內鏈:《Error【0006】:could not create or update nagios.configtest.md
博客園地址:http://www.javashuo.com/article/p-ryfwmynu-cq.html

站點訪問
上述的操做中,經過--with-httpd-conf選項,指定了nagios的http配置。
這段配置使用戶能夠經過瀏覽器來訪問httpd服務器提供的nagios監控站站點。
配置生成目錄在/etc/httpd/conf.d/nagios.conf,其內容以下:

ScriptAlias /nagios/cgi-bin "/usr/local/globle/softs/monitor/nagios/4.4.1/sbin"
<Directory "/usr/local/globle/softs/monitor/nagios/4.4.1/sbin">
    Options ExecCGI
    AllowOverride None
   <IfVersion >= 2.3>
        <RequireAll>
            Require all granted
            AuthName "Nagios Access"
            AuthType Basic
            AuthUserFile /usr/local/globle/softs/monitor/nagios/4.4.1/etc/htpasswd.users
            Require valid-user
         </RequireAll>
    </IfVersion>
    <IfVersion < 2.3>
        Order allow,deny
        Allow from all
        AuthName "Nagios Access"
        AuthType Basic
        AuthUserFile /usr/local/globle/softs/monitor/nagios/4.4.1/etc/htpasswd.users
        Require valid-user
    </IfVersion>
</Directory>

Alias /nagios "/usr/local/globle/softs/monitor/nagios/4.4.1/share"
<Directory "/usr/local/globle/softs/monitor/nagios/4.4.1/share">
    Options None
    AllowOverride None
    IfVersion >= 2.3>
    <RequireAll>
        Require all granted
        AuthName "Nagios Access"
        AuthType Basic
        AuthUserFile /usr/local/globle/softs/monitor/nagios/4.4.1/etc/htpasswd.users
        Require valid-user
    </RequireAll>
    </IfVersion>
    <IfVersion < 2.3>
        Order allow,deny
        Allow from all
        AuthName "Nagios Access"
        AuthType Basic
        AuthUserFile /usr/local/globle/softs/monitor/nagios/4.4.1/etc/htpasswd.users
        Require valid-user
    </IfVersion>
</Directory>

建立站點認證
nagios站點登錄有一個角色認證的過程。
執行命令:htpasswd -c /usr/local/globle/softs/monitor/nagios/4.4.1/etc/htpasswd.users nagiosadmin,輸入兩次密碼
生成nagiosadmin的管理員認證文件/usr/local/globle/softs/monitor/nagios/4.4.1/etc/htpasswd.users
在訪問Nagios監控站點時,須要輸入nagiosadmin和其密碼

訪問站點
上面的過程,已經部署了nagios監控系統,而且啓動了nagios服務,所以能夠經過瀏覽器來訪問nagios監控站點。
訪問:http://192.168.80.8/nagios (本篇博客訪問http://localhost/nagios

本篇博客由於使用了win10的Edge瀏覽器訪問VMware workstation虛擬機的站點,由於Edge安全機制,拒絕訪問。
所以須要將虛擬機console的80端口映射到宿主機的win10系統中。具體映射操做參考博客《》

輸入nagiosadmin和密碼後,報錯
信息以下:
You don't have permission to access /nagios/ on this server
出現這種狀況的緣由不少。本人在檢索了網上的教程以後,定位爲虛擬機console未安裝php環境致使
執行命令:yum -y install php,此過程會自動建立php的http配置,路徑在/etc/httpd/conf.d/php.conf
而後重啓httpd服務:service httpd restart,此時再次訪問nagios監控站點便可。

3. 部署Nagios-plugin

在第二部分中,已經部署了nagios監控服務,也可以訪問監控站點。可是訪問時的現象以下:

從截圖的錯誤提示看出,此時並無監控插件(能夠經過查看/usr/local/globle/softs/monitor/nagios/4.4.1/libexec目錄內容確認)。
所以須要繼續編譯nagios-plugin

3.1 編譯安裝nagios-plugin

第二部分中已經建立了nagios相關的用戶組。這部分在編譯安裝nagios-plugin時能夠不在重複。

解壓
執行命令解壓:
tar -zxvf nagios-plugins-2.1.2.tar.gz -C /tmp/
cd /tmp/nagios-plugins-2.1.2/

編譯安裝
執行如下命令:
./configure --prefix=/usr/local/globle/softs/monitor/nagios/4.4.1/
make
make install
結束以後,在/usr/local/globle/softs/monitor/nagios/4.4.1/libexec目錄下,可以看到已經安裝了不少插件

站點訪問
此時站點上已經恢復正常,截圖以下:

4. Nagios功能配置

本文第2部分主要介紹nagios-core的編譯安裝和運行,第3部分介紹了nagios-plugin的編譯安裝。上述這些工做僅僅是最基本的操做,即部署。
本文第4部分將會開始配置nagios的監控對象,已經其餘功能的實現。

4.1 配置監控對象

4.1.1 監控本質

配置nagios監控的困難之處,可能在於監控對象的配置。其實一旦理解了監控報警本質,對於nagios的配置就會豁然開朗。
所謂監控報警,本人理解主要有四個部分:監測,控制,報警,通知
一個優秀的監控報警系統,至少要包括這四部份內容。

監測
監測很容易理解。
我須要監測的主機對象,如Linux主機,window主機,交換機,路由器,打印機等主機或者網絡設備;我也想監測服務對象,好比DNS服務,HTTP服務,DB服務等業務
據此不難看出,nagios把全部的監控目標定義未監控對象,經過配置文件來實現用戶定義,如hosts.conf來定義主機對象,經過service.conf來定義服務對象
固然,主機或者服務,都不是單獨存在的,他們之間有重複的部分,也有獨立的部分,也可能存在邏輯關係等。

控制
管理的基礎就是可以控制。不管是經過命令行或者CGI等方式,都須要提供一個遠程控制的功能,來應對報警,異常,故障等發生時的管理和維護方式。

報警
報警是監控系統最基本的功能。報警的方式有不少,實時的,或者延遲的。報警有閾值,有策略等。即監控對象在什麼狀況下會報警,報警後報告給誰等。
報警的方式有不少種,聲音,圖像,郵件,短信,微信等。目的是把異常或者故障消息,發送給管理員。

通知
這裏的通知,偏重於通知方式和時間,手段等。

總而言之,nagios的對象定義,是顆粒話的,用一句話總結就是:
在什麼時刻或者時間段內,對什麼主機或者服務進行監控,當達到什麼閾值以後 ,以什麼方式在什麼時間段內,報告給什麼人

4.1.2 配置監控主機

本部分在主要是配置監控對象,示例爲配置nagios監控kvm虛擬機node11。

具體的nagios各種配置文件做用及參數詳解,參見博客《Nagios配置文件詳解.md》,
博客園地址:http://www.javashuo.com/article/p-xdxchmyd-kd.html

建立配置目錄
這裏但願把用戶自定義的監控對象與系統分開。
進入nagios對象配置目錄:cd /usr/local/globle/softs/monitor/nagios/4.4.1/etc/objects
建立用戶自定義配置目錄:mkdir knodes

將用戶自定義配置目錄添加在主配置文件nagios.cfg
編輯主配置文件:vim /usr/local/globle/softs/monitor/nagios/4.4.1/etc/nagios.cfg
添加cfg_dir指令:cfg_dir=/usr/local/globle/softs/monitor/nagios/4.4.1/etc/objects/knodes,保存退出

建立node11對象配置文件
進入到用戶自定義配置目錄:cd /usr/local/globle/softs/monitor/nagios/4.4.1/etc/objects/knodes/
建立node11的對象配置文件:touch node11.cfg,node11.cfg中,對node11要監控的內容進行定義:

# 主機定義
define host {
    use linux-server
    host_name node11
    alias node11
    address 192.168.80.11
}
# 服務定義
define service {
    use local-service ; Name of service template to use
    host_name node11
    service_description Root Partition
    check_command check_nrpe!check_disk
    notifications_enabled 1
}
define service {
    use local-service ; Name of service template to use
    host_name node11
    service_description Current Users
    check_command check_nrpe!check_users
    notifications_enabled 1
}

define service {
    use local-service ; Name of service template to use
    host_name node11
    service_description Total Processes
    check_command check_nrpe!check_total_procs
    notifications_enabled 1
}

注:node11.cfg中,對node11服務的監測,採用了check_nrpe遠程插件。這個在下文【4.3 配置遠程監控】中討論

編輯node11.cfg以後,保存退出。
經過service nagios configtest檢查nagios配置文件是否正確,經過service nagios reload從新加載nagios服務進程。
此時即可經過web監控站點,訪問已經被監控的node11,以下圖:

4.2 配置報警方式

nagios有不少報警方式,最基本的就是圖形化報警,還有聲音,郵件,短信等方式。
圖形化是默認的報警方式,這裏不作介紹。主要配置聲音和郵件報警

4.2.1 配置聲音報警

拷貝報警音頻至站點多媒體目錄
配置聲音報警,須要將報警聲音音頻文件上傳值站點下,本篇博客中nagios存放多媒體的路徑爲:
/usr/local/globle/softs/monitor/nagios/4.4.1/share/media,將報警聲音文件warn.wav拷貝至該目錄

修改配置文件
此時還須要修改CGI配置文件,使得web真的可以進行聲音報警。
在/usr/local/globle/softs/monitor/nagios/4.4.1/etc/cgi.cfg的328行左右,將內容修改以下:

host_unreachable_sound=warn.wav
host_down_sound=warn.wav
service_critical_sound=warn.wav
service_warning_sound=warn.wav
service_unknown_sound=warn.wav

注:normal_sound這同樣默認註釋,不作修改

重啓服務
執行service nagios reloadservice httpd restart重啓服務,而後刷新網頁便可聽見報警聲。

修改網頁刷新頻率
在nagios監控站點看到網頁的刷新頻率是90s。以下圖:

這個時間間隔能夠在cgi.cfg中修改,以便使用不一樣規模的集羣監控和報警程度。本篇博客修改成10s。操做以下:
修改配置文件:/usr/local/globle/softs/monitor/nagios/4.4.1/etc/cgi.cfg
將refresh_rate=90修改成refresh_rate=10,保存退出
執行service nagios reload從新加載配置,結果以下圖:

4.2.2 配置郵件報警

配置郵件報警沒有其餘兩種方式及時,可是能夠做爲故障備案和統計,也是很是必要的。主要是在nagios監控服務器上,配置mail客戶端。經過mail客戶端可否發送郵件,即可配置nagios發送郵件。本部分主要是在Linux配置了mail可以發送郵件的基礎上,配置nagios發送郵件報警。

配置Linux經過mail發送郵件,參閱博客《Linux配置mail客戶端發送郵件.md
博客園地址:http://www.javashuo.com/article/p-qntskirj-bo.html

添加收件郵箱至聯繫人
編輯配置文件:vim /usr/local/globle/softs/monitor/nagios/4.4.1/etc/objects/contacts.cfg
添加如下內容後,保存退出:

define contact {
    contact_name liwanliang
    use generic-contact
    alias 值班員
    email yunweinote@126.com
}
define contactgroup {
    contactgroup_name monitorer
    alias 值班組
    members liwanliang
}

修改模板配置,添加新的聯繫組
由於上面的contact中,從新定義了一個contact和contactgroup,且不屬於nagios默認配置的admins組,所以須要在模板中添加聯繫人組。
修改配置文件:vim /usr/local/globle/softs/monitor/nagios/4.4.1/etc/objects/templates.cfg
將contact_groups後面的選項,由admins,修改成monitorer,保存退出

define host {
    name linux-server 
    use generic-host
    check_period 24x7
    #check_interval 5 ; Actively check the host every 5 minute
    check_interval 1 
    retry_interval 1
    #max_check_attempts 10
    max_check_attempts 3
    check_command check-host-alive
    notification_period workhours 
    notification_interval 120
    notification_options d,u,r
    #contact_groups admins
    contact_groups monitorer
    register 0 ; DON'T REGISTER THIS DEFINITION - ITS NOT A REAL HOST, JUST A TEMPLATE!
}

define service {
    name generic-service
    active_checks_enabled 1
    passive_checks_enabled 1
    parallelize_check 1
    obsess_over_service 1 
    check_freshness 0
    notifications_enabled 1
    event_handler_enabled 1 
    flap_detection_enabled 1
    process_perf_data 1
    retain_status_information 1
    retain_nonstatus_information 1
    is_volatile 0
    check_period 24x7
    max_check_attempts 3 
    #check_interval 10 
    check_interval 5 
    retry_interval 2
    #contact_groups admins
    contact_groups monitorer
    notification_options w,u,c,r
    notification_interval 60
    notification_period 24x7 
    register 0 ; DON'T REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE!
}

修改郵件發送命令
默認採用sendmail命令來定義發送郵件的命令。這裏修改成mail。具體操做以下:

define command {
    command_name notify-host-by-email
    #command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /usr/sbin/sendmail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$
    command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /bin/mail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$
}
define command {
    command_name notify-service-by-email
    #command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n" | /usr/sbin/sendmail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
    command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n" | /bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert:$HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
}

修改服務檢查時間間隔
由於nagios報警是有策略的,不會在第一次監測到異常就會報警。所以須要設定最大嘗試次數和每次之間的時間間隔。
這些均可以在模板配置文件/usr/local/globle/softs/monitor/nagios/4.4.1/etc/objects/templates.cfg修改

注:須要根據業務需求,或者集羣大小等作對應的修改

本篇博客修改內容見本篇上述【修改配置模板,添加新的聯繫組】
注意:要配置發送通知,還須要爲node11的services監控,添加notifications_enabled 1選項,不然不會發送通知

重啓服務
執行命令:service nagios reload,從新加載配置

4.3 配置遠程監控

Nagios的遠程控制經過NRPE插件實現。NRPE是 Nagios Remote Plugin Executor的縮寫。

4.3.1 下載NRPE插件

本篇博客安裝了兩個版本的NRPE。一個是nrpe.2.15,一個是nrpe.3.3.1。

下載地址:https://sourceforge.net/projects/nagios/files/

4.3.2 解壓安裝

執行命令:tar -zxvf nrpe-2.15.tar.gz -C /tmp
進入到目錄:cd /tmp/nrpe-2.15
執行如下命令:

configure

./configure \
 --prefix=/usr/local/globle/softs/monitor/nagios/nrpe/2.15/ \
--sysconfdir=/usr/local/globle/softs/monitor/nagios/nrpe/2.15/etc \
--localstatedir=/var \
--with-dist-type=rh \
--with-init-type=sysv \
--with-inetd-type=xinetd

make
執行命令:make all

make install
執行命令:
make install-plugin,安裝nrpe插件check_nrpe;
make install-daemon,安裝啓動進程;
make install-daemon-config,安裝nrpe.cfg配置文件
make install-xinetd,安裝/etc/xinet.d/nrpe文件

注:nrpe2.15的安裝能夠在解壓後的源碼的README.md中獲取,README.md中也指出在docs/NRPE.pdf中也有安裝指導手冊

4.3.3 配置nrpe

配置nrpe的過程比較簡單
修改/etc/xinetd.d/npre
由於這裏使用超級管理進程xinetd來接管nrpe,以便減輕監控節點的負載。所以須要在xinetd.d下配置nrpe。
配置的/etc/xinetd.d/nrpe內容以下:

service nrpe
{
        flags = REUSE
        socket_type = stream
        port = 5666
        wait = no
        user = nagios
        group = nagios
        server = /usr/local/globle/softs/monitor/nagios/nrpe/2.15//bin/nrpe
        server_args = -c /usr/local/globle/softs/monitor/nagios/nrpe/2.15/etc/nrpe.cfg --inetd
        log_on_failure += USERID
        disable = no
        only_from = 127.0.0.1 192.168.80.8
}

啓動xinetd
編輯配置文件vim /etc/services,在最有一行添加以下內容,保存退出:

nrpe           5666/tcp           # nrpe

上面內容配置完成以後,執行命令service xinetd restart,啓動xinetd服務,並經過netstat -tupln | grep 5666 檢查nrpe的5666端口是否已經監聽

配置nrpe.conf
nrpe.conf是nrpe服務讀取的配置文件,主要涉及check_commod的配置。
本篇博客中,nrpe.2.15的nrpe.cfg配置以下:

log_facility=daemon
log_file=/var/nrpe.log
debug=1
pid_file=/var/nrpe.pid
server_port=5666
nrpe_user=nagios
nrpe_group=nagios
allowed_hosts=127.0.0.1,::1
dont_blame_nrpe=0
allow_bash_command_substitution=0
command_timeout=60
connection_timeout=300
command[check_users]=/usr/local/globle/softs/monitor/nagios/4.4.1/libexec/check_users -w 5 -c 10
command[check_load]=/usr/local/globle/softs/monitor/nagios/4.4.1/libexec/check_load -r -w .15,.10,.05 -c .30,.25,.20
command[check_hda1]=/usr/local/globle/softs/monitor/nagios/4.4.1/libexec/check_disk -w 20% -c 10% -p /dev/hda1
command[check_zombie_procs]=/usr/local/globle/softs/monitor/nagios/4.4.1/libexec/check_procs -w 5 -c 10 -s Z
command[check_total_procs]=/usr/local/globle/softs/monitor/nagios/4.4.1/libexec/check_procs -w 150 -c 200

上述內容中,主要修改的地方就是command,將其修改成nagios的libexec目錄,不然會執行報錯
最後,在nagios的command.cfg中建立check_nrpe命令便可

4.4 配置window主機監控

4.5 配置數據庫存儲

4.5.1 NDOMOD.o事件中斷模塊

Nagios數據導出插件NDOUtils插件(Nagios Data Output Utils),提供了將Nagios配置和告警信息導出的功能。
這個插件提供事件中斷(event broker)模塊(NDOMOD.o),從Nagios獲取數據,而後將數據通輸入到存儲。
可以使用的存儲有:

  • File
  • DB

可以使用發送數據的方式包括:

  • File2Sock
  • Unix Socket
  • Tcp Socket

4.5.2 Nagios配置NDOUtils插件

本部分參閱博客《Nagios數據存儲插件NDOUtils的部署和測試.md
博客園地址:http://www.javashuo.com/article/p-moszstaz-ke.html

4.6 配置歷史數據圖形化

相關文章
相關標籤/搜索