Nagios 監控


1. 介紹

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

朋友們如果覺得麻煩,可以試試OneAlert一鍵集成nagios,輕松實現微信、電話、郵件、短信、APP的告警通知。 http://www.onealert.com/activity/nagios.html 

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為默認端口)


免責聲明!

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



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