Nagios監控系統部署(源碼)


1. 概述

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

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 nagios

注:此處有錯誤,-m為不創建家目錄,這里應該是-M。-s /sbin/nagios,此項執行會造成nagios啟動報錯。

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

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.gz

2.3 編譯安裝

解壓

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

配置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 \

編譯

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

拷貝啟動腳本

在上面的編譯過程中,將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
博客園地址:https://www.cnblogs.com/liwanliangblog/p/9266985.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》,
博客園地址:https://www.cnblogs.com/liwanliangblog/p/9267672.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
博客園地址:https://www.cnblogs.com/liwanliangblog/p/9276606.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
博客園地址:https://www.cnblogs.com/liwanliangblog/p/9278872.html

4.6 配置歷史數據圖形化


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM