1. 介紹
Nagios是一款開源軟件,能有效監控 Windows 、Linux、VMware 和 Unix 主機狀態,交換機、路由器等網絡設置等。當監控出異常時提醒系統管理員,當異常恢復時也會通知。Nagios提供一個基於瀏覽器的web界面,方便管理人員查看系統的運行狀態,網絡狀態、服務狀態、日志信息,以及其他異常現象。

2. 安裝
說明:安裝機器為CentOS系統
2.1安裝依賴包
由於Nagios提供了Web界面,因此需要安裝Apache;由於配置Web界面需要PHP模塊支持,所以需要安裝PHP,還需要其他插件。
sudo yum install httpd php php-cli gcc glibc glibc-common gd gd-devel net-snmp
2.2創建用戶和分組
sudo useradd -m nagios #新建用戶
sudo passwd nagios #修改密碼
sudo groupadd nagcmd #新建分組
sudo usermod -a -G nagcmd nagios #添加用戶到分組
2.3安裝Nagios
下載
wget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-4.0.8.tar.gz
安裝
tar xzf nagios-4.0.8.tar.gz #解壓 cd nagios-4.0.8 sudo ./configure --with-command-group=nagcmd sudo make all sudo make install sudo make install-init sudo make install-config sudo make install-commandmode
安裝 Web界面
sudo make install-webconf
為web界面創建登錄賬號
sudo htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
其中nagiosadmin為賬號名可更改,同時會提示添加密碼。
重啟Apache服務
sudo service httpd restart
目錄名稱 | 作用 |
bin | Nagios 可執行程序所在目錄 |
etc | Nagios 配置文件目錄 |
sbin | Nagios cgi 文件所在目錄, 也就是執行外部 命令所需要文件所在的目錄 |
share | Nagios 網頁存放路徑 |
libexec | Nagios 外部插件存放目錄 |
var | Nagios 日志文件、Lock 等文件所在的目錄 |
var/archives | agios 日志自動歸檔目錄 |
var/rw | 用來存放外部命令文件的目錄 |
2.4安裝plugins
下載
wget http://nagios-plugins.org/download/nagios-plugins-2.0.3.tar.gz
安裝
tar xzf nagios-plugins-2.0.3.tar.gz
cd nagios-plugins-2.0.3.tar.gz
sudo ./configure --with-nagios-user=nagios --with-nagios-group=nagios
sudo make
sudo make install
默認安裝目錄:/usr/lib64/nagios/plugins/
安裝完畢,web界面
3. 基本配置
3.1 配置文件列表配置文件作用
配置文件 | 說明 |
cgi.cfg | 控制CGI訪問的配置文件 |
nagios.cfg | Nagios的主配置文件 |
resource.cfg | 變量定義文件,在此定義的變量,用於其它配置文件中使用,如$USER1$ |
objects | objects為目錄,內部含有大量的配置文件 |
objects/command.cfg | 命令定義配置文件 |
objects/contacts.cfg | 聯系人和聯系人分組配置文件 |
objects/localhost.cfg | 定義監控本機的配置文件 |
objects/printer.cfg | 監控打印機的配置文件,默認不啟用此文件 |
objects/switch.cfg | 監控路由器的配置文件,默認不啟用此文件 |
objects/templates.cfg | 定義主機和服務的配置文件 |
objects/timeperiods.cfg | 定義監控時間段的配置文件 |
objects/windows.cfg | 監控Windows機器的配置文件,默認沒有啟動此文件 |
備注: | Nagios 在配置方面非常靈活,默認的配置文件並不是必需的。可以使用這些默認的配置文件,也可以創建自己的配置文件,然后在主配置文件 nagios.cfg 中引用即可。 |
注:在以后修改配置文件后,可以利用以下命令行檢測配置文件是否正確,可以根據錯誤提示修改
sudo /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
修改完配置文件后web界面不會立馬修改,需要重新加載、啟動nagios服務。
sudo service nagios reload
sudo service nagios restart
3.2 命令配置文件
文件名稱:commands.cfg
文件定義格式:
define command{
command_name *******
command_line *******
例如,查看本地負載的命令
# 'check_local_load' command definition define command{ command_name check_local_load command_line $USER1$/check_load -w $ARG1$ -c $ARG2$ }
其中,變量$USER1$在resource.cfg中定義
# Sets $USER1$ to be the path to the plugins
$USER1$=/usr/local/nagios/libexec
$USER1$中自帶很多可執行的文件,可在命令行使用-v,查看具體的用法,這里$ARG1是發出警告(w)的條件,$ARG2是發出嚴重警告(c)的條件。可以用命令執行,命令執行,如
[master@usr]$ /usr/local/nagios/libexec/check_load -w 5.0,4.0,3.0 -c 10.0,6.0,4.0 OK - load average: 0.00, 0.01, 0.05|load1=0.000;5.000;10.000;0; load5=0.010;4.000;6.000;0; load15=0.050;3.000;4.000;0;
3.3 監控本地主機
確認nagios.cfg中有對localhoast.cfg文件的引用
# Definitions for monitoring the local (Linux) host cfg_file=/usr/local/nagios/etc/objects/localhost.cfg
localhost.cfg自帶了對HTTP、ROOTPartition、SSH等服務的定義。
在localhost.cfg定義主機
define host{
use linux-server
host_name localhost
alias localhost
address 127.0.0.1 }
其中host_name是對被監控機器的名稱,alias是被監控機器名稱的別稱,address是被監控機器的ip(127.0.0.1表示本地機器),use指明的是被監控機器繼承的模板(定義模板的位置在templates.cfg,具體含義參考報警部分)。
然后在localhost.cfg里完成對服務(service)的定義
define service{
use local-service
host_name localhost
service_description 磁盤空間
check_command check_local_disk!20%!10%!/ }
其中,use指被監控機器集成的服務模板(定義模板的位置在templates.cfg,具體含義參考報警部分),host_name指主機名,與上面定義的host_name所指含義相同,service_description指要顯示在web界面的內容,check_command指明要執行的命令名稱(命令定義的位置是commands.cfg),示例中的參數20%表示,磁盤剩余空間少於20%($ARG1)時開始報警,10%($ARG2$)表示,磁盤剩余空間少於10)時開始報警。
對本機其他的監控的配置一樣。配置完成后可以在瀏覽器上瀏覽效果(地址:部署nagios所在機器的ip/nagios)
監控主機頁面
監控服務頁面
3.4 監控遠程Linux/UNIX主機
原理
監控遠程的Linux/UNIX由兩部分組成:運行在監控主機上的check_nrpe,運行在被監控主機上的NRPE守護進程。其中check_nrpe不是nagios自帶的可執行文件,是安裝plugins時帶的可執行文件(位置在: /usr/lib64/nagios/plugins/)。
當監控遠程的Linux/UNIX時,工作流程如下:
- nagios運行check_nrpe這個插件,並告訴它要執行什么命令
- check_nrpe連接到被監控端的NRPE守護進程,告訴它命令
- 被監控端的NRPE守護進程執行具體的操作
- 被監控端的NRPE守護進程把執行的結果返回給Nagios做后處理
被監控端的插件安裝與配置
CentOS系統
yum install epel-release
yum install nrpe nagios-plugins-all openssl
Debian/Ubuntu系統
apt-get install epel-release
sudo apt-get install nagios-nrpe-server nagios-plugins
安裝完后進行配置
打開/etc/nagios/nrpe.cfg文件,在allowed_hosts后面添加上監控機器的ip
## Find the following line and add the Nagios server IP ##
allowed_hosts=127.0.0.1 192.168.1.150
開啟NRPE服務
CentOS系統
systemctl start nrpe
chkconfig nrpe on
Debian/Ubuntu系統
sudo /etc/init.d/nagios-nrpe-server restart
回到監控主機,新建目錄servers
sudo mkdir /usr/local/nagios/etc/servers
創建監控遠程Linux/UNIX主機的腳本
sudo touch /usr/local/nagios/etc/servers/clients.cfg
在nagios.cfg中添加上目錄servers,這樣目錄中的文件都會被引入到監控中來。
cfg_dir=/usr/local/nagios/etc/servers
舉例
以“監控遠程Linux/UNIX主機的CPU負載”為例
被監控端
進入目錄cd /etc/nagios/nrpe.cfg
添加命令行:
command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20
修改后重啟服務
service nagios-nrpe-server restart
監控端
打開servers/clients.cfg文件
定義主機
define host{
use linux-server
host_name 10.61.88.23 alias 10.61.88.23 address 10.61.88.23 }
定義服務
define service {
use generic-service,srv-pnp
host_name 10.61.88.23 service_description CPU負載 check_command check_nrpe!check_load notifications_enabled 1 }
其中check_command中check_nrpe!后面的命令check_load對應被監控端的command[check_load]對應的命令。
監控遠程windows
說明
nagios對windows進行監控需要在被監控端安裝NSClient,NSClient++來監控windows主機有三種方式:check_nt、check_nrpe、nsca。check_nt自帶很多功能,可以完成很多基本的需求,但是擴展性差;check_nrpe可以通過執行自己定義的腳本做到很好地擴展。為了滿足自己的需求,可以以上幾種方式結合使用。
在objects目錄下創建文件windows.cfg,添加主機和服務。
check_nt
添加主機和服務
define host{
use windows-server
host_name ruanxi
alias My Windows Server
address 192.168.0.5 } #監控 windows 主機的開機運作時間 define service{ use generic-service host_name ruanxi service_description Uptime check_command check_nt!UPTIME } #監控 windows 主機的內存使用狀況 define service{ use generic-service host_name ruanxi service_description Memory Usage check_command check_nt!MEMUSE!-w 80 -c 90 #內存使用到達80%則warn,到達90%則Critical }
check_nrpe
原理
使用check_nrpe監控windows的原理與監控linux主機的原理一致,這樣可以根據特定的需求自己寫腳本。
以監控某個進程是否運行為例
編輯NSClient配置文件NSC.ini,去掉以下幾行前面的“;”號(去掉注釋,使其生效)
NRPEListener.dll
script_dir=scripts\
CheckExternalScripts.dll
在NSClient安裝目錄下的scripts文件夾下,新建一個check_run.bat批處理文件,如下
@echo off tasklist |find "%1" >NUL IF ERRORLEVEL 1 GOTO err IF ERRORLEVEL 0 GOTO ok :err echo CRITICAL: Process does not exist exit /B 1 :ok echo OK: The process of normal exit /B 0
說明:腳本的退出值與nagios的報警提示對應關系為:0--正常,1--警告,2--嚴重警告
在NSC.ini文件中[External Scripts]下面添加如下行:
check_run=scripts\check_run.bat chrome.exe
重啟NSClinet
可以在被監控端check_nrpe所在的目錄(CentOs默認的安裝目錄為:/usr/lib64/nagios/plugins/)
./check_nrpe -H hostip -c check_run
注:-H后寫剛才腳本所在的機器,-c后寫命令,這里對應配置文件中的check_run
如果結果與預期的一致,那么就可以繼續配置監控端了
配置監控端
修改commands.cfg,增加命令
define command{
command_name check_run
command_line /usr/lib64/nagios/plugins/check_nrpe -H yourip -c check_run
}
修改windows.cfg,增加服務
define service{
use generic-service-urgent,srv-pnp
host_name youip ;要展示信息的機器的ip
service_description check_fileexistspan
check_command check_run
}
4. 報警
4.1 報警配置文件
修改聯系人
配置文件是contacts.cfg.
聯系人定義方式為:
define contact{
contact_name nagiosadmin ; 用戶名稱
use generic-contact ;
alias Nagios Admin ; 用戶別稱
email ****@**** ;修改為需要通知的郵箱
}
該contact繼承了templates.cfg中的genetic-contact,如下
define contact{
name generic-contact ; The name of this contact template service_notification_period 24x7 ; service notifications can be sent anytime host_notification_period 24x7 ; host notifications can be sent anytime service_notification_options w,u,c,r,f,s ; send notifications for all service states, flapping events, and scheduled downtime events host_notification_options d,u,r,f,s ; send notifications for all host states, flapping events, and scheduled downtime events service_notification_commands notify-service-by-email ; send service notifications via email host_notification_commands notify-host-by-email ; send host notifications via email register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL CONTACT, JUST A TEMPLATE! }
,host_notification_commands指定的方式為notify-host-by-email,如果是微信或短信等其他方式,用逗號隔開寫在后面即可。其中命令notify-host-by-email的定義在commands.cfg中默認已定義,如下
# 'notify-host-by-email' command definition 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/bin/mail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$ }
聯系人分組定義方式為:
define contactgroup{
contactgroup_name admins
alias Nagios Administrators
members nagiosadmin ;這里填寫剛才定義的contact_name
}
4.2 修改報警時間周期
define host{
use linux-server
host_name server_10.61.91.37 alias server_10.61.91.37 address 127.0.0.1 contact_groups admins ;這里添加報警組名稱(上面剛定義的) }
要使主機或服務能夠發郵件,必須在定義主機或服務時添加說明,以服務為例。修改localhost.cfg中本機的修改。
這樣主機出現異常時會發送異常到報警組,報警組把異常分配給組里的成員,然后成員按着自己預先設定的報警方式進行報警。主機繼承了linux-server模板,模板的定義在templates.cfg文件,文件中存在着主機和服務的繼承關系,可以根據需要自己定制參數,以linux-server模板為例:
define host{
name linux-server ; 主機模板名稱
use generic-host ; 繼承通用模板
check_period 24x7 ; 監控的時間段為一周七天,每天24小時,具體定義詳見timeperiods.cfg check_interval 5 ; 對主機每5分鍾檢測一次(注:這里的數值單位默認為分鍾) retry_interval 1 ; 重試檢測時間為1分鍾 max_check_attempts 1 ; nagios對主機的最大檢查次數,即nagios在檢查發現某主機異常時,並不馬上下定論 check_command check-host-alive ;指定檢查主機狀態的命令,其中“check-host-alive”在commands.cfg文件中定義 notification_period workhours ; 主機故障時,發送通知的時間范圍,其中“workhours”在timeperiods.cfg中進行了定義; notification_interval 30 ; 故障出現,沒有修復,每30分鍾再發一次告警 notification_options d,u,r ; 定義主機在什么狀態下可以發送通知給使用者,d即down,表示宕機狀態; register 0 ;指明這非真正主機,這只是模板而已 }
注:這里的時間是時間片的含義,定義在nagios.cfg中command_check_interval=60,默認單位是s 。30即30*60s
4.3 郵件報警
上面是以郵件報警為例說明的,但是前提是系統可以往外發郵件,配置如下(以CentOs為例)
打開/etc/mail.rc文件
添加
其中
set from=[發送人郵箱地址]
set smtp=[smtp服務器地址]
set smtp-auth-user=[郵箱用戶名]
set smtp-auth-password=[郵箱密碼]
set smtp-auth=login
測試:
mail -s [郵件主題] [郵件地址] 回車,然后輸入郵件內容,最后按“Ctrl + D”。如果發送成功表名配置成功。
4.4 微信、短信報警
參考
110雲監控 Nagios告警集成 鏈接
利用Nagios調用Python程序控制微信公眾平台發布報警信 鏈接
5. 分組
完成了以上的配置,已經完成了nagios的基本配置,但是當有多個機器時,所有的機器顯示在一起會顯得很亂,並且和自己無關的主機也會對自己報警。為了作區分可以對主機和服務進行分組,這樣管理人員就可以只關注自己管理的主機和服務。
5.1 主機分組
定義分組的位置放哪都行,只要引入到nagios.cfg中即可,為了方便找,這里把分組放到localhost.cfg和windows.cfg里。
define hostgroup{
hostgroup_name linux-servers ; The name of the hostgroup
alias Linux Servers ; Long name of the group
members server_10.61.91.37,172.16.41.211,10.61.88.23 ; 主機名 }
點擊web界面左邊導航條中主機組的表格,分組示例
5.2 服務分組
define servicegroup{
servicegroup_name dbservices
alias Database Services
members 進程CPU與內存,10.61.88.23,監控端口狀態 ;這里寫service中的service_description }
點擊web界面左邊導航條中服務組的表格,分組示例
6. 界面美化
6.1 漢化
可以根據自己的需求對web界面的顯示選項進行定制和修改。
對左邊導航條的修改文件是/usr/local/nagios/share/side.php
修改后,需要重新加載、啟動nagios。簡易修改效果如下:
6.2 pnp4nagios插件
nagios自帶圖表分析功能,但是不美觀,可以利用插件pnp4nagios,它對進行檢測的主機和服務進行統計,管理人員可以根據統計報表進行分析、改善。
官網安裝文檔
效果圖
7. 參考
Install And Configure Nagios 4 On Ubuntu 14.10/14.04
Nagios 監控系統架設全攻略
8. 維護備忘
郵箱發件人設置:/etc/mail.rc
配置文件檢查:sudo /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
重新加載:sudo service nagios reload sudo service nagios restart
監控遠程Linux
新建用戶
sudo useradd -m nagios
sudo passwd nagios
安裝nagios-plungins: sudo apt-get install nagios-nrpe-server nagios-plugins
配置文件地址:/etc/nagios/nrpe.cfg
插件所在地址:/usr/lib/nagios/plugins (或 /usr/lib64/nagios/plugins/)
添加可以監控的機器:
sudo vim /etc/nagios/nrpe.cfg 增加:allowed_hosts=127.0.0.1 10.61.73.49 (server的ip) 增加具體命令:command[check_cpu_proc]=
修改后重新啟動:sudo service nagios-nrpe-server restart
監控遠程Windows
cd /usr/local/nagios/libexec/
查看是否正常工作:
./check_nt -H 172.16.41.84 -p 12489 -v UPTIME (12489為默認端口)