2. 部署Nagios
2.1 創建Nagios用戶組
2.2 下載Nagios和Nagios-plugin源碼
2.3 編譯安裝
3. 部署Nagios-plugin
3.1 編譯安裝nagios-plugin
4. Nagios功能配置
4.1 配置監控對象
4.1.1 監控本質
4.1.2 配置監控主機
4.2 配置報警方式
4.2.1 配置聲音報警
4.2.2 配置郵件報警
4.3 配置遠程監控
4.3.1 下載NRPE插件
4.3.2 解壓安裝
4.3.3 配置nrpe
4.4 配置window主機監控
4.5 配置數據庫存儲
4.5.1 NDOMOD.o事件中斷模塊
4.5.2 Nagios配置NDOUtils插件
4.6 配置歷史數據圖形化
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 reload
和service 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。
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